La strings.Join
fonction prend uniquement des tranches de chaînes:
s := []string{"foo", "bar", "baz"}
fmt.Println(strings.Join(s, ", "))
Mais ce serait bien de pouvoir passer des objets arbitraires qui implémentent une ToString()
fonction.
type ToStringConverter interface {
ToString() string
}
Y a-t-il quelque chose comme ça dans Go ou dois-je décorer les types existants comme int
avec les méthodes ToString et écrire un wrapper strings.Join
?
func Join(a []ToStringConverter, sep string) string
Join
fonction qui prend desStringer
objetsRéponses:
Attachez une
String() string
méthode à n'importe quel type nommé et profitez de toutes les fonctionnalités personnalisées "ToString":Aire de jeu: http://play.golang.org/p/Azql7_pDAA
Production
la source
bin(42).String()
d'un autre exemple sera meilleur pour la réponse.Error() string
a une priorité plus élevée queString() string
Stringer
interface: golang.org/pkg/fmt/#StringerLorsque vous en avez un
struct
, vous pouvez avoir votre propre fonction de conversion en chaîne .la source
Un autre exemple avec une structure:
Attention lors de son utilisation, la
concaténation avec '+' ne compile pas:
la source
Je préfère quelque chose comme ce qui suit:
la source
:
(c'est-à-dire justestring(s)
). En outre, sib
est[]byte
alorsstring(b)
beaucoup plus simple, puis votreStringRef(b).String()
. Enfin, votre exemple est inutile car%s
(contrairement à%v
) imprime déjà les[]byte
arguments sous forme de chaînes sans la copie potentielle qui le faitstring(b)
habituellement.