这个Go语法表达式是什么意思? (一对圆括号)

问题描述 投票:0回答:2

阅读此https://github.com/go-pg/pg/wiki/Writing-Queries#select,我多次看到此表达式:

(*Book)(nil)

示例:

count, err := db.Model((*Book)(nil)).Count()

这是什么意思?

go syntax expression rules
2个回答
1
投票

这是类型转换。如果db.Model函数采用{}interface{},则它正在向该函数发送类型为*Book的nil接口。

要将值v转换为类型Book,请输入:

Book(v)

但是,由于Book(nil)是指针而nil不是指针,因此您不能写Book。如果您有类型

type BookPtr *Book

那么您可以写BookPtr(nil)。扩展一下,您想写*Book(nil),但这意味着*(Book(nil))无效,因此:

(*Book)(nil)

0
投票

'nil'是去去其他语言(例如C#/ Java等)的NULL / null。* Variable只是获取Model的Book对象的指针值。

因此,在这种情况下,我相信这里发生的是(* Book)(nil)将Model的Book对象的指针值设置为nil(/ null)。

希望这会有所帮助。 😊

良好资源:https://go101.org/article/nil.html

© www.soinside.com 2019 - 2024. All rights reserved.