Open3

Golang学習ログ

ふじしろふじしろ

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の外側)ではvarfuncが必要
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))
  • 変数の前で型を宣言することで型変換(キャスト)を行うことができる
    -変数vT型に変換する場合の記述->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のプログラムを整形する