Open1

Go入門メモ

new_wellnew_well

Day 1

Goの基本的な文法について

Hello World

パッケージ名定義、標準パッケージをインポート
fmtパッケージで文字列出力

package main

import "fmt"

func main() {
	fmt.Println("Hello World!")
}

変数定義

2つの定義方法がある
右辺のリテラルから型が明確な場合のみ、2つ目の書き方ができる

// 1. 変数定義宣言 変数名 型
var a int
// 初期値代入も可
var b int = 1

//2. 変数名 初期値
n := 1

Goの扱うビルトイン型について

以下が存在。

  • interface{} (any)
  • bool
  • byte
  • complex64, complex128
  • error
  • float32, float64
  • int, int8, int16, int32, int64
  • rune, string
  • uint, uint8, uint16, uint32, uint64
  • uintptr

uintptrはアドレスを格納できる大きさを持つ整数型
整数型なので、アドレス参照(*a)などはできず、演算結果も整数型としての結果

定数宣言

constを用いて宣言できる

// 使われなくてもエラーにはならない。
const n = 1

// constで宣言された定数は、型キャスト不要(利用される場面で型が決まる。)
const x = 1
y := 1 + x
z := 1.2 + x

iota (列挙)

Goには列挙型が存在しない。constと合わせてiotaを用いるとenumのような定数を宣言できる。

const (
	Apple = iota
	Orange
	Banana
)

func main() {
	fmt.Println(Apple)  // 0
	fmt.Println(Orange) // 1
	fmt.Println(Banana) // 2
}

都度定数の設定ルールを変更することができる。

const (
	Apple = iota + iota
	Orange
	Banana = iota + 3
	Peach  = 8
)

func main() {
	fmt.Println(Apple)  // 0 + 0
	fmt.Println(Orange) // 1 + 1
	fmt.Println(Banana) // 2 + 3
	fmt.Println(Peach)  // 8
}

型を指定して宣言もできる

type Fruit int
type Animal int

const (
	Apple Fruit = iota
	Orange
	Banana
)

const (
	Monkey Animal = iota
	Elephant
	Pig
)

func main() {
	fmt.Println(Apple)    // Fruit(0) なので 0
	fmt.Println(Monkey)   // Animal(0) なので 0
	fmt.Println(Orange)   // Fruit(1) なので 1
	fmt.Println(Elephant) // Animal(1) なので 1
	fmt.Println(Banana)   // Fruit(2) なので 2
	fmt.Println(Pig)      // Animal(2) なので 2

	// var fruit Fruit = Elephant これはエラー
	var fruit Fruit = Fruit(Elephant)
	fmt.Println(fruit) // 1
}