名前付けされた戻り値
package main
func MascotName()(name string){//戻り値はnameで
name = "gopher"
return
}
func main(){
fmt.Println(MascotName())
}
goでは関数宣言の時点で戻り値に名前を付けることが出来ます。
その場合、戻り値は指定する必要がなくなりますが、指定することも可能です。
下記のようにすることでgopher君は本来の名前を上書きされsuper gopher君となります。
package main
func MascotName()(name string){
name = "gopher"
return "super gopher"//こちらの方が優先度は上
}
func main(){
fmt.Println(MascotName())
}
しかし更に上書きするトリックがあります。
package main
func MascotName()(name string){
defer func(){
name = "玉しゃぶりアジアンネズミ"//こちらの優先度は最強クラス
}()
name = "gopher"
return "super gopher"
}
func main(){
fmt.Println(MascotName())
}
deferによって、名前付けされた戻り値を上書きすることで、
super gopher君は玉しゃぶりアジアンネズミ君になります。