Как избавиться от предупреждения Go vet% в Println

#go

# #Вперед

Вопрос:

Этот код

 package main

import (
    "fmt"
)

func main() {
    fmt.Println("%%dude")
}
 

Ссылка на игровую площадку: https://play.golang.org/p/Shq5pMHg4bj

выдает go vet предупреждение

 ./prog.go:8:2: Println call has possible formatting directive %d
 

Как я могу сказать go vet, что я действительно хочу написать два знака процента и не предупреждать меня?

Комментарии:

1. Замените второй (или оба) % на x25

Ответ №1:

Вы не можете подавить это, но даже если бы вы могли с помощью пользовательских правил и флагов, я бы не стал этого делать, потому что кто-то другой, создающий ваш код, все равно столкнется с этим.

Вместо этого вы можете использовать любую из этих альтернатив, которые выдают тот же результат без каких-либо предупреждений от vet :

 fmt.Println("%%" "dude")
fmt.Println("%x25dude")
fmt.Printf("%%%%duden")
s := "%%dude"
fmt.Println(s)
 

Попробуйте примеры на Go Playground.

Комментарии:

1. Спасибо. Такой комментарий // go vet: I really mean %% мог бы решить эту проблему во всех кодовых базах.

2. @topskip По этому поводу было обсуждение (см. Предложение: cmd / vet: добавить механизм для отключения ложных срабатываний # 17058 ), которое было отклонено.

3. Я пытаюсь напечатать «%sign», все это приводит к жалобам от fmt «go vet». Println(«%sign») fmt. Println(» x25sign») fmt. Println(«%» «знак») Мой единственный вариант разделить его на два вызова print? fmt. Print(«%») fmt. Println(«знак»)

4. @drhender Если вам нужен один вызов print без переменных, вы можете выполнить fmt.Printf("%%signn") или fmt.Printf("%ssignn", "%") или fmt.Printf("%sn", "%sign") .

Ответ №2:

На самом деле вы не можете (кроме того, что не пишете этот код). Go vet не имеет никакого механизма для комментариев «я действительно имел в виду это», чтобы подавить предупреждения. За последние пять лет было несколько дискуссий по этому поводу, но ни одна из них не привела к каким-либо действиям. Вам просто нужно принять то, что говорится в тексте справки: go vet «использует эвристику, которая не гарантирует, что все отчеты являются подлинными проблемами».

Комментарии:

1. Ну что ж, думаю, мне придется принять этот ответ… Большое вам за это спасибо.