Maison >développement back-end >Golang >Comment supprimer les marques d'apostrophe/octet des phrases de chaîne lors de la tentative d'analyse de yaml

Comment supprimer les marques d'apostrophe/octet des phrases de chaîne lors de la tentative d'analyse de yaml

WBOY
WBOYavant
2024-02-05 22:45:111166parcourir

"尝试解析

Contenu de la question

Voici un exemple

La bibliothèque d'analyse yaml semble incapable d'imprimer" Ainsi, lorsque j'analyse une phrase avec " 解析一个句子时,go 在它周围添加字节撇号 (', j'ajoute des apostrophes d'octets (')

autour d'elle

Existe-t-il une astuce pour l'imprimer/créer une simple chaîne/chaîne citée sans ajouter d'apostrophes d'octets ?

Exemple de code :

import (
    "fmt"
    "log"

    yaml "gopkg.in/yaml.v3"
)

type X struct {
    Example string `yaml:"some-example"`
}

func main() {
    item := X{
        Example: fmt.Sprint("\"some text\""),
    }

    res, err := yaml.Marshal(item)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Print(string(res))
}

Imprimer some-example: '"some text"'

Vous voulezsome-example:“一些文本”


Réponse correcte


Y a-t-il une astuce pour le faire imprimer/créer une simple chaîne/chaîne entre guillemets sans ajouter d'apostrophes d'octets ?

Veuillez noter que vous imprimez la sortie de yaml.marshal, c'est-à-dire que vous imprimez un document yaml valide et que le yaml n'a rien appelé "apostrophes d'octets". En yaml, une chaîne peut être sans guillemets, entre guillemets doubles ou entre guillemets simples, quoi qu'il en soit, ce sont toutes des chaînes.

# all three are strings 
a: foo bar
b: "foo bar"
c: 'foo bar'

Donc, votre sortie originale

some-example: '"some text"'

est yaml parfaitement valide, ce n'est pas go qui ajoute les guillemets simples, c'est le package ngopkg.in/yaml.v3 qui le fait.

afaict Il n'existe aucun moyen de définir des paramètres globaux pour yaml.encoder yaml.encoder 设置全局设置 使用双引号样式封送每个字符串,但是您可以使用实现 yaml.marshaler 强制 yaml.encoder afin de rassembler chaque chaîne en utilisant le style de guillemets doubles, mais vous pouvez utiliser l'implémentation yaml.marshaler

Force yaml.encoder à toujours afficher toute valeur de ce type personnalisé Double chaîne entre guillemets.

Par exemple :

type doublequotedstring string

func (s doublequotedstring) marshalyaml() (interface{}, error) {
    return yaml.node{
        kind:  yaml.scalarnode,
        style: yaml.doublequotedstyle, // <- this is the relevant part
        value: string(s),
    }, nil
}
https://www.php.cn/link/99701e768d9a09b314e43a1d9e3e9dfa

🎜
some-example: "\"some text\""

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer