夏休み2日目で学んだこと(UdemyのGo講座)
おはようございます。
がじぇったー (@hackmylife7) | Twitter
です。
2日目は1日目の予定の遅れも取り戻し、
しっかり勉強できました。
辞書型
辞書型を使う時はmapで定義する
package main import "fmt" func main() { m := map[string]int{"apple": 100, "banana": 200} fmt.Println(m) // keyを指定してplint fmt.Println(m["apple"]) m["banana"] = 300 fmt.Println(m) // 辞書に追加 m["new"] = 500 fmt.Println(m) // valueの確認 v, ok := m["apple"] fmt.Println(v, ok) // 辞書にない場合はfalseになる v2, ok2 := m["nothing"] fmt.Println(v2, ok2) // からのmapに追加する m2 := make(map[string]int) m2["pc"] = 5000 fmt.Println(m2) }
出力
$ go run map.go map[apple:100 banana:200] 100 map[apple:100 banana:300] map[apple:100 banana:300 new:500] 100 true 0 false map[pc:5000]
関数
関数の作り方は大事なのでここもしっかり写経
inner関数の書き方とか簡単で良い。
package main import "fmt" // returnする型も指定する func add(x int, y int) (int, int) { // fmt.Println("add func") // fmt.Println(x + y) return x + y, x - y } func cal(price, item int) (result int) { result = price * item // result initでresultをreturnすることを指定しているのでreturn resultとする必要がない // return result return } func main() { // 関数の実行 r, r2 := add(19, 29) fmt.Println(r, r2) r3 := cal(100, 2) fmt.Println(r3) // inner関数 f := func(x int) { fmt.Println("inner func", x) } f(1) func(x int) { fmt.Println("inner func2", x) }(1) }
出力
$ go run func.go 48 -10 200 inner func 1 inner func2 1
if文
if文の書き方。
package main import "fmt" func by2(num int) string { if num%2 == 0 { return "ok" } else { return "no" } } func main() { result := by2(10) if result == "ok" { fmt.Println("great") } }
出力
go run if2.go great
for文
for文の書き方
package main import "fmt" func main() { for i := 0; i < 10; i++ { if i == 3 { fmt.Println("continue") continue } if i > 5 { fmt.Println("break") break } fmt.Println(i) } }
出力
$ go run for.go 0 1 2 continue 4 5 break
ポインタとアドレス
Pythonしか書いたことがなく、ポインタとアドレスやメモリの確保などは、あまり意識したことがありませんでした。
なのでyoutubeの動画で知識を補強しました。
プログラム上で定義する変数がメモリの中でどのように使われるか、よくまとめられています。
メモ
- 変数を定義するとメモリで領域が確保される
- 例えばv=3と変数を定義するとコンピュータ内の動作は200番地にあるint領域(アドレス)に3というデータを入れる、という動作になる。言い換えると200番地にあるint領域というデータさえわかればそのデータにアクセスできることになる→それがポインタである。
- ポインタ:変数名を使わずにアドレスを使ってメモリにアクセスする手段
- 型によってい使用されるbyte数が違うため、アドレスの指定は型を合わせて指定しないといけない。
その他メモ
- defar関数
- 最後に入れたオブジェクトから順に実行される。fileをcloseする処理などに使うと便利
- panic
- 自分でエラーを定義できる(panicを敢えて書くようなコードは推奨されていない)