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

这将编译:


package main


import (

    "fmt"

)


type User struct {

    ID int64

}


func main() {

    v := (*User)(nil)

    fmt.Println(v)

}

这里,是什么?我在go-pg遇到了这种符号,并且不知道找到答案,因为在谷歌上搜索非常困难。(*User)(nil)


胡子哥哥
浏览 77回答 1
1回答

开满天机

如果 是一种类型,则是另一种类型,一种指针类型,一种指向 的指针。User*UserUser(*User)(nil)是一种类型转换:它将非类型化的预声明标识符转换为 。您必须放在括号中,否则表达式将尝试转换为(如果是结构,则为编译时错误),然后取消引用它。nil(*User)*UsernilUserUser所以将是一个类型的变量,保存指针值。v*Usernil表达式是一个短变量声明,它等效于(速记)以下变量声明:v := (*User)(nil)var v *User = nil这当然与var v *User因为如果缺少初始化表达式,则变量将初始化为其零值,该值适用于所有指针类型。nil
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go