Отключить ветеринарные проверки для составных литералов, использующих неключевые поля

Я проверил свой инструмент CI и начал получать ошибку:

composite literal uses unkeyed fields

Потому что я создаю экземпляр

type A struct {
   *B
}

нравится:

A{b} // b is of type *B

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


person Matt Joiner    schedule 29.03.2016    source источник
comment
Я думаю, что это ошибка ветеринара. В этом случае нет двусмысленности (только один участник), и ветеринар не должен сообщать об этом как о проблеме. То же самое с несколькими членами несовместимых типов.   -  person dolmen    schedule 24.01.2017


Ответы (5)


$ go doc cmd/vet

По умолчанию все проверки выполняются. Если для каких-либо флагов явно установлено значение true, запускаются только эти тесты. И наоборот, если какой-либо флаг явно установлен в значение false, отключаются только эти тесты. Таким образом, -printf = true запускает проверку printf, -printf = false запускает все проверки, кроме проверки printf.

Unkeyed composite literals

Flag: -composites

Composite struct literals that do not use the field-keyed syntax.
person peterSO    schedule 29.03.2016

Вы можете отключить его или вместо этого исправить код:

a := A{B: b}

детская площадка

person OneOfOne    schedule 29.03.2016
comment
Это не исправление, потому что ошибки нет. Это обходной путь для ошибки в ветеринаре, которая слишком религиозна в этом вопросе. - person dolmen; 24.01.2017
comment
Насколько мне известно, использование неключевых полей не только хорошо, но и очень распространенная практика для встроенных типов. - person theherk; 19.06.2017
comment
Я не понимаю, что предупреждение пытается предотвратить. Кто-нибудь может объяснить? Зачем тебе там ключ? Моя структура имеет только один параметр. - person Ka Mok; 20.09.2017
comment
@KaMok в основном потому, что, скажем, через несколько недель / месяцев вы добавите поле в структуру, тогда все, что использовало неключевую инициализацию, сломается. - person OneOfOne; 21.09.2017
comment
ты звезда мой друг! - person Edwin O.; 27.02.2018
comment
Есть случаи, когда отсутствие ключа - хорошая идея. Если вы используете ключ и через несколько недель / месяцев добавляете поле в структуру, вы можете захотеть, чтобы ваш код инициализации сломался, чтобы увидеть, где вам нужно обновить код инициализации. - person Jay; 07.07.2019

Если вы используете языковой сервер.

Gopls on by default in the VS Code Go extension

gopls выполняет ветеринарную проверку по умолчанию .

"gopls": {
     "analyses": { "composites": false }
 },
person Зелёный    schedule 01.03.2021

Вы можете отключить его с помощью флага -composites=false: например,

go vet -composites=false .

NB: go tool vet устарело

person tantrix    schedule 06.08.2019
comment
Привет, это работает и на VSCode? Или мне нужно сделать что-то еще? - person cruise_lab; 20.07.2020
comment
@cruise_lab добавил сообщение, так как мне пришлось пройти несколько шагов для VS Code - person deepakssn; 01.12.2020

Если вы используете код VS, вам нужно вручную установить флаг в настройках

settings > Extensions > Go

Прокрутите вниз до раздела Vet Flags.

введите описание изображения здесь

Добавить элемент и добавить флаг

-composites=false .

Щелкните ОК.

Снова сохраните один из ваших файлов или перезапустите код VS, чтобы увидеть эффект.

person deepakssn    schedule 01.12.2020