ホームページ  >  記事  >  バックエンド開発  >  Golang の別のモジュールから関数をオーバーライドする

Golang の別のモジュールから関数をオーバーライドする

王林
王林転載
2024-02-14 18:15:10576ブラウズ

从 Golang 中的另一个模块覆盖函数

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")
}

回避策

解決策は、別のモジュールに showperson メソッドを実装することです。personapiservicer インターフェイスを実装する新しい型を作成し、独自の showperson メソッドの実装を提供する必要があります。

このコードをモジュール b で実行すると機能し、モジュール a で定義された API 呼び出しの応答を変更できるようになります。

リーリー

以上がGolang の別のモジュールから関数をオーバーライドするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。