2016-02-25 16 views
12

Ben golang'da yeni çıkıyorum. Herhangi bir resmi dokümanı, birden fazla sokmanın dize ile nasıl birleştirileceğini gösteremiyorum.
Girdi: "tuşu:", "değer", "Tuş 2'ye:" Ben bekliyordum ne
, 100
Çıktı: "Anahtar: değeri, anahtar2: 100"Golang'da tek bir dizeye birden çok dizeyi ve int nasıl birleştirilir?

+2

Olası kopya [Golang: yazdırılmadan dize biçimlendirilsin mi?] (Http://stackoverflow.com/questions/11123865/golang-format-a-string-without-printing) – icza

cevap

23

ben mi Bu tür bir şey için fmt'nin Sprintf yöntemini kullanın. Go veya C'deki normal Printf gibi çalışır, yalnızca bir dize döndürür. İşte bir örnek; fmt.Sprintf

+0

sonuncu int numarasıdır. % D kullanabilir miyim? –

+0

@RobertYiJiang evet, bununla birlikte düzenleyeceğim. Buradaki girdinin türünü değiştirdiğimi bilmiyordum. – evanmcdonnal

8

için

output := fmt.Sprintf("%s%s%s%d", "key:", "value", ", key2:", 100) 

Git dokümanlar Sen fmt.Sprintf kıyasla neredeyse 3x hızlıdır strings.Join kullanabilirsiniz. Ancak daha az okunabilir olabilir. Eğer dizeleri bir çok birleştirme gerekiyorsa fmt.Sprintf

BenchmarkFmt-4  2000000   685 ns/op 
BenchmarkJoins-4  5000000   244 ns/op 

Tampon

, ben dikkate alacağını vs

output := strings.Join([]string{"key:", "value", ", key2:", strconv.Itoa(100)}, "") 

https://play.golang.org/p/AqiLz3oRVq

strings.Join gör Yukarıda belirtilen çözümlerden ziyade bir tampon kullanarak.

+0

Eğer strconv.Itoa kullanırsanız, + –

+0

@ ColinPitrat ile dizeleri birleştirebilirsiniz. Git derleyicisindeki bir sorun nedeniyle, 2 veya 3 öğeden oluşan diziler + kullanır, ancak bunun için bir bayt dilimi oluşturur. daha verimli bir birleşme. Birleştirilecek ikiden fazla öğeniz varsa, strings.Join'i kullanmanızı kesinlikle öneririm. – basgys

İlgili konular