Goの公式チュートリアルサイトに沿って勉強していきます。 気づいた点や理解があいまいな点をメモしています。
- Packages, variables, and functions.(Go プログラムの基本的なコンポーネントを学びます。)
- Flow control statements: for, if, else, switch and defer(条件文とループ、switch、defer を使ってコードの流れをコントロールする方法を学びます。) をやっていきます。
A Tour of Go_Packages, variables, and functions.
複数の戻り値
戻り値の型は、return
より前で指定します。
func swap(x, y string) (string, string) {
return x, y
}
named return
戻り値の変数に名前をつけると、関数の先頭で定義され、
return
に何も書かずに返せるようになります。naked return と呼ぶそうです。
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
型推論と静的型付け
型を省略しても型推論します。
var i, j int = 1, 2
var c, python, java = true, false, "no!"
※型は実行時ではなくコンパイル時に確定します。
var x = 100
→ xはint型var s = "hello"
→ sはstring型
型と値の表示
型と値の両方を表示できます。
fmt.Printf("Type: %T Value: %v\\n", ToBe, ToBe)
%T
:型(Type)を表示%v
:値(Value)を表示
ゼロ値(初期値)
変数を初期化せずに宣言すると、自動的にゼロ値が設定されます。
出力例: 0 0 false ""
ゼロ値の種類:
- 数値型:0
- bool型:false
- string型:空文字列 ""
var i int
var f float64
var b bool
var s string
fmt.Printf("%v %v %v %q\\n", i, f, b, s)
型変換
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)
このように省略して書くことができます。
i := 42
f := float64(i)
u := uint(f)
fmt.Println と fmt.Printf の違い
- fmt.Println
- 値をそのまま表示
- 改行あり、自動で空白を挿入
- fmt.Printf
- フォーマット指定で出力
- 改行なし、手動で書式を指定
- 例:
fmt.Printf("値は: %v", a)
for文の構造
- 初期化ステートメント
- 条件式
- 後処理ステートメント
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
文字列に変換
文字列変換関数: - fmt.Sprint(a, b):連結して文字列として返す - fmt.Sprintf("%s %d", a, b):フォーマットを使って文字列生成 - fmt.Println(a, b):標準出力(改行あり) - fmt.Print(a, b):標準出力(改行なし)
fmt.Sprint(math.Sqrt(x))
Goの while風ループ
Goには while
がありません。
for
を使って同様の記述ができます。
通常の for
文:
for i := 0; i < 5; i++ {
fmt.Println(i)
}
while風:
i := 0
for i < 5 {
fmt.Println(i)
i++
}
if文とスコープ
Goの if
/ else
文では、ブロック内に return
文がない場合、処理は後続のコードへ続きます。
実行の流れ:
1. pow(3, 2, 10)
→ 9 < 10
→ return 9
2. pow(3, 3, 20)
→ 27 >= 20
→ Print → return 20
→ 出力:9 20
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf("%g >= %g\\n", v, lim)
}
return lim
}
switch文
if
とswtich
の比較
- 条件の評価
- if:複雑な条件(論理式や比較)に対応
- switch:値に対する分岐に向いている
- 書き方
- if:
if 条件 { ... } else if ...
- switch:
switch 値 { case 値: ... }
- if:
- 複数条件
- if:
if a == 1 || a == 2
- switch:
case 1, 2:
で記述可能
- if:
- 変数の定義
- if:
if x := ...; 条件 {}
- switch:
switch x := ...; x { case ... }
- if:
- デフォルト分岐
- if:
else
- switch:
default
- if:
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
fmt.Printf("%s.\\n", os)
}
基本構文周りの章でした。
まだ基本構文が体に染みついてないので、LLMも使いながら頑張って復習します。
では、次はPart2で。