web-dev-qa-db-fra.com

Golang Convert String en io.Writer?

Est-il possible de convertir un string en un type io.Writer Dans Golang?

J'utiliserai cette chaîne dans fmt.Fprintf() mais je ne parviens pas à convertir le type.

21
Acidic

Vous ne pouvez pas écrire dans un string, strings dans Go sont immuables.

Les meilleures alternatives sont les types bytes.Buffer et depuis Go 1.10 les types strings.Builder les plus rapides: ils implémentent io.Writer pour que vous puissiez y écrire et obtenir leur contenu sous la forme d'un string avec Buffer.String() et Builder.String() , ou sous forme d'une tranche d'octets avec Buffer.Bytes() .

Vous pouvez également avoir un string comme contenu initial du tampon si vous créez le tampon avec bytes.NewBufferString() :

s := "Hello"
buf := bytes.NewBufferString(s)
fmt.Fprint(buf, ", World!")
fmt.Println(buf.String())

Sortie (essayez-le sur le Go Playground ):

Hello, World!

Si vous souhaitez ajouter une variable de type string (ou toute valeur de type string), vous pouvez simplement utiliser Buffer.WriteString() (ou - Builder.WriteString() ):

s2 := "to be appended"
buf.WriteString(s2)

Ou:

fmt.Fprint(buf, s2)

Notez également que si vous souhaitez simplement concaténer 2 strings, vous n'avez pas besoin de créer de tampon et d'utiliser fmt.Fprintf() , vous pouvez simplement utiliser le + Pour les concaténer:

s := "Hello"
s2 := ", World!"

s3 := s + s2  // "Hello, World!"

Voir aussi: Golang: formater une chaîne sans imprimer?

Cela peut également être intéressant: Quelle est la différence entre ResponseWriter.Write et io.WriteString?

58
icza