当' User '是struct,什么是' (*User)(nil) ' ?



下面编译:

package main
import (
"fmt"
)
type User struct {
ID int64
}
func main() {
v := (*User)(nil)
fmt.Println(v)
}

这里,(*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

是一样的
var v *User

因为如果缺少初始化表达式,变量将被初始化为零值,对于所有指针类型都是nil

最新更新