golang:我可以将helper函数应用于其中一个返回的参数

时间:2016-05-18 22:10:40

标签: go

我说我有

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

其中pool.GetConnection返回interface{},我想将其投放到DummyConnection

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

connectionInterface, err := pool.GetConnection()
connection := connectionInterface.(*DummyConnection)

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

2 个答案:

答案 0 :(得分:3)

您无法将这两个语句组合在一起,因为该函数返回一对值,并且无法说明您想要对其进行类型断言。使用赋值它是有效的,因为标识符的顺序和返回值一样,但是你如何期望编译器推断出你想要在哪个值上执行类型断言呢?

我不建议在Go中尝试过多地减少代码。这与语言的设计方式并不完全一致,我认为这是故意的。理念是,这更容易阅读,因为没有太多的抽象,也因为没有给出这么多选项来实现相同的结果。无论如何,你不会真的用这种类型的断言节省太多,而且这样的任何函数调用都需要一些额外的代码行来进行错误处理。这几乎是Go的常态。

答案 1 :(得分:-1)

某种解决方案。不减少代码,但通过将变量移动到匿名内部函数来减少函数范围内的变量。

package main

import "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)
}