gpt4 book ai didi

go - GO 中的包/函数中毒

转载 作者:IT王子 更新时间:2023-10-29 02:22:02 25 4
gpt4 key购买 nike

TLDR:在 golang 中有没有一种方法(即使它有点不标准)来“毒化”一个函数或完全导入某个包。

较长的版本:我正在编写一个 thrift 服务,所有面向公众的函数都返回结果,或者在 thrift 文件中声明的某种类型的错误。代码生成器为接口(interface)生成如下代码:

publicFacingFunc(...) (returnType, error)

这会很棒,直到与我一起工作的人决定检查另一个条件,并且当不满足该条件时执行如下操作:

if conditionIsNotMet {
return nil, errors.New(...)
}

代码编译通过,但出现错误时,收到的消息是未记录的随机字符串。所以在这些文件中,我想防止使用“errors”和“fmt”包。

是的,我试过了,文件顶部仍然有一个明显的警告,但似乎没有人阅读。

顺便说一句,公共(public)错误都有一个各自的“构造函数”,它在这些文件之外,在我的例子中,只有那些应该被使用。

最佳答案

如果你只关心文件中的包使用,你可以用一个愚蠢的名字导入它,比如'NEVER'......人们可以使用它,但他们会明白我的想法。

 import (
NEVER "fmt"
)

或者,如果你不想那么傻,你可以使用 _ 下划线,https://golang.org/doc/effective_go.html#blank_import

import (
_ "fmt"
)

这将加载导入,但只是它的副作用(即,不用于显式使用。


要停止所有不是特定类型的错误的输入,您可以使用 reflect 以通过类型断言停止不需要的类型,https://golang.org/ref/spec#Type_assertions

v, ok = x.(T)

因此,如果一个err 出现在面向公众的函数中,您不想让它通过,请检查它是哪种错误,

 specialError, ok := err.(mypackage.ErrorType)
if !ok {
// don't send this error on
}

关于go - GO 中的包/函数中毒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43723564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com