You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中如何实现字符串变量的非转义获取与输出?

如何在Go中输出字符串变量的原始转义字符?

嘿,这个问题我之前在写Go代码的时候也踩过坑!当你用双引号定义字符串"abc\tdef"并存在变量里时,Go其实已经把\t解析成了制表符,直接用fmt.Println输出自然会显示成空格。想要把变量里的字符串以原始转义形式输出,有两个实用的办法:

方法一:使用strconv包的Quote系列函数

Go标准库的strconv包提供了QuoteToASCII和Quote函数,能把字符串转换成带双引号的原始转义格式,我们只需要去掉首尾的引号就能得到想要的结果:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    s := "abc\tdef"
    // 获取带双引号的转义字符串,比如会返回 "\"abc\\tdef\""
    quotedStr := strconv.QuoteToASCII(s)
    // 切片去掉首尾的双引号
    rawEscapeStr := quotedStr[1 : len(quotedStr)-1]
    fmt.Println(rawEscapeStr) // 输出:abc\tdef
}

QuoteToASCII会把所有非ASCII字符和转义序列都转换成对应的ASCII转义形式,完全符合我们要的“非转义输出”需求;如果不需要处理非ASCII字符,用strconv.Quote也可以。

方法二:手动遍历替换特殊字符

如果需要更灵活的控制(比如只处理特定的转义字符),可以自己遍历字符串,把特殊字符替换成对应的转义字符串:

package main

import (
    "fmt"
    "strings"
)

// 自定义转义函数,处理常见的特殊字符
func escapeRawStr(s string) string {
    var sb strings.Builder
    for _, char := range s {
        switch char {
        case '\t':
            sb.WriteString(`\t`)
        case '\n':
            sb.WriteString(`\n`)
        case '\r':
            sb.WriteString(`\r`)
        case '"':
            sb.WriteString(`\"`)
        case '\\':
            sb.WriteString(`\\`)
        // 可以根据需要添加更多特殊字符的处理
        default:
            sb.WriteRune(char)
        }
    }
    return sb.String()
}

func main() {
    s := "abc\tdef"
    fmt.Println(escapeRawStr(s)) // 输出:abc\tdef
}

这个方法的优势是可以自定义要处理的转义字符,避免处理不需要的内容,但需要自己维护所有要替换的特殊字符列表。

小提示

如果是还未定义变量的场景,直接用反引号`abc\tdef`定义字符串变量,就能直接得到不被Go解析的原始内容,后续直接输出即可,不需要额外处理~

内容的提问来源于stack exchange,提问作者Cloud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:58:23