🦫

Goの旅行記(A Tour Of Go)

に公開

Packages

Goのプログラムはpackageで構成される

プログラムはmainパッケージから開始される

パッケージとは関連するGoのコードをまとめるための単位である

全てのGoファイルは、最初の行でパッケージ名を宣言する

イメージ

myapp/
├── main.go          (package main)
├── utils/
│   └── math.go      (package utils)
└── models/
└── user.go      (package models)

Imports

Goでは、最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前

Functions

変数名の後ろに型名を定義する

func add(x int, y int) int {
	return x + y
}

// 型が同一の場合は省略もできる
func add(x, y int) int {
	return x + y
}

Multiple results

関数は複数の戻り値を返すことができます。

func swap(x, y string) (string, string) {
	return y, x
}

Named return values

戻り値に名前をつけることができる

戻り値の意味を示す名前にすることで、関数のドキュメントとして表現する

名前付きの戻り値を利用すると、returnステートメントに何も書かずに戻すことができる(naked return)

処理の長い関数の場合、naked return ステートメントは可読性が下がるので注意が必要⚠️

func split(sum int) (x, y int) {
	x = sum * 4 / 9
	y = sum - x
	// x, y intが返却される
	return
}

Variables

var ステートメントは変数を宣言することができる

複数の変数の最後に型を書くことで変数のリストを宣言できる

// bool型の変数リスト
var c, python, java bool

Variables with initializers

var 宣言では、変数毎に初期化子(initializer)を与えることができる

初期化子が与えられている場合は型を省略できる

var i, j int = 1, 2

// 省略パターン
var c, python, java = true, false, "no!"

Short variable declarations

関数内ではvarの代わりに、:=の代入文で暗黙的な型宣言ができる

関数外ではキーワードで始まる宣言が必要

func main() {
	var i, j int = 2, 3
	k := 5
	c, python, java := true, false, "no!"
	
	// ~~~以下省略~~~
}

Basic types

Go言語の基本型は以下

bool

string

// 符号あり整数
int  int8  int16  int32  int64

// 符号なし整数
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 の別名

rune // int32 の別名
     // Unicode のコードポイントを表す

float32 float64

complex64 complex128

Zero values

変数に初期値を与えずに宣言すると、ゼロ値(zero value)が与えられる

ゼロ値は型によって以下のように与えられる

  • 数値型(int,floatなど): 0
  • bool型: false
  • string型: "" (空文字列( empty string ))

Type conversions

変数 v 、型 T があった場合、 T(v) は、変数 v を T 型へ変換する

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

i := 42
f := float64(i)
u := uint(f)

Type inference

明示的な型を指定せずに変数を宣言する場合( := や var = のいずれか)、変数の型は右側の変数から型推論される

i := 42           // int
f := 3.142        // float64
g := 0.867 + 0.5i // complex128

Constants

const キーワードを使って変数と同じように宣言

定数は、文字(character)、文字列(string)、boolean、数値(numeric)のみで使える

定数は := を使えない

const Pi = 3.14

Numeric Constants

型のない定数は、その状況によって必要な型を取る

Discussion