Yuri’s Tech Note

技術系アウトプット

A Tour of Go vol.1

Packages

goのプログラムはパッケージで構成され、mainパッケージから開始される。
ソースコードの冒頭で自身を表すパッケージを記載し、
続いてインポートするパッケージを記述する。

package main

import {
    "fmt"
    "net/http"
    "tmhub/helpers"
}

自社のソースコードではpackageの後にくるものは下記5つ

  • main
  • helpers
  • models
  • config
  • routes

これはトップレベルに配置されているフォルダと一部一致する。
インポートのパスで"tmhub/helpers"と呼び出されているパッケージは冒頭がpackage helpersステートメントで始まる。

Goでは構成するファイルを全てpackageという要素とみなす。

Exported names

パッケージをインポートすると、そのパッケージがエクスポートしている名前を参照することができる。
Goでは外部のパッケージから参照できるエクスポートされた名前は大文字から始まる。

func main() {
	fmt.Println(math.Pi)
}

上記のコードで `math.pi` とすると参照できずエラーが出力される。

cannot refer to unexported name math.pi

Functions

引数では変数名の後に型を記述する。
この時引数の型が同じ場合は変数を先に記述して最後に型を記述する記法もある。

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

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

関数は複数の戻り値を返すこともできる。
また戻り値は引数に続いて宣言することができる。

func split(sum int) (x, y int) {
	x = sum * 4 / 9
	y = sum - x
	return
}

(sum int)に続く(x, y int)が戻り値
上記のコードの結果は7 10が返る

戻り値を引数の後に並べて宣言する。
return は記述必須。

個人的にはreturnが記述必須なら戻り値はreturnに続けて書くか
もしくは戻り値を先頭に記述するなら当然返却するものとしてreturn記述省略可とかにして欲しかった。。