がじぇ

お金と家電とプログラミングのブログ

夏休み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数が違うため、アドレスの指定は型を合わせて指定しないといけない。


【新しいC言語講座】ポインタの基本(1)

その他メモ

  • defar関数
    • 最後に入れたオブジェクトから順に実行される。fileをcloseする処理などに使うと便利
  • panic
    • 自分でエラーを定義できる(panicを敢えて書くようなコードは推奨されていない)