关于go:带读-Go-in-Action中文Go语言实战一

39次阅读

共计 1026 个字符,预计需要花费 3 分钟才能阅读完成。

集体感觉《Go in Action》(中文:Go 语言实战) 相比于《The Go Programming Language》(中文:Go 语言圣经) 要接地气一些,后者很像苏俄的教材,一板一眼,自底向上。前者更像美式教材,一上来就给你一个残缺的“搜寻数据”的我的项目,而后自顶向下,耳濡目染中教你想要的常识。(没有孰优孰劣,相比于大黑书 集体更偏爱 in action 系列,要想学扎实当然 2 本都要看啦)


第一章 Go 语言的介绍

介绍了 Go 的产生的起因,及特点,这方面的文章帖子太多,这里不再赘述。

第二章如何疾速开始一个 Go 程序

这里给出咱们要学习的第一个程序架构:

这一章次要通过对程序的逐行解说,实现了对 json 格局的指标数据进行搜寻的性能。

上面列出一些集体认为值得关注的点:

对于拜访标识符:

和 Java 的 Public/Private 不同 Go 应用首字母大小写标识是否能被其余包中的代码间接拜访。

对于初始化:

0 值的初始化用 var,非零值用:=

对于援用传递 or 值传递

golang 没有援用传递,全是值传递,就算是指针也是值传递(存的是变量的内存地址罢了)

对于闭包:以上面的代码为例

for _, feed := range feeds {
        // Retrieve a matcher for the search.
        matcher, exists := matchers[feed.Type]
        if !exists {matcher = matchers["default"]
        }

        // Launch the goroutine to perform the search.
        go func(matcher Matcher, feed *Feed) {Match(matcher, feed, searchTerm, results)
            waitGroup.Done()}(matcher, feed)
    }

留神到闭包外面并没有传入 ’waitGroup’,但却胜利拜访到了,并不是因为这个匿名函数拿到了 waitGroup 的正本,而是通过闭包间接拜访到了外层作用域中 waitGroup 变量自身。

对于数据转化:

var feeds = [] * feed
err = json.NewDecoder(file).Decode(&feeds)
return feeds, err

这种性能代码片段其实能够积攒一些,工作中用的挺多的,当然间接应用 unmarshal 也可,因为这里 Decode 就是用 unmarshal 封装的。

参考:Kennedy W , Ketelsen B , Martin E S . Go in action. 2016.

正文完
 0