X(Twitter) Zenn GitHub RSS 共有

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

// 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向けにビルド。
片方のロジックを再利用できたりする。

メモ