Go言語学習も3日目に突入しました。
前回まではコチラ
今日は Go Tour(日本語版) を参考にしながら、以下の3つを学んでみました 👇
- Struct(構造体)
- Slice(スライス)
- Map(マップ)
正直、最初のページでポインタの話が出てきたので「ちょっと難しそう。。」って思ってたんですが、実際に手を動かしてみると案外楽しくて 文系SEでも理解しやすい構文で、今日も30分、コツコツ前進できました!
Struct(構造体)ってなに?
まずは構造体(Struct)から。 C#でいう「クラス」的な役割を果たす、Goの独自データ型です。
package main import "fmt" type Person struct { Name string Age int } func main() { p := Person{Name: "たろう", Age: 30} fmt.Println(p) }
フィールドにもアクセスできます👇
fmt.Println(p.Name) // "たろう"
構造化しておくことで、意味のあるデータとして扱いやすくなりますね。
Slice(スライス):配列より柔軟!
次に学んだのはSlice。 Goには配列もありますが、スライスのほうが実用的で便利です。
func main() { fruits := []string{"りんご", "バナナ", "みかん"} fruits = append(fruits, "ぶどう") fmt.Println(fruits) // [りんご バナナ みかん ぶどう] }
Pythonのリストっぽい感覚で扱えるので、文系脳にもやさしい。。
スライスのいろいろな操作
// 部分取り出し subset := fruits[1:3] // バナナ, みかん // 要素の更新 fruits[0] = "メロン" // ループ処理 for i, f := range fruits { fmt.Println(i, f) }
make を使って初期化も可能
nums := make([]int, 3) // [0 0 0]
メモリを先に確保したいときに使うけど、僕は初心者なので、 append から!!! 昔?のmallocを思い出しますね。
nilスライスってなに?
ここでちょっと深掘り。 Goでは、スライスの初期状態が nil になることがあります👇
var s []int fmt.Println(s == nil) // true fmt.Println(len(s)) // 0
nilスライスとは?
→ まだ何も作られてない・初期化されていないスライスのこと。
空スライスとの違い
var a []int // nilスライス b := []int{} // 空スライス fmt.Println(a == nil) // true fmt.Println(b == nil) // false ←ここ注意!
nilスライスでもappendできる!
var s []int s = append(s, 1, 2, 3) fmt.Println(s) // [1 2 3]
なので、あまり深く気にせず append します! ただし、「nilと空の違い」は覚えておきます!
Map(マップ):キーと値でデータを管理
最後はMap(連想配列)です!
ages := map[string]int{ "たろう": 30, "はなこ": 25, } ages["じろう"] = 28 fmt.Println(ages["はなこ"]) // 25
キーでデータを素早く取り出せるのが強み!
キーの存在チェックもできる
value, ok := ages["はなこ"] if ok { fmt.Println("存在してます!", value) }
まだ、初期化が慣れないですが、、、こういうのは何回も書いていけば、覚えていくかな。 pythonでもそうだったし。
今日のまとめ
- Struct:複数の値をひとまとまりにする
- Slice:appendやスライス構文で柔軟に操作できる
- nilスライス:初期化されてないスライス。appendで自動的に使えるようになる
- Map:キーと値の組み合わせで高速にデータ管理
- Go Tourで実行しながら学べるのが最高!
ただ、やはり、まだまだ慣れていないです。当たり前ですが、、、
(この記事は広告を含みます)