m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

go言語の学習メモ8(配列とか)

配列

まあ、普通に考えてリスト配列のことでインデックスと値で構成するもの
長さなどを設定する必要が有る感じがする

sample1.go
package main

import (
	"fmt"
)

func main(){

	fmt.Println("--- start ---")

	// 配列を定義して設定
	var names[3] string
	names[0] = "aaaa"
	names[1] = "bbbb"
	names[2] = "cccc"

	// 出力
	fmt.Println(names)	// 配列の中身をすべて出力
	fmt.Println(names[1:])	// インデックス1番目以降を出力
	fmt.Println(names[2])	// インデックス2番めのみを出力
	fmt.Println(len(names))	// 配列の数を返却

	// 配列に要素数を指定しないで定義
	nums :=  [...]string{"1111", "5555", "4444"}
	fmt.Println(nums)	// 配列の中身をすべて出力
	fmt.Println(len(nums))	// 配列の数を返却

	fmt.Println("--- end ---")

}

$ go run sample1.go 
--- start ---
[aaaa bbbb cccc]
[bbbb cccc]
cccc
3
[1111 5555 4444]
3
--- end ---
$

map(連想配列

sample2.go
package main

import (
	"fmt"
)

func main(){

	fmt.Println("--- start ---")

	// 初期化
	var ages map[string]int = map[string]int{}

	// キーを生成して、設定
	ages["10"] = 123
	ages["20"] = 444
	ages["30"] = 324

	// 出力
	fmt.Println(ages)	// mapすべてを出力
	fmt.Println(ages["10"])	// キー10を指定
	fmt.Println(len(ages))	// キーの数
	
	// for文で出力
	for _key, _item := range ages {
		fmt.Println(_key, _item)
	}

	fmt.Println("--- end ---")

}

go run sample2.go 
--- start ---
map[10:123 20:444 30:324]
123
3
10 123
20 444
30 324
--- end ---
$ 

スライス

配列を動的に制御できるようにした感じ
一部分をコピーしたりすることができるとか

sample3.go
package main

import (
	"fmt"
)

func main(){

	fmt.Println("--- start ---")

	// 要素数を未指定で定義
	var names[] string

	// 値を設定
	names = []string{"1111", "2222", "3333"}
	fmt.Println(names)
	fmt.Println(len(names))
	fmt.Println(cap(names))

	// 追加
	names = append(names, "vvvvvv")
	fmt.Println(names)
	fmt.Println(len(names))
	fmt.Println(cap(names))

	// cap以上に設定するとcapも追加されるか確認
	names = append(names, "xxxxxxx")
	names = append(names, "3333333")
	names = append(names, "55555555")
	fmt.Println(names)
	fmt.Println(len(names))
	fmt.Println(cap(names))

	// 予め配列数とcapを設定する場合はmakeを使用
	names = make([]string, 5, 10)
	names = append(names, "aaa")
	names = append(names, "bbb")

	fmt.Println("make list start")
	for i := 0; i < len(names); i++ {
		fmt.Println(i, names[i])
	}
	fmt.Println("make list end")

	fmt.Println(len(names))
	fmt.Println(cap(names))

	fmt.Println("--- end ---")

}

$ go run sample3.go
--- start ---
[1111 2222 3333]
3
3
[1111 2222 3333 vvvvvv]
4
6
[1111 2222 3333 vvvvvv xxxxxxx 3333333 55555555]
7
12
make list start
0 
1 
2 
3 
4 
5 aaa
6 bbb
make list end
7
10
--- end ---
$