go语言实战阅读笔记

蛐蛐儿阳 · · 722 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

我只把值得记录的写一下。

1,

_ "github.com..."  的方式导入包, 不是忽略包, 也不是其他类要用这个包。我原来理解错误。 
这句话的意思是让编译器接受包导入, 并执行包里面所有文件的init函数。

我测试了一下, 他把引入包的所有init 函数都执行了一遍, 顺序我测试的结果是按字母排序的

2,

在 Go 语言中,所有变量都被初始化为其零值。对于数值类型,
零值是 0;对于字符串类型, 零值是空字符串;对于布尔类型,
零值是 false;对于指针,零值是 nil。

其他都懂, 但nil, 是空指针的意思。

3,
golang中map和切片的区别:

切片时指针类型,数组是值类型
数组的长度是固定的,而切片不是(切片是动态的数组)
切片比数组多一个属性:容量(cap)
切片的底层是数组

4,

在 Go 语言中,如果 main 函数返回,整个程序也就终止了。
Go 程序终止时,还会关闭所有 之前启动且还在运行的 goroutine。
写并发程序的时候,最佳做法是,在 main 函数返回前,
清理 并终止所有之前启动的 goroutine。
编写启动和终止时的状态都很清晰的程序,有助减少 bug,防 止资源异常。

这个我恰好尝试过, 不管go func 有没有执行完, 只要main有输出,
整个进程结束, 解决方法是书中的waitGroup. 用法参考网址
https://studygolang.com/articles/12972?fr=sidebar

func main() {
    wg := sync.WaitGroup{}
    wg.Add(100)
    for i := 0; i < 100; i++ {
        go func(i int) {
            fmt.Println(i)
            wg.Done()
        }(i)
    }
    wg.Wait()
}

书指不定哪年的,WaitGroup方法已改成包了。看下面例子。哦,没改,我看代码不仔细。
var waitGroup sync.WaitGroup
他这样声明了一下。

func main() {
    wg := sync.WaitGroup{}
    wg.Add(100)
    for i := 0; i < 100; i++ {
        // 输出一个数字100次 , 为使用go, 搞了匿名函数
        go func(i int) {
            fmt.Println(i)
            wg.Done()
        }(i)
    }

    for i := 0; i<100; i++ {
        fmt.Printf("我在前面" + strconv.Itoa(i) + "\n")
    }
    wg.Wait()
    for i := 0; i<100; i++ {
        fmt.Printf("我在后面" + strconv.Itoa(i) + "\n")
    }

}

wg.Wait() 前面的代码,会轮回执行, 执行完后,才会一次性执行wg.Wait后面的代码。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:蛐蛐儿阳

查看原文:go语言实战阅读笔记

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

722 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传