Что означает это синтаксическое выражение Go? (пара круглых скобок) - PullRequest
0 голосов
/ 28 февраля 2020

Чтение этого https://github.com/go-pg/pg/wiki/Writing-Queries#select Я много раз вижу это выражение:

(*Book)(nil)

Пример:

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

Что это значит?

Ответы [ 2 ]

5 голосов
/ 28 февраля 2020

Это преобразование типов. Предполагая, что функция db.Model принимает interface{}, она отправляет нулевой интерфейс типа *Book в функцию.

Чтобы преобразовать значение v в тип Book, вы должны написать:

Book(v)

Однако вы не можете написать Book(nil), поскольку nil является указателем, а Book нет. Если бы у вас был тип

type BookPtr *Book

Тогда вы могли бы написать BookPtr(nil). Расширяя это, вы хотите написать *Book(nil), но это означает *(Book(nil)), что недопустимо, следовательно:

(*Book)(nil)
1 голос
/ 28 февраля 2020

'nil' означает Go, что NULL / null для других языков, таких как C # / Java, et c. Переменная * просто получает значение указателя для объекта Book модели.

Так что в этом случае я считаю, что здесь происходит то, что (* Book) (nil) устанавливает значение указателя объекта Book. модели до нуля (/ ноль).

Надеюсь, это поможет каким-то образом. ?

Хороший ресурс: https://go101.org/article/nil.html

...