Golang Go语言中处理 yaml 时, 如何转义单引号, 双引号?

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中处理 yaml 时, 如何转义单引号, 双引号?

#sample.yml
single: |
a single quote’
double: |
a double quote"

// main.go
package main

import (
	"html/template"
	"io/ioutil"
	"log"
	"os"

	"gopkg.in/yaml.v2"
)

const Template = `{{ .Single}}
---
{{ .Double}}`

type Sample struct {
	Single string `yaml:"single"`
	Double string `yaml:"double"`
}

func main() {
	file, err := ioutil.ReadFile("sample.yml")
	if err != nil {
		log.Fatal(err)
	}
	s := new(Sample)
	err = yaml.Unmarshal(file, s)
	if err != nil {
		log.Fatal(err)
	}

	t, err := template.New("s").Parse(Template)
	if err != nil {
		log.Fatal(err)
	}
	err = t.Execute(os.Stdout, s)
	if err != nil {
		log.Fatal()
	}
}

打印出来的是 ' 这样的字符.

如果想要保留原始的 ' " , 要如何做呀?

$ go run ./main.go
a single quote'

a double quote"


更多关于Golang Go语言中处理 yaml 时, 如何转义单引号, 双引号?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

更多关于Golang Go语言中处理 yaml 时, 如何转义单引号, 双引号?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


type Sample struct {
Single template.HTML yaml:"single"
Double template.HTML yaml:"double"
}

你这代码 和 yaml 没半毛钱关系 是 template 干的

import “html/template” => import “text/template”

在Golang中处理YAML文件时,转义单引号和双引号的需求通常源自于需要在YAML字符串中包含这些字符而不破坏YAML的结构或语法。YAML本身对单引号和双引号的使用有特定的规则,以下是处理这些字符的几种方法:

  1. 双引号包裹字符串:在YAML中,你可以使用双引号来包裹整个字符串,这样可以在字符串内部直接使用单引号而无需转义。例如:

    key: "This is a 'single quote' and this is a double \"quote\"."
    
  2. 单引号包裹字符串:类似地,使用单引号包裹字符串时,可以在字符串内部直接使用双引号而无需转义。但注意,单引号内的单引号需要转义。例如:

    key: 'This is a double "quote" and this is an escaped \'single quote\'.'
    
  3. 使用反斜杠转义:在双引号包裹的字符串中,你可以使用反斜杠(\)来转义双引号或单引号。例如:

    key: "This is an escaped \"double quote\" and an escaped 'single quote'."
    

在Golang代码中处理YAML时,这些规则同样适用。你只需确保在构建或解析YAML字符串时遵循这些规则即可。使用像gopkg.in/yaml.v2这样的YAML库可以方便地处理YAML数据的编码和解码。确保在编码YAML数据前,字符串已经按照上述规则进行了适当的转义。

回到顶部