post Image
Go言語の基本 — array と slice の違い

まとめ

  • slice は array より柔軟。
    • slice の方が、軽量プログラミング言語(Ruby)でいう array に近い。
    • だが、さすがに軽量プログラミング言語よりは柔軟じゃない。
  • slice は array を参照しているラッパーのようなもの。
    • slice をいじると、内部では基底となる array の状態が変わったり、新しいarrayがnewされたり、色々なことがおこなわれる。

宣言方法

array の場合

要素数と型を書く。

var a [3]int

slice の場合

要素数を書かない。これだけでsliceになる。

var s []int

宣言と同時に代入する

arrayの場合

後ろにに要素を並べる。

a := [3] int{1,2,3}

この書き方では、要素数は省略できる。
ただこれは後ろに書いた要素の数を自動でカウントしてくれているだけで、要素数を明記した場合と、何か実体が変わるわけではない。

a := [...] int{1,2,3}

slice の場合

arrayと記法は同じで、ブレースに要素を書く。

s := []int{1,2,3}

空配列/空スライス

arrayの場合

空配列を作ると、足りない値がすべて自動的に埋められる。

a := [3] int{}

fmt.Println(a) // [0 0 0]

sliceの場合

中身がそのとおり空になる。

s := []int{}

fmt.Println(s) [] // []

要素の追加

array の場合

そもそも要素の個数が決まっているので、要素の追加という概念がない。

slice の場合

append すれば良い。

s := []int{}

s = append(s, 1)
s = append(s, 2)
s = append(s, 3)

fmt.Println(s) // [1 2 3]

ただし、arrayより柔軟なsliceとはいえ、存在しない要素にいきなり代入することは出来ないようだ。

s := []int{}

s[0] = 1  // panic: runtime error: index out of range

型の表し方

arrayの場合

配列すべてを表す型というのは存在しない。

[要素数]型名

以下は全て別々の型として扱われる。

[3]int
[3]string
[4]int

slice の場合

[]型名

と表現する。

例:

[]string
[]int

環境

  • go version go1.8 darwin/amd64

参考


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。