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

分配后是否可以进行转换?

分配后是否可以进行转换?

Go
拉丁的传说 2021-10-18 09:55:46
我想知道是否有任何技巧可以避免 xv 标识符/分配。基本上像x, err := T1(strconv.Atoi("1"))package mainimport "fmt"import "strconv"   type T1 int    func main() {        xv, err := strconv.Atoi("1")        if err != nil {            panic(err)        }        x := T1(xv)        fmt.Println(x)    }
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

例如,只x转义到堆,


package main


import (

    "fmt"

    "strconv"

)


type T1 int


func atoi(a string) int {

    i, err := strconv.Atoi(a)

    if err != nil {

        panic(err)

    }

    return i

}


func main() {

    x := T1(atoi("1"))

    fmt.Println(x)

}

输出:


1


查看完整回答
反对 回复 2021-10-18
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

不,我相信没有这样的伎俩。


当我想避免在作用域中声明不必要的变量,以及一次性操作时,我有时会使用这种匿名函数调用:


package main


import "fmt"

import "strconv"


type T1 int


func main() {

    x, err := func() (T1, error) {

        x, err := strconv.Atoi("1")

        return T1(x), err

    }()

    fmt.Println(err, x)

}

另一方面,如果您需要在许多情况下执行类似的转换,并且不一定总是由于相同的调用(如Atoi),您可以创建一个简单的函数,它会进行转换并传递错误:


package main


import "fmt"

import "strconv"


type T1 int


func resToT1(n int, err error) (T1, error) {

    return T1(n), err

}


func main() {

    x, err := resToT1(strconv.Atoi("1"))

    fmt.Println(err, x)

}


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信