Die strings.Join
Funktion akzeptiert nur Strings:
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
Es wäre aber schön, beliebige Objekte übergeben zu können, die eine ToString()
Funktion implementieren .
type ToStringConverter interface {
ToString() string
}
Gibt es so etwas in Go oder muss ich vorhandene Typen wie int
mit ToString-Methoden dekorieren und einen Wrapper herumschreiben strings.Join
?
func Join(a []ToStringConverter, sep string) string
Join
Funktion, dieStringer
Objekte nimmtAntworten:
Hängen Sie eine
String() string
Methode an einen beliebigen benannten Typ an und nutzen Sie alle benutzerdefinierten "ToString" -Funktionen:Spielplatz: http://play.golang.org/p/Azql7_pDAA
Ausgabe
quelle
bin(42).String()
als weiteres Beispiel ist für die Antwort besser.Error() string
hat eine höhere Priorität alsString() string
Stringer
Schnittstelle: golang.org/pkg/fmt/#StringerWenn Sie eine eigene haben
struct
, können Sie eine eigene Funktion zum Konvertieren in einen String haben .quelle
Ein weiteres Beispiel mit einer Struktur:
Seien Sie vorsichtig, wenn Sie es verwenden. Die
Verkettung mit '+' wird nicht kompiliert:
quelle
Ich bevorzuge so etwas wie das Folgende:
quelle
:
(dh nurstring(s)
). Auch wennb
es[]byte
dannstring(b)
viel einfacher ist und dann deinStringRef(b).String()
. Schließlich ist Ihr Beispiel sinnlos, da%s
(im Gegensatz zu%v
) bereits[]byte
Argumente als Zeichenfolgen ohne diestring(b)
normalerweise übliche potenzielle Kopie gedruckt werden .