Open3
Go言語講習会
第1回 実行環境を整えよう
変数を定義するだけして、使用してなかった場合
コンパイルする時に、エラー吐くらしい。(おもろ
var i int = 10
fmt.Println("i is", i)
fmt.Printf("i type is %T, %v \n", i, i)
これで出力結果が、
i is 10
i type is int, 10
%v
: 型を教えてくれる?
第2回 シャドーイングと配列
Goでは、最初の文字が小文字ではなく大文字ではじまってるものは
公開されているパッケージであるということ。
短縮変数宣言
// 型推論を利用して、右辺から変数の型を自動的に決定している
ii := 123 // int型
fmt.Printf("ii type is %T, %v \n", ii, ii)
ff := 3.14 // float64型
fmt.Printf("ff type is %T, %v \n", ff, ff)
ss := "str" // string型
fmt.Printf("ss type is %T, %v \n", ss, ss)
変数を宣言する時に、右辺に値があるなら
短縮変数宣言を使うことが多いっぽい。
Goは、ポインタを使っていくっぽい。
よく分からなくなったらポインタを見ると良いか。
配列とスライス
// 配列
// 長さを3から変えることが出来ない。
x := [3]int{1,2,3}
fmt.Println(x)
fmt.Printf("x type is %T \n", x)
// スライス
// 長さを3から変えることが出来ない。
y := []int{1,2,3}
fmt.Println(y)
fmt.Printf("y type is %T \n", y)
出力結果がこれ。配列だと、配列数を変えることが出来ない
[1 2 3]
x type is [3]int
[1 2 3]
y type is []int
配列よりスライスの方がよく使うっぽい
こういうスライスもある
z := make([]int, 0)
fmt.Println(z)
[]
こうなる
z := make([]int, 5)
fmt.Println(z)
[0,0,0,0,0]
初期値が5個
第3回 配列周りの回
配列の長さ取得 len()
array := make([]int, 0)
array = append(array, 1, 2, 3)
fmt.Println(len(array)) // 3
length
の略で、配列の長さを取得できる
設定してる、配列の最大数を取得 cap()
array := make([]int, 0, 10)
fmt.Println(cap(array)) // 10
capacity
の略で、配列に格納できる最大サイズを取得できる
配列のコピー copy()
copy(array1, array2)
copy
メソッドで配列のコピーができるらしいけど、あんまり使わないらしい
Goはブロックスコープ
func main() {
// 単純な代入だと「ポインターが一緒」になる
{
s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
s2 := s
fmt.Printf("%p, %p \n", s, s2)
s[0] = 11
fmt.Println(s2) // [11, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
{
s := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
// [2:5] 2から5
// [2:] 2から最後まで
// [:5] 最初から5まで
s2 := s[2:5]
fmt.Printf("%p, %p \n", s, s2)
fmt.Println(len(s), len(s2), s2) // [11, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
}
ブロックスコープなので、この2つのブロックではポインタが違うけれど、
ブロック内では、ポインタは同じ
データ構造の作成 map()
{
m := map[float64]bool{
3.14: true,
1.414: false,
}
fmt.Println(m)
}
型さえ合っていれば、どんな値入れてもおけ?