package main func change(s *string) { *s = "changed" } func main() { s := "hoge" change(&s) fmt.Println(s) } 解説 Go ではポインタを扱えることができますが、 & や * をどうつけたらいいか、よくわからなくなってしまいがちです。 まずは一旦整理してみます。 構文 整理すると、2 種類の構文があるのではないかと思います。 演算子として利用される場合 & は値型変数からポインタ(メモリのアドレス)型変数を取得する演算子 * はポインタ型変数から値型変数を取得する演算子 var tmp string = "tmp" // ポインタ tmpPointer := &hoge // 値 tmpValue := *tmpPointer fmt.Println(tmpPointer) // 0x