Go語言的字符串類型string
在本質上就與其他語言的字符串類型不同:
-
Java的String、C++的std::string以及Python3的str類型都只是定寬字符序列
-
Go語言的字符串是一個用UTF-8編碼的變寬字符序列,它的每一個字符都用一個或多個字節表示
即:一個Go語言字符串是一個任意字節的常量序列。
Golang的雙引號和反引號都可用於表示一個常量字符串,不同在於:
-
雙引號用來創建可解析的字符串字面量(支持轉義,但不能用來引用多行)
-
反引號用來創建原生的字符串字面量,這些字符串可能由多行組成(不支持任何轉義序列),原生的字符串字面量多用於書寫多行消息、HTML以及正則表達式
而單引號則用於表示Golang的一個特殊類型:rune
,類似其他語言的byte
但又不完全一樣,是指:碼點字面量(Unicode code point),不做任何轉義的原始內容。
#案例 #程序中,單引號的a,A是十進制編碼,可以進行編碼遞增,換成雙引號就會報錯 package main import ( "fmt" "time" ) func worker(id int,c chan int){ for{ fmt.Printf("worker %d run %c\n",id,<-c) } } func chanDemo(){ var channels [10]chan int for i:=0;i<10;i++{ channels[i]=make(chan int) go worker(i,channels[i]) } for i:=0;i<10;i++{ channels[i] <- 'a'+i } for i:=0;i<10;i++{ channels[i] <- 'A'+i } time.Sleep(time.Millisecond) } func main() { chanDemo() }