GOで複数戻り値を宣言済み変数に代入
タイトル通りなのですが
Golangで複数戻り値を持つ関数から得た値を
宣言済みの変数に代入する時に困ったのでメモ
やりたいこと
例えば、文字列を渡すと
渡した文字列と、その文字列に "juice" を付けて返す func があり
返り値は main package のグローバル変数に代入するとします
package main import ( "fmt" ) // こいつに返り値を代入したい var juice = "karappo" func main() { { fruit, juice := makeJuice("orange") fmt.Println(fruit) fmt.Println(juice, &juice) } fmt.Println(juice, &juice) } func makeJuice(fruit string) (string, string) { return fruit, fruit+" juice" }
ところが実行結果
orange orange juice 0xc42000e1d0 karappo 0x1139150
となってしまい、グローバルな変数の juice に代入されるのではなく
ローカルな別の変数が新たに宣言されてしまいます
解決法
返り値は一旦ローカルな変数で受け取り
その後グローバルな変数に代入します
package main import ( "fmt" ) var juice = "karappo" func main() { { fruit, tmpJuice := makeJuice("orange") juice = tmpJuice fmt.Println(fruit) fmt.Println(juice, &juice) } fmt.Println(juice, &juice) } func makeJuice(fruit string) (string, string) { return fruit, fruit+" juice" }
実行結果
orange orange juice 0x1139150 orange juice 0x1139150
無事グローバル変数に返り値を代入することができました。