2016-02-25 10 views
12

Jestem nowicjuszem w golangu. Nie mogę znaleźć żadnego oficjalnego dokumentu, który pokazuje, w jaki sposób scalić wiele żądań na łańcuchu.
Czego spodziewa:
Wejście: "klucz:", "wartość", "Klawisz2:" 100
Wyjście: "Klucz: wartość, klucz2: 100"Jak połączyć wiele ciągów znaków i int w pojedynczy ciąg znaków w golangu?

+2

Możliwy duplikat [Golang: sformatować ciąg bez drukowania?] (Http://stackoverflow.com/questions/11123865/golang-format-a-string-without-printing) – icza

Odpowiedz

23

lubię użyj metody fmt na Sprintf dla tego typu rzeczy. Działa jak normalnie Printf w Go lub C tylko zwraca ciąg znaków. Oto przykład;

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

Go docs dla fmt.Sprintf

+0

ostatni to numer int. Czy mogę użyć% d? –

+0

@RobertYiJiang tak, będę edytować w rzeczywistości. Nie zdawałem sobie sprawy, że zmieniłem typ wejścia tam. – evanmcdonnal

8

Można używać strings.Join, który jest prawie 3x szybciej niż fmt.Sprintf. Jednak może być mniej czytelny.

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

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

strings.Join vs fmt.Sprintf

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

Buffer

Jeśli trzeba scalić wiele strun, bym rozważyć przy użyciu bufora, a nie tych rozwiązań wspomnianych powyżej.

+0

Cóż, jeśli używasz pliku strconv.Itoa, możesz również łączyć łańcuchy z + –

+0

@ColinPitrat Z powodu problemu z kompilatorem go, string.Join z 2 lub 3 elementów używa +, ale powyżej tworzy bajtowy segment dla bardziej wydajne łączenie. Jeśli masz więcej niż dwa elementy do konkatenacji, zdecydowanie zaleca się używanie napisów .Join. – basgys

Powiązane problemy