Go言語
作成日時:2024-08-27
更新日時:2025-07-22
go-swagger/go-swagger: Swagger 2.0 implementation for go
connectrpc/connect-go: The Go implementation of Connect: Protobuf RPC that works.
sqlc-dev/sqlc: Generate type-safe code from SQL
インストール
Download and install - The Go Programming Language
GOPATH set to GOROOT “ディレクトリ” has no effect
GOPATHがGOROOTと同じディレクトリに設定されている場合に発生する警告。
GOPATH: Go言語のワークスペースのルートディレクトリ
GOROOT: Go言語のインストールディレクトリ
環境変数を正しく設定する。
フロー
# モジュール作成
go mod init モジュール名
# ソース解析。ライブラリDLや不要ファイル削除
go mod tidy
# ビルド
go build
# ビルドせず実行(引数を指定する場合、--で区切らないと渡されない)
go run xxx.go -- 引数GoDoc
- 引数はバッククォート
- JavDocみたいに@paramなど分けない
対象 は~のように、先頭に対象を書く- 空行は段落切り替えのマーク
// Add は、2つの整数の和を返します。
//
// この関数は、引数 `a` と `b` を受け取り、それらの合計を計算します。
// 負の数を渡すことも可能です。
//
// 例:
// sum := calculator.Add(1, 2) // sum は 3
func Add(a, b int) int {
return a + b
}Goの日付形式
2006年1月2日で渡す。
Goのtimeパッケージのリファレンスタイム(2006年1月2日)は何の日? #Go - Qiita
リンタとフォーマッタ
VS Codeの拡張機能で十分。
CI/CDとかのチェック時に使う感じか。
リンタはgolangci-lintがよさげか。
色々なリンタを同時に実行でき、設定できる。
golangci-lintの使用方法を学ぶ|golangci-lintを理解する
# フォーマッタ:インストールと実行
go install golang.org/x/tools/cmd/goimports@latest
goimports -l -w .
# リンタインストール
go install honnef.co/go/tools/cmd/staticcheck@latest
staticcheck
go vetサーバーメモ
Client→Proxy(nginx/Apache)→Go(Gin)
基本的にApacheからCGIで呼ぶとかは一般的では無いらしい?
(あるにはあるらしい)
APサーバーはgolangのフレームワークのプロセス単体で動く感じ。
さくらレンタルサーバー上で動かすのは無理っぽい。
(技術的には可能だけど規約的に。プロセス常時動かすのはアカン)
TinyGo
組み込みとか、CloudFlare Workersとか。
ビルドサイズ小さい。
deferクロージャ
goの終了処理を返却する奴
ビルド
同一パッケージ内でエントリポイントを変えてビルドしてもよい。
例えばFiber内にbatchモジュールを作成。
FiberはFiber向けにビルド、batchはbatch向けにビルド。
片方のロジックを再利用できたりする。
メモ
- 型が違うならば比較不可能
- int64 == int32 も駄目
- 基本はパスカル
- 基本的にポインタレシーバーでいい。
- 変更を加えるメソッドはポインタレシーバーを使用
- 読み取り専用のメソッドは値レシーバーを使用
- 大きな構造体のメソッドはコピーコストを避けるためポインタレシーバーを使用
- インタフェースを実装するメソッドは、インタフェースの要件に合わせる