Pour mon application, peu importe que la chaîne soit lisible par l'homme ou non.
Un moyen courant d'encoder des structures en chaînes consiste à utiliser JSON .
Vous avez certaines limitations, telles que ne pas obtenir toutes les informations (telles que le type spécifique de chaque champ), ne sérialiser que les champs exportés et ne pas gérer les valeurs récursives. Mais c'est un moyen standard simple de sérialiser des données.
Exemple de travail:
package main
import (
"fmt"
"encoding/json"
)
type s struct {
Int int
String string
ByteSlice []byte
}
func main() {
a := &s{42, "Hello World!", []byte{0,1,2,3,4}}
out, err := json.Marshal(a)
if err != nil {
panic (err)
}
fmt.Println(string(out))
}
Donnez cette sortie:
{"Int":42,"String":"Hello World!","ByteSlice":"AAECAwQ="}
S'il s'agit d'une sérialisation "à sens unique" (pour le débogage, la journalisation ou autre), alors fmt.Printf("%#v", var)
est très agréable. (Mise à jour: pour mettre la sortie dans une chaîne au lieu de l’imprimer, utilisez str := fmt.Sprintf("%#v", var)
.
Si la taille compte, vous pouvez utiliser %v
, mais j'aime %#v
_ car il inclura également les noms de champs et le nom du type de structure.
Une troisième variante est %+v
qui inclura les noms de champs, mais pas le type de structure.
Ils sont tous documentés en haut de la documentation fmt .
Si vous avez besoin d'une sérialisation bidirectionnelle, JSON, Gob ou XML sont les options les plus faciles/intégrées de Go, consultez la section packages de codage .
vous pouvez également ajouter une fonction avec ce récepteur struct.
// URL : Sitemap Xml
type URL struct {
Loc string `xml:"loc"`
}
// URLSET : Sitemap XML
type URLSET struct {
URLS []URL `xml:"url"`
}
// converting the struct to String format.
func (u URL) String() string {
return fmt.Sprintf(u.Loc)
}
Donc, imprimer ce champ struct retournera une chaîne.
fmt.Println(urls.URLS)
Associer une fonction String () à une structure nommée nous permet de convertir une structure en chaîne.
package main
import "fmt"
type foo struct {
bar string
}
func (f foo) String() string {
return fmt.Sprintf("Foo Says: %s", f.bar)
}
func main() {
fmt.Println(foo{"Hello World!"})
}
output:
Foo Says: Hello World!