0805
LOGS
- 引き続き golang の勉強をする
- ちょっと間が空いたので正直殆ど覚えていないので,入門としてドットインストールをやっている
- 1ヶ月で1200円ちょっとなんでまぁいいかなと
- 今月ガっとやってやめる
以前もやっていたのでそっちを読んでも良いかも
今日は配列,スライスから
// 配列: 基本定義 var scores [3]int // 初期化も var scores [3]int = [3]{1, 2, 3} // 省略1 var scores = [3]int{1, 2, 3} // 省略2 scores := [3]int{1, 2, 3} // 要素数自明のとき scores := [...]int{1, 2, 3} // スライス: 基本定義 scores := []int{1, 2, 3} // 要素の追加(複数追加) scores = append(scores, 100, 60)
- 配列は後から要素の追加はできないが,スライスなら出来る
- 要素数が変化しないなら配列のほうが処理が早いが,変更することが多いので,一般的にはスライスを使うことが多い
- スライスにスライスを追加する
moreScores := []int{60, 75, 82, 40, 55} scores = append(scores, moreScores...)
- スライスから要素を抽出
- 結果は配列になる
// 1番目から3番目まで抽出 fmt.Println(moreScores[1:3]) // [75 82] // 最初から2番目まで抽出 fmt.Println(moreScores[:2]) // [60 75] // 3番目から最後まで抽出 fmt.Println(moreScores[3:]) // [40 55] // 全部抽出 // fmt.Println(moreScores) と一緒 fmt.Println(moreScores[:]) // [60 75 82 40 55]
- スライスから一部抽出したものを サブスライス というが,サブスライスの値を変更すると,下のスライスの値も,サブスライスを使用した値も変更されることに注意
- サブスライスは,元のスライスを参照しているから
- なのでスライスにスライスを追加した場合でも,影響は受ける
- なるほど
ループ処理
scores := []int{70, 90, 80} for i := 0; i < 3; i++ { fmt.Println(i, scores[i]) } // こうも書ける for i, score := range.scores { fmt.Println(i, scores[i]) } // i(インデックス)を使わない場合(値だけ欲しい場合) for _, score := range.scores { fmt.Println(score) }
マップ
- 要は連想配列
- 書き方:
map[key の型]値の型
var scores map[string]int // 最初に領域を確保する必要がある scores = make(map[string]int) scores["english"] = 80 scores["math"] = 90 // 一気に宣言と領域確保も出来る var scores map[string]int = make(map[string]int) // 省略形 var scores = make(map[string]int) // 宣言と初期化(make を使わなくても良い) scores := map[string]int{ "engligsh": 80, "math": 70, }
- ※ map の初期化では,ケツカンマ必須で,上記の
math
の値 70 の後ろのカンマがないとエラーになる - map で要素を追加する場合は,新たなキー名で値を指定すれば良い
scores["physics"] = 90
- また削除する場合は
delete
関数
delete(scores, "math")
- さらに,存在しないキーにアクセスするとエラーにならず
0
となる(おそらくint型の要素にアクセスしたから?)- string型の場合は
""
空文字列が表示された
- string型の場合は