Go /オプションパラメータの複数のコンストラクタ?

qbuffer:

Javaでできるのと同じように、Goに複数のコンストラクター(同じ関数名を持つ)を実装する方法があるかどうか疑問に思いました。別のオプションとして、オプションのパラメーターを持つ1つのコンストラクターのみを使用することもできますが、正確にそれを行う方法はわかりません。

これは私がやろうとしていたことに似ています

type Query struct {
    TagsQuery string
    PageQuery string
}

// First Constructor
func NewQuery(TagsQuery string) Query {
    return Query{
        TagsQuery: TagsQuery,
        PageQuery: "0", // default to first page
    }
}

// Second Constructor
func NewQuery(TagsQuery string, PageQuery string) Query {
    return Query{
        TagsQuery: TagsQuery,
        PageQuery: PageQuery,
    }
}

最初のコンストラクタは引数を1つ取りTagsQuery、デフォルトPageQuery0です。2番目のコンストラクタは2つの引数を取ります:TagsQueryPageQuery

Iain Duncan:

Dave Cheneyは、機能的なオプションを使用してこの問題の解決策を提供しました。

https://dave.cheney.net/2014/10/17/functional-options-for-friendly-apis

したがって、作成される構造体を変更できる関数をいくつでも受け入れることができます。あなたの場合PageQuery、それはオプションのフィールドのためだけにそれを行うことができますが、それは...パラメータなので将来的にはもっと受け入れることができます:

type Query struct {
    TagsQuery string
    PageQuery string
}

// First Constructor
func NewQuery(TagsQuery string, options ...Option) Query {
    query := Query{
        TagsQuery: TagsQuery,
        PageQuery: "0", // default to first page
    }
    // Apply options if there are any, can overwrite default
    for _, option := range options {
        query = option(query)
    }
    return query
}

// Option definition
type Option func(Query) Query

// Function to create Option func to set pageQuery
func WithPageQuery(pageQuery string) Option {
    return func(query Query) Query {
        query.PageQuery = pageQuery
        return query
    }
}

それを呼び出すには:

NewQuery("tags query only")
NewQuery("tags query", WithPageQuery("page query"))

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Goのオプションのパラメーター?

分類Dev

Goのオプションパラメータ?

分類Dev

Goの関数がオプションのパラメーターを処理する方法

分類Dev

Goのコンストラクタ

分類Dev

Goの定数コンテキストで関数の引数(パラメーター)を使用する

分類Dev

可変引数パラメーターをコンストラクターに追加するときにGoでバージョン管理を行う方法は?

分類Dev

Go:インターフェースのオプションメソッド

分類Dev

Goのパラメーター付きのexecコマンド?

分類Dev

goのifステートメントのパラメーターとして関数を使用する

分類Dev

Go関数のパラメーター

分類Dev

パラメータ付きのjfrog goコマンド

分類Dev

Goアプリケーション内で複数のPythonのインスタンスを作成する方法

分類Dev

同じタイプの複数のオプションパラメーターのコンストラクターの選択

分類Dev

Goコンパイラーのウィンドウ設定オプションはありますか?

分類Dev

Goコンストラクタ型

分類Dev

コンパイル済みのGoアプリケーションを実行するには、Go言語ランタイムが必要ですか?

分類Dev

Goで複数のURLパラメーターが指定されたプロセス画像

分類Dev

TypeScriptのクラスコンストラクターのオプションパラメーター

分類Dev

コントローラーの複数のオプションパラメーター

分類Dev

別のGoアプリケーションからGoコンパイラーを実行する方法

分類Dev

クライアントから非トランザクションパイプラインを実行する方法.go-redisのウォッチ関数

分類Dev

Go 1.4.2のコンパイル時の「タイプパンされたポインタの逆参照」エラー

分類Dev

複数のオプションパラメータのHtaccessリライト

分類Dev

Goのユニオンのベストプラクティス

分類Dev

TypeScriptの複数のオプションパラメータ

分類Dev

Go —可変個引数関数パラメーターのパススルー

分類Dev

JavaのVectorクラスにあるようなベクターパッケージ用のGoのremoveElement関数のバージョンはありますか?

分類Dev

go on appengineのコンタクトフォームメールハンドラの例

分類Dev

Muxを使用してGoのオプションのクエリパラメーターを適切に処理するにはどうすればよいですか?

Related 関連記事

  1. 1

    Goのオプションのパラメーター?

  2. 2

    Goのオプションパラメータ?

  3. 3

    Goの関数がオプションのパラメーターを処理する方法

  4. 4

    Goのコンストラクタ

  5. 5

    Goの定数コンテキストで関数の引数(パラメーター)を使用する

  6. 6

    可変引数パラメーターをコンストラクターに追加するときにGoでバージョン管理を行う方法は?

  7. 7

    Go:インターフェースのオプションメソッド

  8. 8

    Goのパラメーター付きのexecコマンド?

  9. 9

    goのifステートメントのパラメーターとして関数を使用する

  10. 10

    Go関数のパラメーター

  11. 11

    パラメータ付きのjfrog goコマンド

  12. 12

    Goアプリケーション内で複数のPythonのインスタンスを作成する方法

  13. 13

    同じタイプの複数のオプションパラメーターのコンストラクターの選択

  14. 14

    Goコンパイラーのウィンドウ設定オプションはありますか?

  15. 15

    Goコンストラクタ型

  16. 16

    コンパイル済みのGoアプリケーションを実行するには、Go言語ランタイムが必要ですか?

  17. 17

    Goで複数のURLパラメーターが指定されたプロセス画像

  18. 18

    TypeScriptのクラスコンストラクターのオプションパラメーター

  19. 19

    コントローラーの複数のオプションパラメーター

  20. 20

    別のGoアプリケーションからGoコンパイラーを実行する方法

  21. 21

    クライアントから非トランザクションパイプラインを実行する方法.go-redisのウォッチ関数

  22. 22

    Go 1.4.2のコンパイル時の「タイプパンされたポインタの逆参照」エラー

  23. 23

    複数のオプションパラメータのHtaccessリライト

  24. 24

    Goのユニオンのベストプラクティス

  25. 25

    TypeScriptの複数のオプションパラメータ

  26. 26

    Go —可変個引数関数パラメーターのパススルー

  27. 27

    JavaのVectorクラスにあるようなベクターパッケージ用のGoのremoveElement関数のバージョンはありますか?

  28. 28

    go on appengineのコンタクトフォームメールハンドラの例

  29. 29

    Muxを使用してGoのオプションのクエリパラメーターを適切に処理するにはどうすればよいですか?

ホットタグ

アーカイブ