为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
HUH函数 2022-01-10 17:13:10
假设我有connection := pool.GetConnection().(*DummyConnection)在哪里pool.GetConnection返回interface{},我想将它转换为DummyConnection.我想更改 GetConnection 接口以返回错误。代码开始看起来像这样:connectionInterface, err := pool.GetConnection()connection := connectionInterface.(*DummyConnection)我想知道,我可以避免使用辅助变量并将它们放在一行上吗?
查看完整描述

2 回答

?
MM们

TA贡献1886条经验 获得超2个赞

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


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)

}


查看完整回答
反对 回复 2022-01-10
?
开心每一天1111

TA贡献1836条经验 获得超13个赞

您不能将这两个语句组合起来,因为该函数返回一对值,并且无法说明您希望对其中的哪一个进行类型断言。通过赋值,它可以工作,因为标识符是按返回值排序的,但是您希望编译器如何推断您希望在哪个值上执行类型断言?

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


查看完整回答
反对 回复 2022-01-10
  • 2 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号