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
}