型スイッチを使用した Go での動的型チェック
Go では、通常、型チェックはコンパイル時に静的に行われます。ただし、さまざまなパラメーター型を持つ C 関数を公開するなど、特定のシナリオでは、実行時に変数の型をチェックすることが重要になります。
このニーズに対処するために、Go は型を決定できる型切り替えステートメントを提供します。インターフェース値を動的に変更します。これを使用して、さまざまな型のパラメーターを受け入れる関数を実装する方法を説明します。
2 つの C 関数があるとします。
CURLcode curl_wrapper_easy_setopt_long(CURL* curl, CURLoption option, long param); CURLcode curl_wrapper_easy_setopt_str(CURL* curl, CURLoption option, char* param);
これらの関数を 1 つの Go として公開したいと考えています。次のシグネチャを持つ関数:
func (e *Easy)SetOption(option Option, param interface{})
これには、実行時に param の型をチェックして、呼び出す適切な C 関数を決定する必要があります。これは、タイプ スイッチを使用して実現できます。
func (e *Easy)SetOption(option Option, param interface{}) { switch v := param.(type) { default: fmt.Printf("unexpected type %T", v) case uint64: e.code = Code(C.curl_wrapper_easy_setopt_long(e.curl, C.CURLoption(option), C.long(v))) case string: e.code = Code(C.curl_wrapper_easy_setopt_str(e.curl, C.CURLoption(option), C.CString(v))) } }
このタイプ スイッチでは、interface{} 値パラメータが type キーワードを使用して新しい変数 v に割り当てられます。{} switch ステートメント内のケースは、予期されるパラメータのタイプを表します。 param のタイプがいずれかのケースに一致する場合、対応するコード ブロックが実行されます。この場合、param の型に基づいて適切な C 関数を呼び出します。
デフォルトのケースは予期しない型を処理するために使用され、必要に応じてエラー処理メカニズムに置き換えることができることに注意してください。
型の切り替えを実装することで、さまざまな型のパラメータを処理できる単一の Go 関数を作成でき、呼び出し元に公開される API を簡素化できます。
以上がGo の型スイッチは、C 関数とのインターフェイスの動的型チェックをどのように処理できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。