-1

aws sdk で遊んでいるだけです。さまざまなタイプのリソースをリストするとき、以下の例の 2 つのような非常によく似た機能がたくさんある傾向があります。paramとして渡されたものに応じて特定の型を返す1つの汎用関数としてそれらを書き直す方法はありますか?

何かのようなもの:

func generic(session, funcToCall, t, input) (interface{}, error) {}

現在、私はこれを行う必要があります(機能は同じで、型が変わるだけです):

func getVolumes(s *session.Session) ([]*ec2.Volume, error) {

    client := ec2.New(s)

    t := []*ec2.Volume{}
    input := ec2.DescribeVolumesInput{}

    for {
        result, err := client.DescribeVolumes(&input)
        if err != nil {
            return nil, err
        }

        t = append(t, result.Volumes...)

        if result.NextToken != nil {
            input.NextToken = result.NextToken
        } else {
            break
        }
    }
    return t, nil
}

func getVpcs(s *session.Session) ([]*ec2.Vpc, error) {

    client := ec2.New(s)

    t := []*ec2.Vpc{}
    input := ec2.DescribeVpcsInput{}

    for {
        result, err := client.DescribeVpcs(&input)
        if err != nil {
            return nil, err
        }

        t = append(t, result.Vpcs...)

        if result.NextToken != nil {
            input.NextToken = result.NextToken
        } else {
            break
        }
    }
    return t, nil
} 
4

2 に答える 2

0

サードパーティ API のプロキシは、go で実装するのが非常に簡単です。これが endly e2e テスト ランナーAWS プロキシで実装された方法です。

リフレクション パフォーマンスの価格が問題にならない限り、AWS API はプロキシの最適な候補であると言えます。

kubernetesのような他のサードパーティ API は、はるかに困難ですが、リフレクションとコード生成の組み合わせである go を使用してプロキシするのは非常に簡単です。

于 2019-05-12T22:44:33.960 に答える