Golang强制转换多个返回值以匹配命名的结果参数



假设我想定义一个具有命名结果参数的函数,其中一个是string。此函数在内部调用另一个函数,该函数返回此类字符串的字节表示。

有没有一种方法可以在不使用临时变量的情况下强制转换结果?

func main() {
    out, _ := bar("Example")
    fmt.Println(out)
}
func foo(s string) ([]byte, error) {
    return []byte(s), nil
}
func bar(in string) (out string, err error) {
    // is there a way to assign the result to out
    // casting the value to string in the same line
    // istead of using the tmp variable?
    tmp, err := foo(in)
    if err != nil {
        return "", err
    }
    return string(tmp), nil
}

这个想法是,如果可能的话,我可能会将代码缩短为

func bar(in string) (out string, err error) {
    // assuming there is a way to cast out to string
    out, err := foo(in)
    return
}

这有道理吗?

没有办法强制转换函数的多次返回。但这并不意味着你不能缩短你的代码。http://play.golang.org/p/bf4D71_rZF如果您不关心错误,那么只需在内联返回中强制转换变量

1行代码不会有太大的区别,但在整个函数中保留一个tmp变量是一个问题。显然,临时变量应该是临时的。为此,您可以在一个新的作用域中声明tmp

var s string;
{
    tmp, err := foo(in)
    s = string(tmp)
}
//tmp no longer exists here.
//Other code is not disturbed by a useless tmp variable.

我可能只是在这里很愚蠢,因为我是围棋新手,我从C那里学到了这个技巧,事实证明它也适用于围棋。

最新更新