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

时间:2015-06-12 13:52:13

标签: go

我想知道是否有任何技巧可以避免xv标识符/分配。基本上类似于x, err := T1(strconv.Atoi("1"))

package main

import "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 个答案:

答案 0 :(得分:1)

例如,只有perl -pi.bak -e 's/FT_BAR, (\d+),/"FT_BAR, ".($1+1).","/e;' test_re.txt 转义到堆,

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 :(得分:0)

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

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

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