Maison > développement back-end > Golang > URL du maréchal Golang Yaml

URL du maréchal Golang Yaml

WBOY
Libérer: 2024-02-10 13:33:19
avant
558 Les gens l'ont consulté

golang yaml marshal url

L'éditeur PHP Baicao vous présentera aujourd'hui une technologie très pratique : l'analyse yaml et le marshal en golang, et comment traiter les URL. Le Golang étant largement utilisé dans le développement back-end, la compréhension et la maîtrise de ces technologies amélioreront considérablement notre efficacité de développement. Cet article présentera brièvement les concepts de base et l'utilisation de yaml, et démontrera à travers des exemples comment utiliser golang pour analyser et marshaler yaml en même temps, nous discuterons également de la façon de traiter les URL, y compris l'analyse des paramètres d'URL, la construction d'URL, etc. . J'espère qu'en étudiant cet article, je pourrai vous aider à mieux appliquer ces technologies dans des projets réels.

Contenu de la question

J'essaie d'utiliser un fichier de configuration qui a un champ URL et je souhaite marshaler et démarshaler ce type. La documentation indique que je peux exécuter une fonction de marshalling personnalisée.

Dans ce terrain de jeu Golang, vous pouvez voir que la fonction de démarchage personnalisé fonctionne bien, mais pas la fonction de maréchal personnalisé :

type YAMLURL struct {
    *url.URL
}

func (j *YAMLURL) UnmarshalYAML(unmarshal func(interface{}) error) error {
    fmt.Println("custom unmarshal function")
    var s string
    err := unmarshal(&s)
    if err != nil {
        return err
    }
    url, err := url.Parse(s)
    j.URL = url
    return err
}

func (j *YAMLURL) MarshalYAML() (interface{}, error) {
    fmt.Println("custome marshal")
    return j.String(), nil
}
Copier après la connexion

https://go.dev/play/p/24jbjehi1q8

Je ne sais pas pourquoi Merci

Solution de contournement

Le problème est que vous avez écrit l'attribut marshalyaml 方法,因此您可以在指针类型上调用此方法,同时您在 configuration 结构上定义了 uria pour le récepteur du pointeur, en tant que non-pointeur (en fonction du lien du terrain de jeu que vous avez collé).

Par conséquent, vous devez vous convertir uri 属性类型更改为 *yamlurl (而不是 yamlurl ):

type a struct {
    uri *yamlurl `yaml:"url"`
}
Copier après la connexion

Ou définissez marshalyaml comme un récepteur sans pointeur (alias récepteur de valeur) comme ceci :

func (j YAMLURL) MarshalYAML() (interface{}, error) {
    fmt.Println("custome marshal")
    return j.String(), nil
}
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal