Go言語の似た概念を触る


はじめに

本題に入る前に、前提となることを記述しておきます。

目的

目的は以下です。

  • Go言語を読んでいて、似た概念を読み間違えないようにするため

それだけです。

読者の対象

読者の対象は以下です。

  • プログラミング初心者
  • Go初心者
  • 軽くGo言語を使っている人

裏を返せば、例えば以下のような方は対象ではありません。

  • Go言語を体系的に理解したい方
  • 似た表現の実体を比較したい方、メモリの使い方を理解したい方

参考

おことわり

  • 少しずつ文を追加しています。
  • 初心者目線で「これとこれも紛らわしいから説明してくれ!」というものがあれば、連絡ください。

本題

ArraysとSlices

A Tour of Goを読んでいて、ArraysとSlicesは似ているなーと思ったのでまとめました。

Arraysは固定長、Slicesは可変長

宣言する形からしてもわかるように、Arraysは固定長でSlicesは可変長です。

Arrays/Slices 宣言 意味
Arrays var a [10]int 10個のintからなる配列a
Slices var b []int 個数は問わないスライスb

見分け方

[]の中に数字が入っているかどうかですね。
数字があればArrays、なければSlicesです。

外部パッケージ呼び出しと、構造体フィールドへのアクセス

仕事でGoのプログラムを読んでいて、???となりました。
どちらもドットを使っています。

外部パッケージ呼び出し

main.go
package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello, World!") //ここ!
}

fmt.Printlnとあるように、ドットを使っています。

参考:A Tour of Go>外部パッケージ呼び出し

構造体フィールドへのアクセス

main.go
package main

import "fmt"

type Vertex struct {
    X int
    Y int
}

func main() {
    v := Vertex{1, 2}
    v.X = 4 //ここ!
    fmt.Println(v.X)
}

構造体Vertexを型とする変数vについて、Xの値を4とする。
これを、ドットを用いてv.Xとしています。

参考:A Tour of Go>構造体のフィールド

見分け方

<importされているパッケージ>.*であれば外部パッケージ。
<構造体を型とする変数>.<構造体のフィールド>であれば、構造体フィールドへのアクセス、でよいでしょう。