Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go 赋值后是否可以进行转换?_Go - Fatal编程技术网

Go 赋值后是否可以进行转换?

Go 赋值后是否可以进行转换?,go,Go,我想知道是否有什么技巧可以避免xv标识符/分配。基本上类似于x,err:=T1(strconv.Atoi(“1”)) 例如,只有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 }

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


例如,只有
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

不,我相信没有这样的把戏

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

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

我不认为有。我想func调用的缺点是,您最终会得到值copy加上func调用。
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)
}