一、字符串
1、string(可以给某个变量赋予不同的string值,但是string 本身是不可变的)
peace := "shalom"
peace := "salām"
例
message := "shalom"
c := message[5]
fmt.Printf("%c\n",c)
// message[5] = ‘d’ 加上这句话会报错,字符串不可变
2、Caesar cipher凯撒加密法
对于加密信息,一种简单有效的办法就是把每个字母都移动固定长度的位置,例如:a -> d,b -> e
(1)ROT13(旋转13)是凯撒密码在20世纪的变体。 它会把字母替换成+13后的对应字母
3、Go的内置函数
(1)len是Go语言的一个内置函数。
message := "uv vagreangbany fcnpr fgngvba"
fmt.Println(len(message)) //len返回message所占的byte数
Go有很多内置函数,优点是不需要import
4、UTF-8
Go中的字符串是用UTF-8编码的,UTF-8是Unicode Code Point的几种编码之一
UTF-8是一种有效的可变长度的编码,每个code point可以是8位、16位或32位。
通过使用可变长度编码,UTF-8使得从ASCII的转换变得简单明了,因为ASCII字符与其UTF-8编码的对应字符相同。
UTF-8是万维网的主要字符编码。它是由Ken Thompson 于1992年发明的,他是Go语言的设计者之一
5、ROT13
question := "¿Cómo estás?"
fmt.Println(len(question),"bytes") //15 bytes
本例中,程序访问的是message这个字符串的每个字节(8位),没有考虑多字节的情况(16,32位)
若要支持西班牙语、俄语、汉语等,需把字符解码成rune类型,然后再进行操作
question := "¿Cómo estás?"
fmt.Println(utf8.RuneCountInString(question),“runes”) //12 runes
c,size := utf8.DecodeRuntInString(question)
fmt.Printf("First rune: %c %v bytes",c,size) //First rune: ¿ 2 bytes
使用utf-8包,它可以提供按rune计算字符串长度的方法。
DecodeRuneInString函数会返回第一个字符,以及字符所占的字节的字节数。
所以Go里面的函数可以返回多个值。
6、range
使用range关键字,可以遍历各种集合
question := "¿Cómo estás?"
for i,c := range question {
fmt.Printf("%v %c\n", i, c)
}
//0 ¿
2 C
3 ó
5 m
6 o
7
8 e
9 s
10 t
11 á
13 s
14 ?