概要
知ったことをメモする。
随時追記予定。
言語の特徴
- Googleが開発した言語
- 静的型付け言語
- コンパイル言語
- メモリ管理が安全
- 並行処理が得意
- C言語に似ている
- 2019年9月現在日本では、Go言語を扱う開発者は希少であり市場価値が高い
- Go言語を扱う開発者は比較的ベテランのエンジニアが多いように感じる
- 便利機能とかは豊富ではない。原始的なアプローチが多い
- サクッとプロトタイプを開発するのはRailsやLaravelに劣るが、速度を求めるなら適している
学習方法
ライブラリ
Left align | Right align |
---|---|
realize | ホットリロード |
goose | DBマイグレーション |
siris | Webアプリケーションフレームワーク |
go-cmp | 値比較 |
pprof | プロファイリング |
guregu/null | 変数にnullが入ってきたときに型のデフォルト値にするのではなくnullとして扱えるようにする |
hashicorp/golang-lru | LRUキャッシュ |
gorm | ORM |
julienschmidt/httprouter | ルーティング |
kr/pty | unix操作するやつ |
labstack/echo | Webサーバー |
go-urn | URNパーサー |
Log出力
import "log"
func main() {
log.Print("hoge")
}
実行結果
# go run main.go
2019/08/30 09:20:52 hoge
echoのサーバー起動
import "github.com/labstack/echo/v4"
func main() {
e := echo.New()
}
# go run main.go
____ __
/ __/___/ / ___
/ _// __/ _ \/ _ \
/___/\__/_//_/\___/ v4.1.5
High performance, minimalist Go web framework
https://echo.labstack.com
____________________________________O/_______
O\
⇨ http server started on [::]:8081
Classがない
structを使う。
ジェネリクスがない
ArrayとSliceがある
繰り返す際はrangeを使う。
変数名の命名は慣例的に短い
1~3文字の変数名とかがよくある。
外部のパッケージから利用するエクスポートする関数や変数は先頭文字を大文字にしなければならない
例:
import (
"fmt"
)
func main() {
fmt.Println("Hello World")
}
↑の Println とか
「例外」はない
エラーハンドリングはerrorインタフェースを用いて行う。
example.go
v, err := hoge.Fuga()
if err != nil {
// エラー時の処理
}
&(アドレス演算子)
値のポインタ
変数の宣言
var s = "文字列"
s := "文字列"
↑どちらも同じ挙動となる。
変数の初期化の際は := で宣言すると var を省略できる。
※ただし後者の宣言方法は関数内でのみ使用できる。
複数の同じ型の変数を宣言する場合、型を省略して書ける
var firstName, lastName string
型推論してくれる
var firstName, lastName = "yamada", "tarou"
変数は型ごとにゼロ値(デフォルト値)が決まっている
数値型(int,floatなど): 0
bool型: false
string型: "" (空文字列( empty string ))
テスト
デフォルトで用意されている、 'testing' を用いる。
テストコードはテスト対象のプロダクトコードと同じディレクトリに作成する。
ファイル名は_testのサフィックスをつける。
例:
example.go
example_test.go
.envファイルで定義した環境変数を参照する
godotenv というライブラリを使う。
ライブラリのインストール
# go get github.com/joho/godotenv
使用
.env
# データベースにログインするユーザー名
DB_USER: root
main.go
err := godotenv.Load()
if err != nil {
log.Fatal("Error loading .env file")
}
DB_USER := os.Getenv("DB_USER")
関数
引数
同じ型の引数を複数個受け取る場合、引数の型は省略できる。
例:
func add(x, y int) int {
return x + y
}
x, y int
でも x int, y int
でも良い。
戻り値
関数は複数の戻り値を返却できる
例:
func hoge() (string, error) {
}
↑括弧で戻り値を複数指定できる。
戻り値を変数名で指定する
例:
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
↑ return
の変数名を省略できる。
型変換
型変換
例:
var i int = 42
var f float64 = float64(i)
var u uint = uint(f)