php エディタ Xigua は、Golang の別のモジュールから関数をオーバーライドするという興味深いトピックを紹介します。 Golang では、モジュール設計が一般的なプログラミング パターンであり、コードの保守と拡張が容易になります。関数のオーバーライドは、あるモジュールの関数を別のモジュールでオーバーライドして、カスタマイズされた動作を実現できる強力な機能です。この記事では、オーバーライド機能の使い方やメリット、注意点について詳しく解説します。この興味深いトピックを一緒に探ってみましょう!
golangで別モジュールで作成した関数を上書きするにはどうすればよいですか?
モジュール a
モジュールには newpersonapiservice 関数があります。完全なコードは次のとおりです。
リーリーモジュール b
別のモジュールで、この newpersonapiservice をオーバーライドしたいと考えています。
次のようにすることで、他のモジュールでこの関数を呼び出すことができます:
リーリーただし、関数をオーバーライドしようとすると、コンパイル エラーが発生し、openapi の型を解決できません。これが私がやろうとしていることです:
リーリー以下はコンパイル エラーの図です
###その他の情報:### モジュール b がモジュール a を正しく参照していると思います。 モジュール a の go.mod ファイルの内容は次のとおりです:
リーリーモジュール b の go.mod ファイルの内容は次のとおりです:
package openapi import ( "context" "errors" "net/http" ) // personapiservice is a service that implements the logic for the personapiservicer // this service should implement the business logic for every endpoint for the personapi api. // include any external packages or services that will be required by this service. type personapiservice struct { } // newpersonapiservice creates a default api service func newpersonapiservice() personapiservicer { return &personapiservice{} } // showperson - detail func (s *personapiservice) showperson(ctx context.context) (implresponse, error) { // todo - update showperson with the required logic for this service method. // add api_person_service.go to the .openapi-generator-ignore to avoid overwriting this service implementation when updating open api generation. //todo: uncomment the next line to return response response(200, person{}) or use other options such as http.ok ... //return response(200, person{}), nil //todo: uncomment the next line to return response response(0, error{}) or use other options such as http.ok ... //return response(0, error{}), nil return response(http.statusnotimplemented, nil), errors.new("showperson method not implemented") }回避策
このコードをモジュール b で実行すると機能し、モジュール a で定義された API 呼び出しの応答を変更できるようになります。
リーリー以上がGolang の別のモジュールから関数をオーバーライドするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。