📑
GOを1から学ぶ #5
初めに
こんにちは!技術スタック的には、フロントよりですが、GOを学ぶ機会があったので、その記録を取りたいと思いこの記事を書いてます。(初心者のため優しい目で見てください)
今回は、以下について簡単にまとめます。
- ポインタについて
- new関数について
- 構造体について
ポインタについて
ポインタとは、「変数が置かれている場所を覚えておくもの」 である。
ポインタにおけるイメージ
ポインタにおける簡単なイメージを以下にまとめる。
- シェフ(プログラム)が料理を作る。
- 材料(変数)を使って調理する。
- ポインタは、「冷蔵庫の中の〇〇は、どこにあるか」を書いたメモ。
- シェフは、そのメモ(ポインタ)を見て、材料のある場所を探しに行ける。
つまり、ポインタがあれば、元の材料を直接変更できる!
基本的な構文
- &変数名:その変数のアドレスを取得
- *ポインタ変数:そのアドレスが指している値を取得または変更
具体的な例
package main
import "fmt"
func main() {
var a int = 10
var p *int = &a // aのアドレスをpに格納(pはint型のポインタ)
fmt.Println("aの値:", a)
fmt.Println("aのアドレス:", &a)
fmt.Println("pの値(aのアドレス):", p)
fmt.Println("pが指している値(aの値):", *p)
*p = 20 // ポインタを使ってaの値を変更
fmt.Println("aの新しい値:", a)
}
実行結果
aの値: 10
aのアドレス: 0x4000016050
pの値(aのアドレス): 0x4000016050
pが指している値(aの値): 10
aの新しい値: 20
new関数について
Go言語のnew関数は、指定された型のゼロ値を持つポインタを返す関数。
簡単に言えば「その型の空っぽの箱を用意して、それを指す矢印(ポインタ)を返す」というイメージ。
基本的な構文
ptr := new(Type)
- Type:作りたい型(例:int, string, structなど)
- ptr:その型のポインタ(*Type)
具体的な例
package main
import "fmt"
func main() {
numPtr := new(int) // int型のポインタを作る
fmt.Println(*numPtr) // 0(int型のゼロ値)
*numPtr = 42
fmt.Println(*numPtr) // 42
}
実行結果
0
42
構造体について
構造体(struct)は、複数のデータをひとつにまとめたものである。
基本的な構文
type 構造体名 struct {
フィールド名1 型1
フィールド名2 型2
}
具体的な例
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
// 構造体の初期化(1):フィールド名を指定
p1 := Person{Name: "Alice", Age: 30}
fmt.Println(p1.Name) // "Alice"
fmt.Println(p1.Age) // 30
// 構造体の初期化(2):フィールド名を省略
p2 := Person{"Bob", 25}
fmt.Println(p2)
// 値の変更
p1.Age = 31
fmt.Println(p1.Age) // 31
}
実行結果
Alice
30
{Bob 25}
31
Discussion