golang 常见疑惑总结

前端之家收集整理的这篇文章主要介绍了golang 常见疑惑总结前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

  make(T) 只能用于slice、map和channel,返回非零值的T。

  make 返回的是类型本身,new 返回的是指向类型的指针

相关讲解

https://stackoverflow.com/questions/9320862/why-would-i-make-or-new

https://golang.org/doc/effective_go.html#allocation_new

https://golang.org/ref/spec#The_zero_value

@L_403_17@

  除非你的程序需要等待channel关闭后做一些操作,不用主动去关闭channel。当没有地方在使用这个channel的时候go的垃圾回收系统会自动回收。

  下面的小例子就是在等待channel c1和c2关闭后,再做一些事情。  

  相关讲解:https://stackoverflow.com/questions/8593645/is-it-ok-to-leave-a-channel-open

https://groups.google.com/forum/#!msg/golang-nuts/pZwdYRGxCIk/qpbHxRRPJdUJ

Unbuffered channel和buffered channel 区别

buffered channel

buffered channel 可以持续的发送数据到channel,直到channel满为至。不用等待是否有接收channel。

@L_502_28@

unbuffered channel

下面这两种声明是一样的

  unbuffered channel 的接收channel会一直阻塞,直到有值传给channel,也可以说发送channel会一直阻塞,至到有接收channel

unbuffered channel go func() { c1 <- false time.Sleep(time.Second * 2) c2 <- true }() fmt.Println(<-c1) fmt.Println(<-c2)

相关讲解:

https://stackoverflow.com/questions/23233381/whats-the-difference-between-c-makechan-int-and-c-makechan-int-1

https://golang.org/doc/effective_go.html

定义类型和组合类型的区别

  定义类型,也可以说是别名和组合类型的区别

  有一个Test的结构,NewTest是以Test为类型的一个定义,New2Test和New3Test都是组合类型

1.定义类型NewTest 相当于一个新的类型,他不能直接调用Test的方法,但是可以访问Test的字段。如果想调用原类型的方法需要做转换

2.New2Test和New3Test都是组合类型,他俩都可以直接调用Test的方法和访问Test的字段,他俩的不同之处就是一个是值组合一个是指针组合

  3.在实例化New3Test的时候需要手动实例化*Test指针

  相关的解答:

https://stackoverflow.com/questions/28800672/how-to-add-new-methods-to-an-existing-type-in-go/28800807#28800807

https://golang.org/ref/spec#Type_declarations

猜你在找的Go相关文章