首页 >后端开发 >Golang >如何抑制 Println 中有关多个百分号的 Go Vet 警告?

如何抑制 Println 中有关多个百分号的 Go Vet 警告?

Susan Sarandon
Susan Sarandon原创
2024-12-14 21:06:23206浏览

How to Suppress Go Vet Warnings About Multiple Percent Signs in Println?

如何在 Println 中抑制多个百分号的 Go Vet 警告

Go vet 在函数调用中遇到潜在的格式化指令时可以生成警告就像 Println 一样。当您故意想要打印多个百分号时,此警告可能会特别令人沮丧。

考虑以下代码:

package main

import (
    "fmt"
)

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

此代码触发警告:

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

要解决此问题,您有两个选择:

替代打印语句:

您可以使用不需要百分号的替代打印语句来实现相同的输出。例如:

fmt.Println("%" + "dude")
fmt.Println("%\x25dude")
fmt.Printf("%%%%dude\n")
s := "%%dude"
fmt.Println(s)

自定义 Go Vet 规则:

虽然不推荐,但您可以通过定义自己的自定义 Go vet 规则来抑制此特定警告。但是,不鼓励使用这种方法,因为它可能会导致构建您的代码的其他用户出现不一致或意外的行为。

要创建自定义 Go vet 规则,您可以定义一个新文件,通常名为 custom_rules.go,并编辑它以包含以下内容:

package govetrules

import (
    "github.com/golangci/go-criticisms"
)

func init() {
    criticisms.Register("suppress-fmt-percent-warning", criticisms.Rule{
        Description: "Suppresses the warning for Println calls with multiple percent signs",
        Validator: func(ctx *criticisms.Context, node ast.Node, s string) {
            // Disable the warning for Println calls with at least two consecutive percent signs
            if call, ok := node.(*ast.CallExpr); ok && call.Fun.Name == "Println" {
                args := call.Args
                if len(args) >= 2 && args[0].String() == "\"\"" && args[1].String() == "\"\"" {
                    ctx.SetResult(criticisms.Invalid)
                }
            }
        },
    })
}

将此文件放入项目目录中并运行 gogenerate 以激活规则。但是,如前所述,使用自定义规则应被视为最后的手段,不建议一般使用。

以上是如何抑制 Println 中有关多个百分号的 Go Vet 警告?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn