猿问

golang:我可以将辅助函数应用于返回的参数之一吗

假设我有


connection := pool.GetConnection().(*DummyConnection)

在哪里pool.GetConnection返回interface{},我想将它转换为DummyConnection.


我想更改 GetConnection 接口以返回错误。代码开始看起来像这样:


connectionInterface, err := pool.GetConnection()

connection := connectionInterface.(*DummyConnection)

我想知道,我可以避免使用辅助变量并将它们放在一行上吗?


HUH函数
浏览 151回答 2
2回答

MM们

某种解决方案。不是减少代码,而是通过将其移动到匿名内部函数来减少函数范围内的变量。package mainimport "fmt"type t struct{}func foo()(interface{},error){    return &t{},nil}func main() {    var myT *t    myT, err := func() (*t,error){        i,e:=foo()        return i.(*t),e    }()    fmt.Println(myT,err)}

开心每一天1111

您不能将这两个语句组合起来,因为该函数返回一对值,并且无法说明您希望对其中的哪一个进行类型断言。通过赋值,它可以工作,因为标识符是按返回值排序的,但是您希望编译器如何推断您希望在哪个值上执行类型断言?我不建议尝试在 Go 中过多地减少代码。这与语言的设计方式并不完全一致,我相信这是故意的。哲学是这更容易阅读,因为没有太多抽象,也因为你没有太多选择来实现相同的结果。无论如何,使用该类型断言并不会真正节省太多,并且像这样的任何函数调用都需要几行额外的代码来处理错误。这几乎是 Go 中的常态。
随时随地看视频慕课网APP

相关分类

Go
我要回答