tanish-kr's learning log

Learning output log

Go

プログラム構造

予約語

break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var

事前宣言名

定数

true false iota nil

int int8 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error

関数

make len cap new append copy close delete complex real imag panic recover

変数

var name type = expression

typeが省略された場合、型は初期化式によって決まり、expressionが省略された場合、ゼロ値が初期値になる(int = 0, string = “”, boolean = false)

省略変数宣言

関数内でローカル変数を宣言して初期化するために使用。

:=は宣言であり、=は代入

name := expression

省略変数宣言は必ずしも左辺のすべての変数を宣言するわけではなく、左辺の変数のいずれかが既に同じレキシカルブロック内で宣言されている場合、省略変数宣言はそれらの変数に対する代入のように働く

f, err := os.Open(infile)
f, err := os.Create(outfile) // コンパイルエラー: 新たな変数が無い

ポインタ

C言語のポインタと違う点

ポインタ演算は行えない

変数のアドレスを格納

x := 1
p := &x // pは*int型で、xのアドレスを格納
fmt.Println(*p)  // pが指している変数、つまりx
*p = 2           // x = 2と同じ
fmt.Println(x)

Goで学ぶポインタとアドレス

new関数

new(T) はT型の無名変数を作成し、それをTのゼロ値へ初期化し、*T型の値であるそのアドレスを返す。

変数の生存期間

変数は到達不可能になるまで生存し続ける。よって変数のスコープに注意する。

代入

タプル代入

複数の変数へ一度に代入。2つの変数の値を交換する際に役立つ。

x, y = y, x

代入可能性

medals := []string{"gold", "silver", "bronze"}
// 以下と同じ
medals[0] = "gold"
medals[1] = "silver"
medals[2] = "bronze"

型宣言

type宣言は、既存の方と同じ基底型を持つ新たな名前付き型を定義する

type name underlying-type

パッケージ

package name

インポート

package main

import {
    "fmt"
    "os"
}

スコープ

ブロック

{}で囲まれた一連の文。

  • レキシカルブロック : ブロックの概念を一般化して、ソースコードで明示的にブロック外の他のグループ化もこの概念に含めることができる
  • ユニバースブロック