1.ポインタの利用
値渡し
package main
import "fmt"
func main() {
var value1 int = 10
var value2 int = value1
// アドレスを出力してみる
fmt.Println("---アドレスの出力---")
fmt.Println("value1:", &value1)
fmt.Println("value2:", &value2)
// まずは現時点の値を出力
fmt.Println("---初期状態の値---")
fmt.Println("value1:", value1)
fmt.Println("value2:", value2)
// valueの内容を変更
value1 = 20
fmt.Println("---valueの変更後---")
fmt.Println("value1:", value1)
fmt.Println("value2:", value2)
// pointerの内容を変更
value2 = 30
fmt.Println("---pointerの変更後---")
fmt.Println("value1:", value1)
fmt.Println("value2:", value2)
}
ポインタを使用
package main
import "fmt"
func main() {
var value1 int = 10
var value2 *int = &value1
// アドレスを出力してみる
fmt.Println("---アドレスの出力---")
fmt.Println("value1:", &value1)
fmt.Println("value2:", value2)
// まずは現時点の値を出力
fmt.Println("---初期状態の値---")
fmt.Println("value1:", value1)
fmt.Println("value2:", *value2)
// valueの内容を変更
value1 = 20
fmt.Println("---valueの変更後---")
fmt.Println("value1:", value1)
fmt.Println("value2:", *value2)
// pointerの内容を変更
*value2 = 30
fmt.Println("---pointerの変更後---")
fmt.Println("value1:", value1)
fmt.Println("value2:", *value2)
}
2.関数の引数でのポインタ利用
通常の関数
package main
import "fmt"
func test_func(value int) {
value = 100
}
func main() {
// 整数変数の定義
var value int = 10
fmt.Println("---初期の値を表示---")
fmt.Println("value:", value)
test_func(value)
fmt.Println("---関数実行後の値を出力---")
fmt.Println("value:", value)
}
ポインタを利用
package main
import "fmt"
func test_func(value *int) {
*value = 100
}
func main() {
// 整数変数の定義
var value int = 10
fmt.Println("---初期の値を表示---")
fmt.Println("value:", value)
test_func(&value)
fmt.Println("---関数実行後の値を出力---")
fmt.Println("value:", value)
}
3.構造体のメソッドでのポインタ利用
ポインタを使わない
package main
import "fmt"
type Person struct {
Name string
Age int
}
func (person Person) setValue(name string, age int) {
person.Name = name
person.Age = age
}
func main() {
person := Person{
Name: "テスト太郎",
Age: 30,
}
fmt.Println("---初期の値を表示---")
fmt.Println(person)
person.setValue("テスト二郎", 25)
fmt.Println("---メソッド実行後の値を表示---")
fmt.Println(person)
}
ポインタを使用する
package main
import "fmt"
type Person struct {
Name string
Age int
}
func (person *Person) setValue(name string, age int) {
person.Name = name
person.Age = age
}
func main() {
person := Person{
Name: "テスト太郎",
Age: 30,
}
person.setValue("テスト二郎", 25)
fmt.Println(person)
fmt.Println("---初期の値を表示---")
fmt.Println(person)
person.setValue("テスト二郎", 25)
fmt.Println("---メソッド実行後の値を表示---")
fmt.Println(person)
}
練習問題