0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめてのGo言語(3. 配列とスライス、マップ)

Last updated at Posted at 2025-06-28

はじめに

先日にアップしたはじめてのGo言語(2. 変数と定数、データ型)に続いて、Go言語の基礎を学んだ記録を記事としてまとめてみました。

実行環境

WSL2(Ubuntu 22.04.3 LTS)

配列

  • 配列の宣言は配列名 [配列の長さ] データ型という書き方ですが、様々なサイトを見ても「間に半角スペースを挟まない配列名[配列の長さ]データ型」という書き方が主流になっているようです。
    • 実際にはどちらの書き方でも動くのですが、他の言語から見ると「半角スペースがあっても無くても正常に動く」というのは少々気持ちが悪いですね...
array.go
package main

import "fmt"

func main() {
    var colors [3] string
    colors[0] = "Red"
    colors[1] = "Green"
    colors[2] = "Blue"

    fmt.Println(colors[0], colors[1], colors[2])
}
実行結果
# go run array.go
Red Green Blue
  • 配列の宣言と同時に初期化する場合は、以下のように記述します。
array2.go
package main

import "fmt"

func main() {
    var colors = [3] string {"Red", "Green", "Blue"}

    fmt.Println(colors[0], colors[1], colors[2])
}

スライス

  • Go言語では、可変長の配列を「スライス」と呼ぶそうです。
    • JavaだとArrayListに相当するオブジェクトだと思われます。
  • スライスの宣言は配列の宣言と似ていますが、「配列の長さ」を指定しない点が異なっています。
  • 要素の追加にはappendメソッドを使いますが、要素追加後のスライス = append(要素を追加するスライス, 追加する要素)という書き方なので要注意です。
    • 他の言語だと要素を追加するオブジェクト.append(追加する要素)という書き方になることが多いので、スライスの操作は間違えやすそうだと感じました。
slice.go
package main

import "fmt"

func main() {
    var colors [] string
    colors = append(colors, "Red")
    colors = append(colors, "Green")
    colors = append(colors, "Blue")

    fmt.Println(colors[0], colors[1], colors[2])
}
実行結果
# go run slice.go
Red Green Blue

マップ

  • Go言語では連想配列をマップ(map)と呼ぶそうです。
    • 他の言語だとHashTableDictionaryなどと呼ばれることもありますが、この辺り。
  • マップの宣言はマップ名 map [キーのデータ型] 値のデータ型という形で、ここまでは腑に落ちるのですが、これだけだとマップのオブジェクトがnilのままとなるため、書き込みをしようとするとランタイムパニックを起こします。
  • そのため、マップはマップ名 = make(map [キーのデータ型] 値のデータ型)という構文で初期化する必要があります。
map.go
package main

import "fmt"

func main() {
    var members map [string] int
    members = make(map [string] int)

    members["Miura"] = 18
    members["Azuma"] = 11
    members["Kuwahara"] = 1
    members["Sano"] = 7
    members["Maki"] = 2

    fmt.Println(members["Sano"])
}
実行結果
# go run map.go
7
  • マップの宣言と同時に初期化を行う場合、以下のように書きますが...
  • 最後の要素(ここでは"Maki")の後ろに,を入れないと構文エラーになってしまうので注意が必要です。
    • 最後のカンマが不足していると、syntax error: unexpected newline, expecting comma or }というエラーが表示されますが、最初は何がエラーなのか全く分からずに右往左往しました💦
map2.go
package main

import "fmt"

func main() {
    var members = map [string] int {
        "Miura": 18,
        "Azuma": 11,
        "Kuwahara": 1,
        "Sano": 7,
        "Maki": 2,
    }
    fmt.Println(members["Sano"])
}

まとめ

  • 配列、スライス、マップのいずれも、私が使ってきたJavaやC#などの言語と比べると癖があると感じました。
  • 特にマップはmap new()のような形ではなく、make(map [キーのデータ型] 値のデータ型)という見たことの無い構文で初期化するので、覚えづらいと感じました。
  • また、マップの宣言と初期化を同時に行う際に、最後の要素の後ろに,を入れないといけないという点も、他の言語とは異なるGo言語の特徴だと感じました。

参考URL

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?