一对圆括号语法表达式在 Go 中是什么意思?

What does a pair of round brackets syntax expression mean in Go?

正在读这个https://github.com/go-pg/pg/wiki/Writing-Queries#select我多次看到这个表达:

(*Book)(nil)

示例:

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

什么意思?

'nil' 之于 Go 就像 NULL/null 之于其他语言,如 C#/Java 等。 *Variable 只是获取模型的 Book 对象的指针值。

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

希望这对您有所帮助。

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

那是类型转换。假设 db.Model 函数接受 interface{},它向函数发送类型为 *Book 的 nil 接口。

要将值 v 转换为类型 Book,您需要编写:

Book(v)

但是,你不能写Book(nil),因为nil是一个指针而Book不是。如果你有类型

type BookPtr *Book

那么你可以写 BookPtr(nil)。扩展它,你想写 *Book(nil),但这意味着 *(Book(nil)) 是无效的,因此:

(*Book)(nil)