Go ECHO で ログを JSON形式、LTSV形式にする

// LoggerミドルウェアをJSON形式で
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
    Format: `{"time":"${time_rfc3339}","method":"${method}","uri":"${uri}","status":${status},"latency_ms":${latency_ms},"remote_ip":"${remote_ip}","error":"${error}"}` + "\n",
}))
// LoggerミドルウェアをLTSV形式で
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
    Format: "time:${time_rfc3339}\tmethod:${method}\turi:${uri}\tstatus:${status}\tlatency_ms:${latency_ms}\tremote_ip:${remote_ip}\terror:${error}\n",
}))
No.2668
10/14 22:40

edit

Go ECHO の Recoverミドルウェア

	// Recoverミドルウェア(panicをキャッチしてログ出力)
	e.Use(middleware.RecoverWithConfig(middleware.RecoverConfig{
		LogLevel: log.ERROR,
	}))
No.2667
10/14 22:37

edit

Goのビルドタグ

● Goのビルドタグとは?

Go のソースコードに「このファイルをどの条件でビルド対象に含めるか」を指定する仕組みです。
複数の環境(OS、アーキテクチャ、機能の有無など)で異なるソースを切り替えるのに使います。

● Goのビルドタグの書き方

//go:build staging

● 例えば以下のビルドタグを設定するとどうなるのか?

//go:build staging

とすると、staging が 有効な場合のみこのファイルが読み込まれます。

● IntelliJ や Goland で設定する

添付ファイル1
go-tags.png ( 114.0 KBytes ) ダウンロード
No.2650
09/10 13:08

edit

添付ファイル

MacにGo をインストールする

● MacにGo をインストールする

brew install go

● GOROOT と GOPATH と を確認します。

go env GOROOT
go env GOPATH

go の環境変数全てを確認する

go env

● gopls(Language Server)のインストール

go install golang.org/x/tools/gopls@latest

goplsがインストールされた場所を確認

ls -la $(go env GOPATH)/bin/gopls

GOPATHのbinディレクトリを確認

echo $(go env GOPATH)/bin

PATHに含まれているか確認

echo $PATH | grep -o "$(go env GOPATH)/bin"
.bash_profile などに追記する
code .bash_profile 

.bash_profile

# goplus
export PATH=$PATH:$(go env GOPATH)/bin

● goplsコマンドの確認

gopls version
golang.org/x/tools/gopls v0.20.0
No.2630
08/07 23:43

edit

Go の New 命名規則

● Go の New 命名規則

・関数名としての NewXxx

New というプレフィックスを持つ関数名は、特定の型や構造体の新しいインスタンスを生成するためのコンストラクタ関数として使われます。

func NewXxx(parameters) *Xxx {
    return &Xxx{...} // Xxx構造体のポインタを返す
}

type person struct {
	height float32
	weight float32
}

func NewPerson(height, weight float32) *person{
	return &person{height: height, weight: weight}
}

func main() {
	p := NewPerson(182.0, 75.5)
	fmt.Println(p) // &{182 75.5}
}

引用: https://qiita.com/gold-kou/items/4494f8b69b8fa53d5e93

・ Newの代わりにCreateは使える?

CreateXxx が使われる場合
CreateXxx は、オブジェクトやリソースを生成・初期化するプロセスがより複雑な場合や、外部システムとの関わりがある場合に使用される傾向があります。例えば、以下のようなケースです:

外部リソースの作成が関与する場合

ファイル、ネットワーク接続、データベースエントリなど。
外部リソースの作成に失敗する可能性があり、エラーを返す必要がある。
生成プロセスが単純ではない場合

内部で複数のステップが必要だったり、リソースの確保や設定が絡む場合。
明確に「作成」という意味を強調したい場合

「新しいインスタンスを返す」以上の動作を表現したいとき。

No.2571
11/22 19:39

edit