:= 只有在左侧有未定义变量时才能使用(有定义的变量也可以)
:= 只进行语义上的检查,循环内也可以使用,第一次之后的效果和=相同
:= 和 = 都要求左右的值和变量一一对应,不会截断
特殊情况,map、chan、类型推定可以返回一个值,也可以是两个值
当map中该键不存在时,总是返回零值和false,否则后者返回true
:= 只进行语义上的检查,循环内也可以使用,第一次之后的效果和=相同
:= 和 = 都要求左右的值和变量一一对应,不会截断
特殊情况,map、chan、类型推定可以返回一个值,也可以是两个值
当map中该键不存在时,总是返回零值和false,否则后者返回true
当chan关闭以后,总是返回零值和false,否则后者返回true
package main type INT int func (r *INT) show() { println(int(*r)) } func A() (INT, INT) { return 1, 2 } func B() (INT, bool) { return 3, true } func C() (INT, error) { return 4, nil } func D(i <-chan int,o chan<- int) { x := <- i println(x) y,z := <- i println(y,z) o <- 1 } func main() { var t INT t.show() a,b:=A() // a := A() /*报错*/ // t = A() /*报错*/ println(a,b) a,c:=B() // c := B() /*报错*/ // t = B() /*报错*/ println(a,c) a,d:=C() // d := C() /*报错*/ // t = C() /*报错*/ println(a,d) // A().show() /*报错*/ // B().show() /*报错*/ // C().show() /*报错*/ m:=map[int]int{1:1} i:=m[1] println(i) j,k:=m[7] println(j,k) u:=make(chan int) v:=make(chan int) go D(u,v) u <- 1 u <- 2 <- v close(u) close(v) y,z := <- u println(y,z) } // 0 // 1 2 // 3 true // 4 (0x0,0x0) // 1 // 0 false // 1 // 2 true // 0 false
有疑问加站长微信联系(非本文作者)