[box class="blue_box" title="☑本記事の内容"]
- map
- バイト型
- 関数
[/box]
参考資料:現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
[box class="glay_box" title="Contents"]
[/box]
map
[box class="yellow_box" title="✔mapの目次"]
[/box]
基本的なこと
[box class="glay_box"]
- map[string]int{}のような感じでkeyとvalueを指定する
- 新規で値を入れることもできる
[/box]
package main
import (
"fmt"
)
func main() {
m := map[string]int{"apple": 100, "banana": 200}
fmt.Println(m)
fmt.Println(m["apple"])
m["banana"] = 300
fmt.Println(m)
m["new"] = 500
fmt.Println(m)
}
(結果)
map[apple:100 banana:200]
100
map[apple:100 banana:300]
map[apple:100 banana:300 new:500]
存在しない値、値の存在確認
[box class="glay_box"]
- 存在しない値を指定すると0が返ってくる
- 値の存在確認も行える
[/box]
package main
import (
"fmt"
)
func main() {
m := map[string]int{"apple": 100, "banana": 200}
fmt.Println(m["nothing"])
v, ok := m["apple"]
fmt.Println(v, ok)
v2, ok2 := m["nothing"]
fmt.Println(v2, ok2)
}
(結果)
0
100 true
0 false
初期化
[box class="glay_box"]
- makeを使うことで初期化を行える
[/box]
package main
import (
"fmt"
)
func main() {
m := make(map[string]int)
m["note"] = 5000
fmt.Println(m)
}
(結果)
map[note:5000]
[box class="glay_box"]
- makeを使わない場合はエラーとなる
[/box]
package main
import (
"fmt"
)
func main() {
var m map[string]int
m["note"] = 5000
fmt.Println(m)
}
(結果)エラー表示
panic: assignment to entry in nil map
バイト型
[box class="yellow_box" title="✔バイト型の目次"]
[/box]
基本的なこと
[box class="glay_box"]
- ASCIIコードを用いて文字表示が出来る
- そんなことも出来るんだくらいの覚えでOK
- ASCIIコード参照サイト
[/box]
package main
import (
"fmt"
)
func main() {
b := []byte{72, 73}
fmt.Println(b)
fmt.Println(string(b))
c := []byte("HI")
fmt.Println(c)
fmt.Println(string(c))
}
(結果)
[72 73]
HI
[72 73]
HI
関数
[box class="yellow_box" title="✔関数の目次"]
[/box]
基本的なこと
[box class="glay_box"]
- 関数を呼び出すときはmainで他の関数を指定することで出来る
[/box]
package main
import (
"fmt"
)
func add() {
fmt.Println("add function")
}
func main() {
add()
}
(結果)
add function
引数の引き渡し
[box class="glay_box"]
- add(引数)というような感じで引数の引き渡しが出来る
- add側にも記載が必要
[/box]
package main
import (
"fmt"
)
func add(x int, y int) {
fmt.Println("add function")
fmt.Println(x + y)
}
func main() {
add(10, 20)
}
(結果)
add function
30
値の戻し方
[box class="glay_box"]
- main関数で変数宣言を行う
- add関数の方にも型の宣言が必要
- addでreturnを使用する
[/box]
package main
import (
"fmt"
)
func add(x int, y int) int {
return x + y
}
func main() {
r := add(10, 20)
fmt.Println(r)
}
(結果)
30
2つの値の戻し方
[box class="glay_box"]
- 関数の場合でも型の省略が出来る
- カンマ(,)で区切り2つの値を記載することで2つの値を戻すことが出来る
[/box]
package main
import (
"fmt"
)
func add(x, y int) (int, int) {
return x + y, x - y
}
func main() {
r1, r2 := add(10, 20)
fmt.Println(r1, r2)
}
(結果)
30 -10
最初に変数名を指定する
[box class="glay_box"]
- 関数宣言の際に最初に変数を宣言することも可能
- 複数の変数を返す際に分かりやすいようにするために使用する
- 1つだけ値を返す際は別に変数宣言をしなくてもよい
[/box]
package main
import (
"fmt"
)
func cal(price, item int) (result int) {
result = price * item
return
}
func main() {
r := cal(100, 2)
fmt.Println(r)
}
(結果)
200
関数内部で関数を使用する
[box class="glay_box"]
- 関数の中で関数を使用することも出来る
- 2通りの関数の使用方がある
- 後者のやり方は並列で関数を使用したい場合に有効(並列に関しては別途説明)
[/box]
package main
import (
"fmt"
)
func main() {
f := func(x int) {
fmt.Println("inner func", x)
}
f(1)
func(x int) {
fmt.Println("inner func", x)
}(1)
}
(結果)
inner func 1
inner func 1