golang 中的引号
前言
go中的单引号',双引号",反引号`,他们用法的区别。
需要先了解字符编码的区别,由来。
单引号
单引号里面只能有一个字符,一般只能用来包裹一个字节的ASCII码字符。他的类型是Golang的一个特殊类型:rune,也就是int32。例如
package main
import "fmt"
func main() {
s := 'A'
fmt.Printf("type : %T, value: %s\n", s, s)
fmt.Printf("type : %T, value: %d\n", s, s)
fmt.Printf("type : %T, value: %c\n", s, s)
}
/*
输出:
type : int32, value: %!s(int32=65)
type : int32, value: 65
type : int32, value: A
*/
双引号
package main
import (
"fmt"
)
func main() {
s := "你Hello"
fmt.Printf("type : %T, value: %s\n", s, s)
fmt.Printf("type : %T, value: %d\n", s[0], s[0])
fmt.Printf("type : %T, value: %c\n", s[0], s[0])
u_s := []rune(s)
fmt.Printf("type : %T, value: %s\n", u_s[0], u_s[0])
fmt.Printf("type : %T, value: %d\n", u_s[0], u_s[0])
fmt.Printf("type : %T, value: %c\n", u_s[0], u_s[0])
}
/*
输出:
type : string, value: 你Hello
type : uint8, value: 228
type : uint8, value: ä
type : int32, value: %!s(int32=20320)
type : int32, value: 20320
type : int32, value: 你
*/
可以看到string类型,我们单独拿一个字符出来是unit8类型也就是byte类型,与上面的单引号int32是不同的。Go中字符串是一个不可变的值类型,内部用指针指向UTF-8编码的字节数组。显然中文不可能由一个字节组成,我们将他转换成int32位之后就可以输出了。
反引号
反引号用来创建原生的字符串字面量,这些字符串可能由多行组成(不支持任何转义序列),相当于一个可以换行的字符串。一般用于SQL语句,html等大段内容,以及正则表达式的使用。
package main
import (
"fmt"
)
func main() {
s := `Hello 123
你好`
fmt.Printf("len : %d\n", len(s))
fmt.Printf("type : %T, value: %s\n", s, s)
fmt.Printf("type : %T, value: %d\n", s[0], s[0])
}
/*
输出:
len : 20
type : string, value: Hello 123
你好
type : uint8, value: 72
*/
显然这种uint8格式的话,中文不能直接切片输出。
golang 中的引号的更多相关文章
- 基础知识 - Golang 中的正则表达式
------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...
- Go_14:GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
- GoLang中 json、map、struct 之间的相互转化
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field).也就是说结构体的 key 对应的首字母 ...
- Golang中的RegExp正则表达式用法指南
------------------------------------------------------------ Golang中的正则表达式 ------------------------- ...
- include包含头文件的语句中,双引号和尖括号的区别是什么?
include包含头文件的语句中,双引号和尖括号的区别是什么? #include <> 格式:引用标准库头文件,编译器从标准库目录开始搜索 尖括号表示只在系统默认目录或者括号内的路径查找 ...
- golang中的race检测
golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...
- ASP中双引号单引号和&连接符使用技巧
ASP中双引号单引号和&连接符使用技巧 一.ASP中处在双引号中的可以是任意的字符.字符串,HTML代码 1.<%response.write ("I am here" ...
- golang中的reflect包用法
最近在写一个自动生成api文档的功能,用到了reflect包来给结构体赋值,给空数组新增一个元素,这样只要定义一个input结构体和一个output的结构体,并填写一些相关tag信息,就能使用程序来生 ...
- Python中的引号用法总结
Python中的引号: 1.表示多行注释--一对三个单引号或双引号表示多行注释 #-*-coding :utf-8-*- #防止乱码,方便在程序中添加中文,把编码统一成UTF-8 from selen ...
随机推荐
- OBS_Classic经典版框架
一,简介 OBS(open boardcast server),是一个用于直播的开源软件. 官方网站:https://obsproject.com/ 代码托管地址:https://github.com ...
- centos默认安装mysql的默认密码
安装centos时选择安装Mysql 服务器 mysql的默认登录密码为空,但是直接登录的时候有报错: [root@localhost bin]# mysql -u root -pEnter pass ...
- django 创建管理员用户
7.2 create 创建管理员用户: python manage.py run server python manage.py createsuperuser password :123456789 ...
- 【原】移动端vue页面点透事件 - 分析与解决
近期项目遇到了vue页面事件被带到下一个页面的问题,也就是我们常说的点透事件,主要表现在android机器上,花了不少时间折腾,简单做下总结~ vue页面之间的切换通过Vue Router的route ...
- 基于JSP开发手机销售购物商城系统
开发环境: Windows操作系统开发工具:Eclipse+Jdk+Tomcat+MySQL数据库 运行效果图: 源码及原文链接:https://javadao.xyz/forum.php?mod=v ...
- 《实战Java高并发程序设计》读书笔记三
第三章 JDK并发包 1.同步控制 重入锁:重入锁使用java.util.concurrent.locks.ReentrantLock类来实现,这种锁可以反复使用所以叫重入锁. 重入锁和synchro ...
- Codeforces Round #622 (Div. 2) A. Fast Food Restaurant
Tired of boring office work, Denis decided to open a fast food restaurant. On the first day he made ...
- 深入理解Java虚拟机(1)
Java内存区域 对于Java程序员来说,在虚拟机的自动内存管理机制下,不再需要为每一个new操作去写配对的delete和free代码,不容易出现内存泄露和内存溢出问题,可以直接交给虚拟机进行管理. ...
- java基础数据类型和处理
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSON; import java.io.*; import j ...
- 「CF1042F」Leaf Sets
传送门 Luogu 解题思路 比较显然的一种做法: 我们把一个点的子树高度抠出来并排序记为 \(L_i\),找到最大的 \(i\) 使得 \(L_{i-1}+L_i\le K\). 于是我们把前 \( ...