We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
array之间的赋值是值的赋值。即当把一个数组作为参数传入一个函数时,传入的是值的拷贝,而不是指针。如果要使用指针,需要使用slice类型。
array
slice
Go语言中slice,map,channel这三种类型的实现机制类似指针,所以可以直接传递地址,而不用先取地址后传递。(若函数需要改变slice的长度,仍需要取地址传递指针)
map
channel
new(T)分配零值填充的T类型的内存空间,并返回其地址(*T类型的值)。new返回指针
new(T)
T
*T
new
make(T, args)只能创建slice,map,channel,并且返回一个具有初始值的T类型,而不是*T。导致这三个类型有所不同的原因是指向数据结构的引用在使用前必须被初始化。例如,一个slice,是一个包含指向数据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为nil。对于slice、map和channel来说,make初始化了内部的数据结构,填充适当的值。make返回初始化后的非零值
make(T, args)
nil
make
当函数中有多个defer语句,这些defer语句会按照逆序执行。
defer
函数作为值、类型
package main import "fmt" type testInt func (int) bool //声明了一个函数类型 func isOdd (i int) bool { if i % 2 == 0 { return false } return true } func isEven (i int) bool { if i % 2 == 0 { return true } return false } func filter (list []int, f testInt) []int { var result []int for _, v := range list { if f(v) { append(result,v) } } return result } func main () { list := []int{1,2,3,4,5,6,7,8} odd := filter(list, isOdd) even := filter(list, isEven) fmt.Println("Odd elements: ", odd) fmt.Println("Even elements: ", even) }
interface
// 定义a为空接口 var a interface{} var i int = 5 s := "hello" // a可以存储任意类型的数值 a = i a = s
channel默认为非缓存类型。Go也允许指定channel的缓存大小,就是channel可以存储多少元素。ch:= make(chan bool, 4),创建了可以存储4个元素的bool 型channel。在这个channel 中,前4个元素可以无阻塞的写入。当写入第5个元素时,代码将会阻塞,直到其他goroutine从channel 中读取一些元素,腾出空间。
ch:= make(chan bool, 4)
bool
可以使用range像操作slice和map类型一样操作缓存类型channel
range
The text was updated successfully, but these errors were encountered:
No branches or pull requests
array
之间的赋值是值的赋值。即当把一个数组作为参数传入一个函数时,传入的是值的拷贝,而不是指针。如果要使用指针,需要使用slice
类型。Go语言中
slice
,map
,channel
这三种类型的实现机制类似指针,所以可以直接传递地址,而不用先取地址后传递。(若函数需要改变slice
的长度,仍需要取地址传递指针)new(T)
分配零值填充的T
类型的内存空间,并返回其地址(*T
类型的值)。new
返回指针make(T, args)
只能创建slice
,map
,channel
,并且返回一个具有初始值的T
类型,而不是*T
。导致这三个类型有所不同的原因是指向数据结构的引用在使用前必须被初始化。例如,一个slice
,是一个包含指向数据(内部array)的指针、长度和容量的三项描述符;在这些项目被初始化之前,slice为nil
。对于slice
、map
和channel
来说,make
初始化了内部的数据结构,填充适当的值。make
返回初始化后的非零值当函数中有多个
defer
语句,这些defer
语句会按照逆序执行。函数作为值、类型
interface
类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。任意的类型都实现了空interface
。空interface
可以存储任意类型的值channel
默认为非缓存类型。Go也允许指定channel的缓存大小,就是channel可以存储多少元素。ch:= make(chan bool, 4)
,创建了可以存储4个元素的bool
型channel。在这个channel 中,前4个元素可以无阻塞的写入。当写入第5个元素时,代码将会阻塞,直到其他goroutine从channel 中读取一些元素,腾出空间。可以使用
range
像操作slice
和map
类型一样操作缓存类型channelThe text was updated successfully, but these errors were encountered: