基礎からわかるGo言語 改訂2版 備忘録
関数宣言のコードスタイル
開始波カッコをfuncと同じ行に記述する
OK
func main() {
fmt.Println("hoge")
}
だめ
func main()
{
fmt.Println("hoge")
}
ソースコードの整形
go fmt ソースファイル名
型なしと型ありを計算させると型ありの方の型になる
package main
import "fmt"
const C1 = 12345
const C2 int = 34567
func main() {
var x int = C1 * C2 // C2がintなので型を持たないC1もintとして計算される
}
インクリメント/デクリメントは文
var x int = i++ // エラー fmt.Println(i--) // エラー
同時に複数の変数に代入可能
c, d = 3.14, "abcdefg" e, f = fn() // 2つの値を返す関数fnの戻り値を代入できる
ブランク識別子
代入はできるが取得はできない
a, _ = fn() // 1つ目の戻り値しかいらない場合2番目の戻り値をブランク識別子に代入する
変数宣言
var x int
var a, b, c int
var (
i int
s1, s2 string
)
i := 123
ii, s := i, "hoge"
ルーンリテラル
a := 'a' // 値は97(U+0061) A := 'A' // 値は64(U+0041)
文字列リテラル
a := "ダブルクオートではエスケープが解釈される" b := `バッククオートではエスケープは解釈されない` c := `バッククオートを使うと 改行も含められる`
iota列挙子
const (
ZERO = iota
ONE = iota
TWO = iota
THREE = iota
FOUR = iota
)
2回目以降は省略できる
const (
ZERO = iota
ONE
TWO
THREE
FOUR
)
識別子をエクスポートする
static的な?
const Export = true
for
一般的な例
for i := 0; i < 5; i++ {
fmt.Println(i)
}
初期化文と後処理文が不要ならセミコロンだけでOK
for ; i < 5; {
// do something
}
range式を使用する(Javaでいう拡張for文)
arr := [...]int{0, 1, 2, 3, 4}
for i := range arr {
fmt.Println(i)
}
while
for i < 5 {
// do something
}
無限ループ
for {
// do something
}
ifの条件式の前に文を記述可能
if x, y := hoge(i); x < y {
// do something
}
switch節内のcase節に条件式が指定できる
switch {
case i > 0:
fmt.Println("+")
case i < 0:
fmt.Println("+")
default:
fmt.Println("0")
}
構造体
type MyData struct {
s string
b byte
}
var m MyData
m.s = "hoge"