兄弟连Go语言培训课程体系设计架构包括了区块链的基础语言Go语言、区块链后端技术体系、区块链公链、区块链分布式应用开发等内容讲解,以及到最后的面试指导和项目实战。课程由清华微软谷歌团队精心打造,历时半年时间共同研发而出。
兄弟连教育Go语言教程(5)字符串
字符串是不可变值类型,内部⽤用指针指向UTF-8字节数组。
•默认值是空字符串""。
•⽤用索引号访问某字节,如s[i]。
•不能⽤用序号获取字节元素指针,&s[i]⾮非法。
•不可变类型,⽆无法修改字节数组。
•字节数组尾部不包含NULL。
runtime.h
structString
{
byte*str;
intgolen;
};
使⽤用索引号访问字符(byte)。
s:="abc"
println(s[0]=='\x61',s[1]=='b',s[2]==0x63)
输出:
truetruetrue
使⽤用"`"定义不做转义处理的原始字符串,⽀支持跨⾏行。
s:=`a
b\r\n\x00
c`
println(s)
输出:
a
b\r\n\x00
c
连接跨⾏行字符串时,"+"必须在上⼀一⾏行末尾,否则导致编译错误。
s:="Hello,"+
"World!"
s2:="Hello,"
+"World!"//Error:invalidoperation:+untypedstring
⽀支持⽤用两个索引号返回⼦子串。⼦子串依然指向原字节数组,仅修改了指针和⻓长度属性。
s:="Hello,World!"
s1:=s[:5]//Hello
s2:=s[7:]//World!
s3:=s[1:5]//ello
单引号字符常量表⽰示UnicodeCodePoint,⽀支持\uFFFF、\U7FFFFFFF、\xFF格式。
对应rune类型,UCS-4。
funcmain(){
fmt.Printf("%T\n",'a')
varc1,c2rune='\u6211','们'
println(c1=='我',string(c2)=="\xe4\xbb\xac")
}
输出:
int32//rune是int32的别名
truetrue
要修改字符串,可先将其转换成[]rune或[]byte,完成后再转换为string。⽆无论哪种转
换,都会重新分配内存,并复制字节数组。
funcmain(){
s:="abcd"
bs:=[]byte(s)
bs[1]='B'
println(string(bs))
u:="电脑"
us:=[]rune(u)
us[1]='话'
println(string(us))
}
输出:
aBcd
⽤用for循环遍历字符串时,也有byte和rune两种⽅方式。
funcmain(){
s:="abc汉字"
fori:=0;i fmt.Printf("%c,",s[i]) } fmt.Println() for_,r:=ranges{//rune fmt.Printf("%c,",r) } } 输出: a,b,c,æ,±,,å,,, a,b,c,汉,字, 兄弟连教育Go语言教程(5)字符串