#【Golang】スライス
Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。
package main
//スライス 可変長配列
//関数では参照渡しされるので、本体の値も変わる。配列とは違う。
import "fmt"
func main() {
//宣言
//スライス = 可変長配列
//[]にするとサイズ変更できる。
var a []int = []int{100, 200}
//宣言
b := [] string{"A", "B"}
fmt.Println(b)
//>>[A, B]
//宣言
//[]を作る nil メモリーに確保しない。bとは違う。
//メモリーは深い領域なので、最初は、あまり気にしなくてもいい
var c []int
fmt.Printf("len=%d cap=%d value=%v\n", len(b), cap(b), b)
fmt.Printf("len=%d cap=%d value=%v\n", len(c), cap(c), c)
fmt.Println(c)
//>>[]
//aに300を追加
a = append(a, 300)
fmt.Println(a)
//>>[100, 200, 300]
//代入
a[0] = 1000
fmt.Println(a)
//>>[1000 200 300]
//スライス作成
d := []int{1, 2, 3, 4, 5, 6}
fmt.Println(d)
//値の取り出し
fmt.Println(d[2])
//>>3
//2~4の前まで
fmt.Println(d[2:4])
//~2前まで
fmt.Println(d[:2])
//2~最後
fmt.Println(d[2:])
//全て
fmt.Println(d[:])
//copy コピー先、コピー元
copy := copy(d, a)
fmt.Println(copy)
//成功したコピー数
//>>3
//先頭から塗りつぶすようにコピーする
fmt.Println(d)
//>>[1000 200 300 4 5 6]
//簡易スライス式
//完全スライス式 は省略
//配列からスライスを作成する方法
//リスト内リスト(スライス内スライス)
var board = [][]int{
[]int{0, 1, 2},
[]int{3, 4, 5},
[]int{6, 7, 8},
}
fmt.Println(board)
//>>[[0 1 2] [3 4 5] [6 7 8]]
//スライスのmakeとcap
//メモリーを気にするような開発の場合。
//最初は気にせずやるほうがいい
//#################################
//make
//make 長さ3, キャパシティ5 [0,0,0]のスライスを作成
n := make([]int, 3, 5)
//宣言 make
//[]を作る 空 メモリーに確保する
l := make([]int, 0)
fmt.Println(l)
//>>[]
//len() 長さ
//cap() キャパシティ(容量)
//%d 整数
fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
//>>len=3 cap=5 value=[0 0 0]
//追加 長さ変更 [0,0,0,0,0]
n = append(n, 0, 0)
fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
//>>len=5 cap=5 value=[0 0 0 0 0
//追加
//[0,0,0,0,0,1,2,3,4,5]
n = append(n, 1, 2, 3, 4, 5)
//長さとキャパシティが変わる.10,10に
fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
//>>len=10 cap=10 value=[0 0 0 0 0 1 2 3 4 5]
//引数一つの場合 は長さ、キャパが同じ(今回は3)になる
e := make([]int, 3)
fmt.Printf("len=%d cap=%d value=%v\n", len(e), cap(e), e)
//>>len=3 cap=3 value=[0 0 0]
//#################################
//for文
// c = make([]int, 5)
f := make([]int, 0, 5)
for i := 0; i < 5; i++ {
f = append(f, i)
fmt.Println(f)
}
fmt.Println(f)
/*答え
[0]
[0 1]
[0 1 2]
[0 1 2 3]
[0 1 2 3 4]
[0 1 2 3 4]
*/
}