假設我想定義一個帶有命名結果參數的函數,其中一個是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}是否有意義?
2 回答

三國紛爭
TA貢獻1804條經驗 獲得超7個贊
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。
- 2 回答
- 0 關注
- 232 瀏覽
添加回答
舉報
0/150
提交
取消