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

☑本記事の内容
  • 型変換
  • 配列
  • スライス
参考資料:現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発

型変換

数値型の変換

  • int(),float()とやることで数値の型変換を行える
  • %fでfloat表示、%dでint表示
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

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

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

import "fmt"

func main() {
	var s string = "15"
	ss = int(s)
	fmt.Println(ss)
}
(結果)エラー表示
cannot convert s (type string) to type int
  • strconv.Atoi()を使用する
package main

import (
	"fmt"
	"strconv"
)

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

配列

基本的なこと

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

配列の注意点

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

スライス

基本的なこと

  • 最初の値は0から数え始める
  • 値の番号を指定して置き換えることも出来る
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]

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

  • スライスの中にスライスを入れることも可能
  • 配列と違い、後から値を追加することが出来る
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とキャパシティ

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

目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ABOUT US
サカイザ
機械設計→技術営業→SEと転職し、
現在フリーランスエンジニア
北海道出身東京在住
現在、Go案件を受注中
扱えるスキルGo,GCP,Java,AWS,SQL,Python,PHP,etc...
合同会社エンブリオ 代表社員