2015-03-31 46 views
1

我正在向AWS進行API調用,以使用Golang SDK獲取AMI的列表。 DescribeImages函數需要DescribeImagesInput。我只想看到我自己的AMI,所以我的代碼是這樣做的:更好的初始化

// Build input 
self := "self" 
ownerSelf := []*string{&self} 
ownImages := &ec2.DescribeImagesInput{ 
    Owners: ownerSelf, 
} 

// Call the DescribeImages Operation 
resp, err := svc.DescribeImages(ownImages) 
if err != nil { 
    panic(err) 
} 

像這樣的建築輸入是非常醜陋的。我相信有一種更好的技術,但作爲Golang n00b,我不知道。什麼是更好的方法?

回答

2
縮短,雖然

你不能拿任何比這更短:

self := "self" 
ownImages := &ec2.DescribeImagesInput{Owners: []*string{&self}} 

或者在同一行(不self串VA可變結構):

ownImages := &ec2.DescribeImagesInput{Owners: []*string{&[]string{"self"}[0]}} 

(這裏會發生什麼事是我創建了一個[]string片一個元素"self",指數的唯一因素,並採取它的地址,並使用這個值來初始化所需[]*string

什麼你可以做的就是創建一個輔助功能,構建了string指針切片爲您提供:

func sp(es ...string) []*string { 
    s := make([]*string, len(es)) 
    for i := range es { 
     s[i] = &es[i] 
    } 
    return s 
} 

這樣,delcaration變爲:

ownImages = &ec2.DescribeImagesInput{Owners: sp("self")} 

Go Playground上試試。

0

我不知道有多少更容易接受這個,但它也應該這樣做:

self := "self" 
resp, err := svc.DescribeImages(
    &ec2.DescribeImagesInput{ 
     Owners: []*string{&self}, 
    }, 
} 
if err != nil { 
    panic(err) 
} 

這當然可以在可讀性成本IMO

self := "self" 
resp, err := svc.DescribeImages(&ec2.DescribeImagesInput{Owners:[]*string{&self}}} 
if err != nil { 
    panic(err) 
}