登录
首页 >  Golang >  Go问答

go 有几行代码不懂。求好心人指教

来源:SegmentFault

时间:2023-01-07 20:00:33 498浏览 收藏

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天golang学习网就整理分享《go 有几行代码不懂。求好心人指教》,聊聊go,希望可以帮助到正在努力赚钱的你。

问题内容

forever := make(chan bool)

go func() {
    for d := range msgs {
        log.Printf("Received a message: %s", d.Body)
    }
}()

log.Printf(" [*] Waiting for messages. To exit press CTRL+C")

上面这行代码什么意思?

"

go func(){}()  这又是什么语法?

正确答案

forever := make(chan bool)

go func() {
    for d := range msgs {
        log.Printf("Received a message: %s", d.Body)
    }
}()

log.Printf(" [*] Waiting for messages. To exit press CTRL+C")

修改为:

//此处提取出匿名函数,便于理解
func FUNCTION(msgs Msgs){
    for d := range msgs {
        log.Printf("Received a message: %s", d.Body)
    }
}

forever := make(chan bool) //此处叫channel

go FUNCTION(msg) //go关键字启动一个携程(可以简单理解为轻量级的线程)

log.Printf(" [*] Waiting for messages. To exit press CTRL+C")

另外,你要是真的想实现CTRL+C执行优雅退出的话,这样写:

forever := make(chan os.Signal)

//监听这么多信号,具体的忘完了。自己查吧。
signal.Notify(forever, os.Interrupt, os.Kill, syscall.SIGINT, syscall.SIGUSR1, syscall.SIGUSR2, syscall.SIGHUP, syscall.SIGTERM)


go func() {
    for d := range msgs {
        log.Printf("Received a message: %s", d.Body)
    }
}()

log.Printf(" [*] Waiting for messages. To exit press CTRL+C")

比较推荐你看这个代码片段
因为和题目的几个关键词比较像:协程,协程+匿名函数,channel。

写的比较完善的一个socket-port的proxy,里面有协程的用法,有监听信号的channel,有waitgroup实现协程的控制,系统signal信号处理。

理论要掌握,实操不能落!以上关于《go 有几行代码不懂。求好心人指教》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表