目录
一、与其它主要编程语言的差异
- string 是数据类型,不是引用或指针类型;
- string 是只读的 byte 切片,len() 函数返回的是它所包含的 byte 数,这个 byte 数和字符串中含有多少个字符是不一样的;
- string 的 byte 数组可以存放任何数据,不仅仅可有存放可见字符如汉字,英文等,还可以用来存放完全不属于可见字符范围的二进制数据也可以存储。
package string
import "testing"
//string类型的长度是 byte 的长度,不是字符的长度
func TestString(t *testing.T) {
//定义个 string
var str string
t.Log(str) //刚刚初始化,s 的值为空字符串
str = "hello"
//英文字符的长度,刚好就是字符的个数
t.Logf("str's length is: %d", len(str)) //str's length is: 5
//string 类型可以存储任何二进制数据,这是"严"字的十六进制
str = "\xE4\xB8\xA5"
t.Log(str) //严
//len() 函数求出来的是 string 的 byte 数,不是字符数,一个汉字刚好占 3 个 byte
t.Logf("str's length is: %d", len(str)) //str's length is: 3
//我们随便写一个十六进制数,看能不能存入 string
str = "\xE4\xBA\xB1\xFF"
//string 可以存放任何十六进制数,虽然乱码,但是确实是可以存储
t.Log(str) //亱�
// string 类型是不可变的 byte 切片,不能修改某个 byte 的值
// str[1] = 3 //can't assign to str[1]
}
二、Unicode 和 UTF8
1、Unicode
Unicode是一种字符集,也叫万国码,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
如果把各种文字编码形容为各地的方言,那么Unicode就是世界各国合作开发的一种语言。
2、UTF8
UTF8是 Unicode 的一种存储实现,就是以字节(8bit)为单位对Unicode进行编码。
package string
import "testing"
//Unicode 和 UFT8 之间的关系
func TestUnicodeAndUtf8(t *testing.T) {
str := "中"
//返回的是 byte 数
t.Log(len(str)) //3
//rune 是 Go 语言中能取出字符串的 unicode 值,这是 Go 语言的一个内置机制
c := []rune(str)
//"中"这个字的 rune 长度为 1
t.Log(len(c)) //1
//"x%" : 是以 16 进制进行输出
t.Logf("中的 unicode is %x", c[0]) //中的 unicode is 4e2d
t.Logf("中的 UTF8 is %x", str) //中的 UTF8 is e4b8ad
}
3、Unicode 和 UFT8之间的的关系
字符 | 中 |
Unicode | ox4e2d |
UFT-8 | 0xe4b8ad |
string / []byte | [0xE4, 0xB8, 0xAD] |
4、字符串转 rune
package string
import "testing"
//字符串转 rune
func TestStringToRune(t *testing.T) {
str := "中华人民共和国"
//将字符串进行 range,得到的一个一个 rune 值
for _, c:= range str {
//%[1]c %[1]x 是指将 第一个参数(是一个 rune 值)同时以 %c 和 %x 来进行格式化
//%c 是已字符的格式进行输出
//%x 是已十六进制来进行输出
t.Logf("%[1]c %[1]x", c)
/*输出结果为:
string_test.go:13: 中 4e2d
string_test.go:13: 华 534e
string_test.go:13: 人 4eba
string_test.go:13: 民 6c11
string_test.go:13: 共 5171
string_test.go:13: 国 56fd
string_test.go:13: 和 548c*/
}
}
三、常用的字符串处理函数
1、strings 包
https://golang.org/pkg/strings
2、strconv 包
https://golang.org/pkg/strconv
3、操作字符串的常用函数
package string
import (
"strings"
"testing"
)
//操作字符串的常用函数
func TestStringFun(t *testing.T) {
str := "A,B,C"
//字符拆分
parts := strings.Split(str, ",")
for _, part := range parts {
t.Logf(part)
/*输出结果为:
string_fun_test.go:14: A
string_fun_test.go:14: B
string_fun_test.go:14: C*/
}
//字符串连接
strNew := strings.Join(parts, "-")
t.Logf(strNew) //A-B-C
}
4、strconv 包的用法
//strconv 包的用法
func TestStrConv(t *testing.T) {
//将整数转为字符串
str := strconv.Itoa(10)
t.Logf("str's value is %s, and it's format is %T", str, str)
//输出结果:
//str's value is 10, and it's format is string
//如果这样写,会报这个编译错误: 1 variable but strconv.Atoi returns 2 values,
//也就是说将字符串转为整数是有两个返回值的,这行将整数转为字符串不一样
//number := strconv.Atoi(str)
if number, err := strconv.Atoi(str); err == nil {
t.Logf("number's value is %d, and it's format is %T", number, number)
//输出结果:
//number's value is 10, and it's format is int
}
}
注:这篇博文是我学习中的总结,如有转载请注明出处:
https://blog.csdn.net/DaiChuanrong/article/details/117968619
上一篇:Go Map
下一篇:Go 函数