【发布时间】:2021-11-26 21:50:33
【问题描述】:
这样编译:
package main
import (
"fmt"
)
type User struct {
ID int64
}
func main() {
v := (*User)(nil)
fmt.Println(v)
}
这里,(*User)(nil) 是什么?
我在go-pg 遇到了这个符号,但不知道如何找到答案,因为在 google 上很难搜索。
【问题讨论】:
-
相当于
var v *User,不知道他们为什么使用这个特定的符号,因为nil总是指针的零值。 -
这是一种用于传达类型的常用技术 - 通常用于反射目的 - 而不会产生创建该类型变量的开销。
-
这不是和
var v *User具有完全相同的性能影响吗? -
啊,避免 go-pg 的另一个原因 :0) 改用 GORM。
-
@DanielFarrell 它节省了一行代码:)
标签: go pointers type-conversion