aka*_*kai -2 pointers type-conversion go
这编译:
package main
import (
"fmt"
)
type User struct {
ID int64
}
func main() {
v := (*User)(nil)
fmt.Println(v)
}
Run Code Online (Sandbox Code Playgroud)
在这里,什么是(*User)(nil)?我在go-pg遇到了这个符号,并且没有线索找到答案,因为在谷歌上搜索非常困难。
如果User是一种类型,*User则 是另一种类型,一个指针类型,一个指向 的指针User。
(*User)(nil)是类型转换:它将无类型的nil预声明标识符转换为(*User). 您必须放入*User括号,否则表达式将尝试转换nil为User(如果是结构,则这是一个编译时错误User),然后取消引用它。
因此v将是一个 类型的变量*User,保存nil指针值。
该v := (*User)(nil)表达式是一个简短的变量声明,它相当于(简写)以下变量声明:
var v *User = nil
Run Code Online (Sandbox Code Playgroud)
这当然是一样的
var v *User
Run Code Online (Sandbox Code Playgroud)
因为如果缺少初始化表达式,变量将被初始化为零值,这适用nil于所有指针类型。