ネットワーク経由で呼び出される Golang 関数をデバッグするにはどうすればよいですか? 2 つの方法があります。 ログを使用する: log.Printf ステートメントを追加して、関数呼び出し、戻り結果、またはエラーをログに記録します。トレースの使用: -tags go.net.trace フラグを有効にして、関数呼び出し、戻り結果、およびスタック トレース情報を含むトレース データを生成します。
#ネットワーク経由で呼び出される Golang 関数をデバッグするにはどうすればよいですか?
分散システムを開発する場合、ネットワーク経由で呼び出される関数のデバッグは非常に困難な場合があります。 Golang 開発者には、主に 2 つのアプローチがあります。
ロギングの使用
ロギングは、ネットワーク呼び出しをデバッグする最も速くて簡単な方法です。関数呼び出しとその戻り結果またはエラーをログに記録するには、関数に log.Printf
ステートメントを追加します。
func MyFunction(a, b int) (int, error) { log.Printf("Calling MyFunction with a=%d, b=%d", a, b) result, err := ... log.Printf("MyFunction returned result=%d, err=%v", result, err) return result, err }
Use tracing
提供されるトレースにより、より詳細な情報が得られますが、設定がより複雑になる場合があります。トレース データには、関数呼び出し、戻り結果、関連するスタック トレースに関する情報が含まれます。
Golang でトレースを有効にするには、-tags go.net.trace
フラグを go run
コマンド ラインに追加します。
go run -tags go.net.trace my_program.go
次に、トレース ツールを使用して追跡データを表示できます。
trace serve /path/to/trace_file.json
実際的なケース
マイクロサービス アプリケーションに GetUser
関数があるとします。この機能は、ネットワークを介してリモート ユーザー サービスからユーザー情報を取得します。以下は、ログとトレースを使用してこの関数をデバッグする例です。
ログの使用
次のログ ステートメントを GetUser
関数に追加します。 :
func GetUser(id int) (*User, error) { log.Printf("Calling remote user service to get user with id=%d", id) user, err := callRemoteUserService(id) log.Printf("Remote user service returned user=%+v, err=%v", user, err) return user, err }
アプリケーションを実行して GetUser
関数を呼び出すと、コンソールに次のログ出力が表示されます:
Calling remote user service to get user with id=123 Remote user service returned user={ID: 123, Name: "John Doe"}, err=<nil>
トレースの使用
コマンド ラインでトレースを有効にして、アプリケーションを実行します。関数呼び出しが完了すると、トレース ファイルが生成されます。 trace
ツールを使用して、このファイルを表示します:
trace serve trace_file.json
トレース データには、GetUser
関数と関連するスタック トレースに関する情報が含まれます。例:
{ "traceEvents": [ { "ph": "X", "pid": 1234, "tid": 5678, "name": "callRemoteUserService", "args": { "id": 123 } } ] }
ロギングとトレースを組み合わせて使用すると、ネットワーク経由で呼び出される Golang 関数を効率的にデバッグできるため、開発とトラブルシューティングのプロセスが高速化されます。
以上がネットワーク経由で呼び出される Golang 関数をデバッグするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。