2014-01-22 28 views
2

在Ruby中,我可以像bash那樣直接捕獲字符串中的變量。在Go中的字符串字面量中捕獲變量?

SRCDIR = "aaa" 
DSTDIR = "bbb" 

puts "SRCDIR = #{SRCDIR}" 
puts "DSTDIR = #{DSTDIR}" 

這是一個簡單和微小的功能,但非常好讓它感覺像一個shell腳本。如果我必須編寫一個複雜的shell腳本,這會有很大幫助,因爲這消除了替換,連接和格式表達式的需要。

難道有這樣的事情嗎?如果有,如何使用它?

+1

Go的目標不是成爲一種腳本語言。 – Agis

+0

如果您希望生成參數化文本,請查看「文本/模板」包。 –

回答

2

不是沒有格式化字符串;通常的方式做到這一點是fmt.Printffmt.Sprintf

srcdir := "aaa" 
dstdir := "bbb" 

// separated out Sprintf and Println for clarity 
fmt.Println(fmt.Sprintf("SRCDIR = %s", srcdir)) 
fmt.Println(fmt.Sprintf("DSTDIR = %s", dstdir)) 

// could be shortened if you're just printing them 
fmt.Printf("SRCDIR = %s\n", srcdir) 
fmt.Printf("DSTDIR = %s\n", dstdir) 
+1

另外值得注意的是,您可以在字符串中指定索引位置,而不是按照參數完全相同的順序進行格式化。例如 - 'fmt.Printf(「dstdir =%[2] s srcdir =%[1] s」,srcdir,dstdir)' –

0

韋斯說什麼。我應該補充一點,如果你使用的是自定義類型,你可能會定義一個方法,其簽名爲String() string(基本上使它們滿足fmt.Stringer接口),然後將這些類型的實例直接傳遞給fmt包的函數,一個字符串,如fmt.Println()。對此的簡單介紹可以在"Effective Go"中找到。