如果是多值返回函数,则在调用函数时不能引用具有特定结果值的字段或方法。
如果他们中的一个是
error,它的存在是有 原因 (这是函数 可能会 失败),你应该 不会 绕过它,因为如果你这样做,你后面的代码 可能
也惨遭失败(如导致运行时的恐慌)。
但是,在某些情况下,您 知道 代码在任何情况下都不会失败。在这些情况下,您可以提供一个 辅助 函数(或方法),该函数将放弃 辅助
函数(或方法,
error如果仍然发生,则会引起运行时恐慌)。
如果您从代码中提供了函数的输入值,并且知道它们可以工作,则可能是这种情况。和软件包
就是一个很好的例子:如果在编译时提供了有效的模板或regexp,则可以确保在运行时始终可以对它们进行分析而不会出错。因此,包提供了功能,包提供了功能:它们不返回
template
regexp
template
Must(t*Template, err error)*Template
regexp
MustCompile(strstring)*Regexp
error,因为它们的预期用途是保证输入有效的地方。
例子:
// "text" is a valid template, parsing it will not failvar t = template.Must(template.New("name").Parse("text"))// `^[a-z]+[[0-9]+]$` is a valid regexp, always compilesvar validID = regexp.MustCompile(`^[a-z]+[[0-9]+]$`)回到你的情况
如果
可以确定
Get()不会
error为某些输入值生成,则可以创建一个辅助
Must()函数,该函数将不返回,
error但如果仍然发生则引发运行时恐慌:
func Must(i Item, err error) Item { if err != nil { panic(err) } return i}但是,您不能在所有情况下都使用它,除非您确定它会成功。用法:
val := Must(Get(1)).Value
替代/简化
如果将
Get()调用合并到辅助函数中,您甚至可以进一步简化它,让我们称之为
MustGet:
func MustGet(value int) Item { i, err := Get(value) if err != nil { panic(err) } return i}用法:
val := MustGet(1).Value
查看一些有趣/相关的问题:
如何解析golang中的多个收益
使用正常功能在Golang中返回类似“
ok”的地图



