Go 入門

Go言語入門④ ~型変換・配列・スライス~

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

  • 型変換
  • 配列
  • スライス

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

  1. 型変換
  2. 配列
  3. スライス

[/box]

型変換

[box class="yellow_box" title="✔型変換の目次"]

[/box]

数値型の変換

[box class="glay_box"]

  • int(),float()とやることで数値の型変換を行える
  • %fでfloat表示、%dでint表示

[/box]

package main

import "fmt"

func main() {
	var x int = 1
	xx := float64(x)
	fmt.Printf("%T %v %f\n", xx, xx, xx)

	var y float64 = 1.5
	yy := int(y)
	fmt.Printf("%T %v %d\n", yy, yy, yy)
}
(結果)
float64 1 1.000000
int 1 1

文字列型から数値型への変換

[box class="glay_box"]

  • 同じようにint()を使用しても変換出来ない
  • 他のプログラミング言語の場合だったら可能なことが多い

[/box]

package main

import "fmt"

func main() {
	var s string = "15"
	ss = int(s)
	fmt.Println(ss)
}
(結果)エラー表示
cannot convert s (type string) to type int

[box class="glay_box"]

  • strconv.Atoi()を使用する

[/box]

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var s string = "15"
	i, _ := strconv.Atoi(s)
	fmt.Printf("%T %v\n", i, i)
}
(結果)
int 15

配列

[box class="yellow_box" title="✔配列の目次"]

[/box]

基本的なこと

[box class="glay_box"]

  • [数字]<型>とすることで配列を作成出来る
  • 後から配列に値を入れる方法と初期に値を入れる方法がある

[/box]

package main

import (
	"fmt"
)

func main() {
	var a [2]int
	a[0] = 100
	a[1] = 200
	fmt.Println(a)

	var b [2]int = [2]int{100, 200}
	fmt.Println(b)
}
(結果)
[100 200]
[100 200]

配列の注意点

[box class="glay_box"]

  • 配列の場合は最初に指定した数字の個数以上、値を追加することが出来ない
  • 最初に配列の個数を2と設定すると3つ目の値は入らない

[/box]

package main

import (
	"fmt"
)

func main() {
	var b [2]int = [2]int{100, 200}
	b = append(b, 300)
	fmt.Println(b)
}
(結果)エラー表示
first argument to append must be slice; have [2]int

スライス

[box class="yellow_box" title="✔スライスの目次"]

[/box]

基本的なこと

[box class="glay_box"]

  • 最初の値は0から数え始める
  • 値の番号を指定して置き換えることも出来る

[/box]

package main

import (
	"fmt"
)

func main() {
	n := []int{1, 2, 3, 4, 5, 6}
	fmt.Println(n)
	fmt.Println(n[2]) 
	fmt.Println(n[2:4])
	fmt.Println(n[:2]) 
	fmt.Println(n[2:]) 
	fmt.Println(n[:])   

	n[2] = 200
	fmt.Println(n)
}
(結果)
[1 2 3 4 5 6]
3
[3 4]
[1 2]
[3 4 5 6]
[1 2 3 4 5 6]
[1 2 200 4 5 6]

スライスの中にスライスを入れる、値を追加する

[box class="glay_box"]

  • スライスの中にスライスを入れることも可能
  • 配列と違い、後から値を追加することが出来る

[/box]

package main

import (
	"fmt"
)

func main() {
	n := []int{1, 2, 3, 4, 5, 6}
	var board = [][]int{
		[]int{0, 1, 2},
		[]int{3, 4, 5},
		[]int{6, 7, 8},
	}
	fmt.Println(board)

	n = append(n, 100, 200, 300, 400)
	fmt.Println(n)
}
(結果)
[[0 1 2] [3 4 5] [6 7 8]]
[1 2 3 4 5 6 100 200 300 400]

makeとキャパシティ

[box class="glay_box"]

  • スライスは値の個数とキャパシティを指定することが出来る
  • メモリを気にする場合に使用される
  • 基本的には使用しないが、使用する機会もあるので頭の片隅に置いておくくらい
  • スライスなので、後からキャパシティの追加も出来る

[/box]

package main

import (
	"fmt"
)

func main() {
	n := make([]int, 3, 5)
	fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
	n = append(n, 0, 0)
	fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)
	n = append(n, 1, 2, 3, 4, 5)
	fmt.Printf("len=%d cap=%d value=%v\n", len(n), cap(n), n)

	a := make([]int, 3)
	fmt.Printf("len=%d cap=%d value=%v\n", len(a), cap(a), a)

	b := make([]int, 0)
	var c []int
	fmt.Printf("len=%d cap=%d value=%v\n", len(b), cap(b), b)
	fmt.Printf("len=%d cap=%d value=%v\n", len(c), cap(c), c)
}
(結果)
len=3 cap=5 value=[0 0 0]
len=5 cap=5 value=[0 0 0 0 0]
len=10 cap=10 value=[0 0 0 0 0 1 2 3 4 5]
len=3 cap=3 value=[0 0 0]
len=0 cap=0 value=[]
len=0 cap=0 value=[]

Go言語入門⑤へ ≫

≪ Go言語入門③へ

目次

-Go, 入門