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

}

是否有意义?


Cats萌萌
浏览 198回答 2
2回答

三国纷争

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.我可能只是在这里很愚蠢,因为我是 Golang 的新手,我从 C 中学到了这个技巧,结果它也适用于 Golang。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go