Open3
Golang学習ログ
ピン留めされたアイテム
Golang学習参考
- 公式:The Go Programming Language
- 記事
- 同僚の助言
- A Tour of Go で文法やったらGinとかのフレームワークやってた
- Goの文法を学ぶ
- フレームワークに触れてみる
A Tour of Go
※このツアーはローカルで行うこともできる:Go offline
基本
- packageのimportは括弧で囲んでまとめて書く(グループ化する)ことができる(factored import statement)
- 外部パッケージから参照できる名前(メソッド名など)は大文字で始まる。
- 例:
fmt.Println
,math.Pi
- 例:
- Go言語の基本型(組み込み型)一覧
// 真偽値型
bool
// 文字列型
string
// 整数型
// 符号付き整数
int int8 int16 int32 int64
// 符号なし整数
uint uint8 uint16 uint32 uint64 uintptr
// バイト型(uint8 の別名)
byte
// rune型(int32 の別名。文字列に対するUnicodeのコードポイント(※)を10進数に直したものを表す)
// →golangで文字列に変換できる番号と考えれば良さげ(参考:https://blog.framinal.life/entry/2021/04/14/155015)
rune
// 浮動小数点数型
float32 float64
// 複素数型
complex64 complex128
// 公式以外の参考:https://qiita.com/kyosuke5_20/items/8a3af2411f79a25f78b5
※Unicodeのコードポイント:Unicodeが扱っているすべての文字に割り当てられた対応番号
関数の定義
- 関数は
func
で宣言する - 変数名の後ろに型を書くのがポイント
// 公式の例
func add(x int, y int) int {
return x + y
}
// 内容
func メソッド名(引数1 引数1の型, 引数2 引数2の型) 戻り値の型 {
return 戻り値
}
- 関数において同じ型の引数が連続する場合は記述を省略できる
func add(x, y int) int {
return x + y
}
- 関数は複数の戻り値を返すことができる
func swap(x, y string) (string, string) {
return y, x
}
- 関数の戻り値に名前をつけることができる(named return value)
- named return valueは関数の最初で定義した変数名として扱われる
- 戻り値に名前をつけた場合、returnの後ろに何も書かずに値を返すことができる(naked return)
- naked returnは短い関数でのみ使った方が良い。長い関数では可読性に悪影響が出る。
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
func main() {
// 戻り値:"7 10"
fmt.Println(split(17))
}
変数の定義
- 変数は
var
で宣言する
// 例:int型の変数iを定義する
var i int
// 内容
var 変数名 変数の型
- 関数と同様に同じ方が複数続く場合はまとめて定義できる
// 例:int型の変数x, y, zを定義する
var x, y, z int
- 宣言と一緒に初期化も同時に行うことができる
//例:int型の変数i, jにそれぞれ1, 2を代入
var i, j int = 1, 2
-
関数の中であれば、
var
宣言の代わりに:=
代入文で暗黙的な方宣言ができる- 関数の外(
func
の外側)ではvar
やfunc
が必要
- 関数の外(
func main() {
var i, j int = 1, 2
k := 3
c, python, java := true, false, "no!"
fmt.Println(i, j, k, c, python, java)
}
- 変数宣言は、import文と同様に括弧で囲んでまとめて書くことができる(factored宣言)
// factor宣言
var (
ToBe bool = false
MaxInt int = 9999
str string = "あいう"
)
// 出力処理
func main() {
fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
fmt.Printf("Type: %T Value: %v\n", str, str)
}
// 出力結果
// Type: bool Value: false
// Type: int Value: 9999
//Type: string Value: あいう
-
変数に初期値を与えずに宣言した場合はゼロ値(zero value)が与えられる
- 型ごとのゼロ値は以下の通り
- 数値型:0
- 真偽値型:false
- 文字列型:""(空文字(empty string))
- 型ごとのゼロ値は以下の通り
-
変数の前で型を宣言することで型変換(キャスト)を行うことができる
-変数v
をT
型に変換する場合の記述->T(v)
- Golangでは型変換は明示的に行う必要がある。
var i int = 42
var f float64 = float64(i) // int型のiをfloat64型に変換
var u uint = uint(f) // float64型のfをuint型に変換
// よりシンプルに":="でも記述可能
i := 42
f := float64(i)
u := uint(f)
コマンド
- gofmt:Goのプログラムを整形する