为了账号安全,请及时绑定邮箱和手机立即绑定

当“用户”是结构时,什么是“(*用户)(无)”?

当“用户”是结构时,什么是“(*用户)(无)”?

Go
胡子哥哥 2022-10-04 19:16:12
这将编译:package mainimport (    "fmt")type User struct {    ID int64}func main() {    v := (*User)(nil)    fmt.Println(v)}这里,是什么?我在go-pg遇到了这种符号,并且不知道找到答案,因为在谷歌上搜索非常困难。(*User)(nil)
查看完整描述

1 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

如果 是一种类型,则是另一种类型,一种指针类型,一种指向 的指针。User*UserUser

(*User)(nil)是一种类型转换:它将非类型化的预声明标识符转换为 。您必须放在括号中,否则表达式将尝试转换为(如果是结构,则为编译时错误),然后取消引用它。nil(*User)*UsernilUserUser

所以将是一个类型的变量,保存指针值。v*Usernil

表达式是一个短变量声明,它等效于(速记)以下变量声明v := (*User)(nil)

var v *User = nil

这当然与

var v *User

因为如果缺少初始化表达式,则变量将初始化为其零值,该值适用于所有指针类型。nil


查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信