目次
Go でのパッケージの動的反復
ホームページ バックエンド開発 Golang Go パッケージ内のメソッドを動的に繰り返すにはどうすればよいですか?

Go パッケージ内のメソッドを動的に繰り返すにはどうすればよいですか?

Nov 16, 2024 pm 04:51 PM

How can I dynamically iterate through methods in a Go package?

Go でのパッケージの動的反復

質問:

Go の初心者として、あなたは次の計算機を構築しています。現在は加算と減算をサポートしています。乗算や除算などの将来の機能を想定しています。しかし、addition.go ファイルとsubtraction.go ファイルの現在のアプローチは冗長であることがわかり、より動的なソリューションを求めています。電卓パッケージ内のすべてのメソッドを見つけて動的に反復処理する方法はありますか?

回答:

残念ながら、Go には組み込みメカニズムが提供されていません。パッケージの内容をイントロスペクトし、そのメソッドを動的に反復処理します。コンパイラには、明示的に参照される実行可能ファイル内の関数と変数のみが含まれます。不完全な可能性のあるシンボルのセットを反復処理することは、Go では有用とは見なされません。

代替解決策:

動的反復の代わりに、配列を使用して保持することができます。操作したい型のオブジェクトを選択し、その配列を反復処理します。このアプローチには、インターフェイスのスライスの作成が含まれます:

type Calc interface {
    First(x int) int
    Second(x int) int
}

var operations []Calc
ログイン後にコピー

その後、具象型のオブジェクトをスライスに追加できます:

operations = append(operations, &calculator.Add{})
operations = append(operations, &calculator.Sub{})
ログイン後にコピー

その後、スライスを反復処理して呼び出します。メソッドを動的に:

for _, operation := range operations {
    fmt.Println(operation.First(x))
    fmt.Println(operation.Second(x))
}
ログイン後にコピー

このアプローチは、動的なイントロスペクションを必要とせずに、パッケージ内の電卓操作を反復する柔軟な方法を提供します。

以上がGo パッケージ内のメソッドを動的に繰り返すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

See all articles