Go语言中的string知识点
1.Go语言String的本质就是一个[]byte,所以他们之间可以互相转换,byte数组的长度就是字符串的长度。
func StringTest1() {
str := "Hello,World"
a := str[0]
b := str[1]
fmt.Printf("a=%c\n", a)
fmt.Printf("b=%c\n", b)
}
结果
a=H
b=e
str=Mello,World
2.字符串的值一旦指定,就不能进行修改。如果想修改,则可以先将字符串装换成slice。
//当试图去修改str时候
str[] = 'M'
会出现如下错误提示
func StringTest1() {
str := "Hello,World"
a := str[]
b := str[]
fmt.Printf("a=%c\n", a)
fmt.Printf("b=%c\n", b) var byteSlice []byte
byteSlice = []byte(str)
byteSlice[] = 'M'
str = string(byteSlice)
fmt.Printf("str=%s\n", str)
}
结果
a=H
b=e
str=Mello,World
3.rune表示utf8的字符,一个rune字符由一个或多个byte组成。
rune和字符串长度之间是什么肥四?可以参考下面的例子:
func StringTest2() { str2 := "Hello,世界" var str2ByteSlice []byte
str2ByteSlice = []byte(str2) var str2RuneSlice []rune
str2RuneSlice = []rune(str2) fmt.Printf("strLen=%v\n",len(str2) )
fmt.Printf("str2ByteSlice=%v\n",len(str2ByteSlice) )
fmt.Printf("str2RuneSlice=%v\n",len(str2RuneSlice) ) for i:=;i<len(str2RuneSlice);i++{
var b = str2RuneSlice[i]
fmt.Printf("str2RuneSlice[%d]=%c\n" ,i,b)
}
结果是什么?
strLen=
str2ByteSlice=
str2RuneSlice=
从结果看到
①字符串的长度和byte切片的长度是一致的
②字符串的长度要比rune切片的长度大,说明一个中文字符需要占用多个byte,这里是就是3个,所以才有后面 str2RuneSlice = 8这个结果
进而我们可以遍历这个rune切片,追加下面代码
for i:=;i<len(str2RuneSlice);i++{
var b = str2RuneSlice[i]
fmt.Printf("str2RuneSlice[%d]=%c\n" ,i,b)
}
结果
str2RuneSlice[]=H
str2RuneSlice[]=e
str2RuneSlice[]=l
str2RuneSlice[]=l
str2RuneSlice[]=o
str2RuneSlice[]=,
str2RuneSlice[]=世
str2RuneSlice[]=界
Go语言中的string知识点的更多相关文章
- c语言中的string
1. strlen(char const* s); 函数传入的是c风格字符串(即以‘\0’结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'. 2. str ...
- C语言中的string.h中的内存字符串处理函数
转载请注明出处:http://blog.csdn.net/zhubin215130/article/details/8993403 void *memcpy(void *dest, const voi ...
- C语言中string char int类型转换
C语言中string -- ::) 转载 ▼ 标签: 操作符 int char c语言 类型转换 分类: C/Cpp ,char型数字转换为int型 "; printf(]-');//输出结 ...
- c语言中的scanf在java中应该怎么表达,Scanner类。
1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...
- c语言中time相关函数
工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time ...
- C语言中system()函数的用法总结(转)
system()函数功能强大,很多人用却对它的原理知之甚少先看linux版system函数的源码: #include <sys/types.h> #include <sys/wait ...
- Java 语言中 Enum 类型的使用介绍
Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常 ...
- C语言中static关键字的作用
static的作用(精辟分析) 在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加sta ...
- C语言中static作用
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有 ...
随机推荐
- angular打包后路由和文件路径不对
base href换成如下script标签 <!-- <base href="/"> --> <script> document.write(' ...
- iOS----------Xcode9无线调试教程
软硬件要求: - Xcode 9.0 beat 及以上版本 - macOS 10.12.5 及以上版本 - iOS 11.0 beat 及以上版本 网络连接要求 - 电脑和设备处于同一 Wifi 环境 ...
- Tomcat 参数配置相关
Tomcat参数配置相关 by:授客 QQ:1033553122 目的: 对Tomcat配置的点滴学习总结,主要目的在于分析Tomcat与性能相关的一些参数设置,以便性能调优时选择最优配置 环境: ...
- TabLayout您可能不知道的实用用法
一.修改点击的动画 函数:setUnboundedRipple 这是默认的点击的动画 我们用代码修改一下: mGlueTabLayout.setUnboundedRipple(true); 这是之后的 ...
- eclipse如何修改android工程的包名?
在我们android项目开发到一定的程度时由于需要,我们必须修改一下工程的包名,以便更好的发布我们的项目.但是在这个过程中有时候修改好了之后会出现一些错误.下面由小编一步步教你如何更改包名,和解决出现 ...
- spring学习总结——高级装配学习四(运行时:值注入、spring表达式)
前言: 当讨论依赖注入的时候,我们通常所讨论的是将一个bean引用注入到另一个bean的属性或构造器参数中.bean装配的另外一个方面指的是将一个值注入到bean的属性或者构造器参数中.在没有学习使用 ...
- MongoDB 基本操作和聚合操作
一 . MongoDB 基本操作 基本操作可以简单分为查询.插入.更新.删除. 1 文档查询 作用 MySQL SQL MongoDB 所有记录 SELECT * FROM users; db ...
- Ubuntu 把最小化、最大化和关闭按钮放到右边
1.按下"Ctrl+Alt+T"或者"ALT+F2"调出终端 2.输入"gconf-editor",回车.如果未安装gconf-editor ...
- Server 2008 R2多用户远程桌面连接授权,解决120天过期问题
在工作中,我们往往需要远程服务器,经常会遇到以下这两个麻烦事. 一.远程桌面的连接数限制,超出系统就会提示超过连接数. 二.远程桌面连接时,同一个用户不能同时远程2个桌面连接. ----------- ...
- 持续代码质量管理-SonarQube-7.3简单使用
安装了SonarQube以及Sonar Scanner之后,就需要那代码检测了.当然为了方便我们使用已有现成的demo,知道到对应的git地址下载即可. 1. sonar-examples下载 htt ...