«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Анонимная структура в Go: когда излишне указывать тип в `map[string]struct{}`?

Анонимная структура в Go: когда излишне указывать тип в `map[string]struct{}`?

Опубликовано 8 ноября 2024 г.
Просматривать:910

 Anonymous Struct in Go:  When is it Redundant to Specify the Type in `map[string]struct{}`?

Анонимная структура: раскрытие различий между структурой{}{} и {}

В Go объявление преобразований строк в анонимные структуры это можно сделать двумя способами:

var Foo = map[string]struct{}{
    "foo": struct{}{},
}
var Foo = map[string]struct{}{
    "foo": {},
}

Хотя оба выражения действительны, второе вызывает предупреждение в Гогланде относительно «объявления избыточного типа». Чтобы внести ясность, давайте рассмотрим основные различия между этими двумя формами.

Во-первых, обратите внимание на следующее:

struct{}{}

Это составной литерал состоящий из типа (struct{}) и его значения ({}). Напротив, это:

{}

Это составной литерал, в котором отсутствует тип и сохраняется только значение.

Обычно составные литералы требуют включения спецификация типа, помогающая компилятору определить предполагаемый тип. Согласно спецификации языка:

CompositeLit = LiteralType LiteralValue .

Однако при определении составного литерала карты типы ключа и значения уже указаны типом карты. Следовательно, в тех случаях, когда вы планируете предоставлять значения этих указанных типов, указание типа можно опустить.

Это упущение санкционировано спецификацией Go, которая гласит:

"Within a composite literal of array, slice, or map type T, elements or map keys that are themselves composite literals may elide the respective literal type if it is identical to the element or key type of T."

В заключение, два выражения, представленные в начале, дают один и тот же конечный результат. Однако последний использует языковую функцию, которая позволяет опускать избыточную спецификацию типа в составных литералах карты.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3