Go语言字符串
String是数据类型,不是引用或指针类型
string是只读的byte slice, len函数可以计算它所包含的byte数
string的byte数组可以存放任何数据(中文,英语,emoji,不可见的字符等)

rune关键字,从golang源码中看出,它是int32的别名(-231~231-1),对于byte(-128~127)
注意在golang中
一个数字或英语字符占一个byte,1个rune
一个汉字占3个byte,1个rune
一个emoji占4byte,1个rune

var s string
t.Log(s)
s="hello"
t.Log(len(s))   // 5

s="?"   								// 字符串存emoji
t.Log(len(s))    						//输出byte 数, emoji是4个bytes
t.Logf("%x, %x, %x, %x",s[0], s[1], s[2], s[3])	// f0, 9f, 98, 8a
t.Logf("? UTF8 %x", s) 	// ? UTF8 f09f988a

// Go语言的rune
s="中"
t.Log("中的长度为:", len(s)) 	// 中的长度为: 3  byte [0xe4, 0xb8, 0xad]
c:=[]rune(s)   						// rune  int32   0xe4b8ad
t.Log("rune:", len(c))     	// rune: 1
t.Logf("中 Unicode %x", c[0])	// 中 Unicode 4e2d
t.Logf("中 UTF8 %x", s)	// 中 UTF8 e4b8ad

// range 遍历的是Unicode (rune格式)
func TestStringToRune(t *testing.T){
	s := "我很帅"
	for _, c := range s{
		t.Logf("%[1]c %[1]x", c)
	}
}
// 我 6211  很 5f88   帅 5e05