当前位置: 首页 > news >正文

Golang 单引号、双引号和反引号的概念、用法以及区别

在 Golang(Go 语言)中,单引号 (')、双引号 (") 和反引号 (```) 用于不同类型的字符串和字符表示。以下是它们的概念、用法和区别:

1. 单引号 (')

概念
  • 单引号用于表示 字符(rune 类型)。
  • 一个字符表示一个 Unicode 码点,可以是任何合法的 Unicode 字符,包括 ASCII 字符和非 ASCII 字符。
用法
  • 使用单引号包裹一个字符,如 'A''你'
  • 字符常量在 Go 中是 rune 类型,即 32 位整数,表示一个 Unicode 码点。
示例
package mainimport "fmt"func main() {var ch rune = 'A' // 'A' 是一个字符常量,类型为 runefmt.Printf("%c\n", ch) // 输出: Avar chineseChar rune = '你' // '你' 是一个字符常量,类型为 runefmt.Printf("%c\n", chineseChar) // 输出: 你
}
特点
  • 只允许一个字符。
  • 可以表示任何 Unicode 字符。
  • 通过 rune 类型访问和操作单个字符的 Unicode 值。

2. 双引号 (")

概念
  • 双引号用于表示 字符串(string 类型)。
  • 字符串是一系列字符的序列,可以包含零个或多个字符。
用法
  • 使用双引号包裹一串字符,如 "Hello, World!""你好,世界!"
  • 字符串可以包含转义字符,例如 "\n" 代表换行。
示例
package mainimport "fmt"func main() {var str string = "Hello, World!"fmt.Println(str) // 输出: Hello, World!var chineseStr string = "你好,世界!"fmt.Println(chineseStr) // 输出: 你好,世界!var escapedStr string = "This is a line\nThis is another line"fmt.Println(escapedStr) // 输出:// This is a line// This is another line
}
特点
  • 可以包含多个字符。
  • 支持转义字符。
  • 用于表示动态文本和需要处理的字符串数据。

3. 反引号 (```)

概念
  • 反引号用于表示 原始字符串(raw string literal)。
  • 原始字符串不会处理任何转义字符,内容将按字面值表示。
用法
  • 使用反引号包裹一串字符,如 ``Hello, World!`` 或 ``你好,世界!``。
  • 可以包含多行字符串,并且原样保留换行符和其他格式。
示例
package mainimport "fmt"func main() {var rawStr string = `Hello, World!\nNo escape sequences here.`fmt.Println(rawStr) // 输出: Hello, World!\nNo escape sequences here.var multilineStr string = `This is a line
This is another line`fmt.Println(multilineStr) // 输出:// This is a line// This is another line
}
特点
  • 不支持转义字符。
  • 保留字符串的原始格式,包括换行符和空格。
  • 常用于表示需要保持原样的多行文本或包含大量特殊字符的字符串。

区别总结

特性单引号 (')双引号 (")反引号 (```)
表示单个字符(rune)普通字符串(string)原始字符串(raw string)
转义字符支持不支持支持不支持
多行支持不支持支持转义的换行符支持
用途表示一个 Unicode 码点普通字符串文本保留原始格式的字符串
示例'A', '你'"Hello, World!"``Hello,\n World!``
数据类型runestringstring

使用场景

  • 单引号:用于处理和表示单个字符的场景,例如需要访问或处理单个 Unicode 码点。
  • 双引号:用于大多数文本处理场景,特别是需要转义字符的地方。
  • 反引号:用于需要保持字符串原始格式的场景,适合多行文本或包含特殊字符的文本。
http://www.lryc.cn/news/389575.html

相关文章:

  • linux和mysql基础指令
  • JDK 为什么需要配置环境变量
  • ViewBinding的使用(因为kotlin-android-extensions插件的淘汰)
  • IOS Swift 从入门到精通:ios 连接数据库 安装 Firebase 和 Firestore
  • QT4-QT5(6)-const char* QString 乱码转换
  • 报错:RuntimeError_ cuDNN error_ CUDNN_STATUS_EXECUTION_FAILED
  • 黑马点评项目总结1-使用Session发送验证码和登录login和 使用Redis存储验证码和Redis的token登录
  • 【大模型】Vllm基础学习
  • 使用vue动态给同一个a标签添加内容 并给a标签设置hover,悬浮文字变色,结果鼠标悬浮有的字上面不变色
  • 【ajax实战06】进行文章发布
  • Codeforces Round 954 (Div. 3)(A~E)
  • 基于Java微信小程序同城家政服务系统设计和实现(源码+LW+调试文档+讲解等)
  • [21] Opencv_CUDA应用之使用Haar级联的对象检测
  • CXL:拯救NVMe SSD缓存不足设计难题-2
  • Opencv学习项目6——pyzbar
  • Switch 刷安卓11 (LineageOS 18.1) 大气层双系统图文教程
  • Spring Boot与Spring Batch的深度集成
  • RTSP协议在视频监控系统中的典型应用、以及视频监控设备的rtsp地址格式介绍
  • Kotlin基础——异步和并发
  • 消防认证-防火卷帘
  • SpringBoot3.3集成knif4j-swagger文档方式和使用案例
  • 老年服务与管理实训室:制定教学模式
  • 4、DDD、中台和微服务的关系
  • 【ACM出版,马来西亚-吉隆坡举行】第四届互联网技术与教育信息化国际会议 (ITEI 2024)
  • 走进IT的世界
  • Linux 时区文件编译器 zic【man 8 zic】
  • Springboot下使用Redis管道(pipeline)进行批量操作
  • Vue技巧大揭秘:自定义指令的力量与应用
  • HR人才测评,如何考察想象力?
  • Git命令远程分支的合并和本地分支的同步