如何在golang中将结构体作为带转义字符的纯字符串打印出来?

huangapple go评论98阅读模式
英文:

How to print struct as a plain string with escape characters in golang?

问题

我正在尝试将一个 Golang 结构体作为带有转义字符的字符串打印出来,但是无法实现。

我想要像这样打印我的结构体:

"{\"data\":\"MyName\",\"value\":\"Ashutosh\"}"

这是我尝试过的代码:

package main

import (
	"encoding/json"
	"fmt"
)

type Resp struct {
	Data  string `json:"data"`
	Value string `json:"value"`
}

func main() {

	var data Resp
	data.Data = "Name"
	data.Value = "Ashutosh"

	r, _ := json.Marshal(data)
	fmt.Println("MyStruct: ", string(r))

}

但是它打印出来的结果是这样的:

{"data":"Name","value":"Ashutosh"}

有人可以帮助我得到以下输出吗?

"{\"data\":\"MyName\",\"value\":\"Ashutosh\"}"

英文:

I am trying to print a Golang struct as a string with escape characters, but not able to do that.

I want to print my struct like this:

"{\"data\":\"MyName\",\"value\":\"Ashutosh\"}"

Here is what I have tried.

package main

import (
	"encoding/json"
	"fmt"
)

type Resp struct {
	Data  string `json:"data"`
	Value string `json:"value"`
}

func main() {

	var data Resp
	data.Data = "Name"
	data.Value = "Ashutosh"

	r, _ := json.Marshal(data)
	fmt.Println("MyStruct: ", string(r))

}

But it is printing like this.

{"data":"Name","value":"Ashutosh"}

Can someone help me to get the following output? :

"{\"data\":\"MyName\",\"value\":\"Ashutosh\"}"

答案1

得分: 2

要引用任何字符串,你可以使用strconv.Quote()函数:

fmt.Println("MyStruct:", strconv.Quote(string(r)))

fmt包中还有一个用于引用字符串的动词:%q:

字符串和字节切片(这些动词等效对待):

%q:一个使用Go语法安全转义的双引号字符串

所以你也可以这样打印:

fmt.Printf("MyStruct: %q", string(r))

由于这也适用于字节切片,所以你甚至不需要进行string转换:

fmt.Printf("MyStruct: %q", r)

这些都会输出以下结果(在Go Playground上尝试一下):

MyStruct: "{\"data\":\"Name\",\"value\":\"Ashutosh\"}"
英文:

To quote any strings, you may use strconv.Quote():

fmt.Println("MyStruct:", strconv.Quote(string(r)))

There's also a verb for quoting strings in the fmt package: %q:

> String and slice of bytes (treated equivalently with these verbs):
>
> %q a double-quoted string safely escaped with Go syntax

So you may also print it like this:

fmt.Printf("MyStruct: %q", string(r))

Since this also works for byte slices, you don't even need the string conversion:

fmt.Printf("MyStruct: %q", r)

These all output (try it on the Go Playground):

MyStruct: "{\"data\":\"Name\",\"value\":\"Ashutosh\"}"

huangapple
  • 本文由 发表于 2022年11月25日 18:25:08
  • 转载请务必保留本文链接:https://go.coder-hub.com/74571328.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定