Go 入門

Go言語入門⑤ ~map・バイト型・関数~

[box class="blue_box" title="☑本記事の内容"]

  • map
  • バイト型
  • 関数

[/box]
参考資料:現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
[box class="glay_box" title="Contents"]

  1. map
  2. バイト型
  3. 関数

[/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"]

[/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

Go言語入門⑥へ ≫

≪ Go言語入門④へ

目次

-Go, 入門