Go语言快速入门6|青训营

44 阅读2分钟

一、字符串

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 ?