字串
Go語言中的字串以原生資料型別出現。 Go 語言裡的字串的內部實現使用UTF-8編碼。 字串的值為雙引號(")中的內容,可以在Go語言的原始碼中直接新增非ASCII碼字元
GO語言中字串是用雙引號包裹的
GO語言中單引號包裹的是字元
// 字串
s := "Hello 中國"
// 單獨的字母、漢字、符合表示一個字元
c1 := 'h'
c2 := '1'
c3 := '中'
// 位元組:1位元組=8Bit(8個二進位制位)
// 1個字元'A'=1個位元組
// 1個utf8編碼的漢字'中'= 一般佔3個位元組
字串轉義符
轉義符 含義
\r 回車符(返回行首)
\n 換行符(直接跳到下一行的同列位置)
\t 製表符
' 單引號
" 雙引號
\ 反斜槓
字串的常用操作
方法 介紹
len(str) 求長度
+或fmt.Sprintf 拼接字串
strings.Split 分割
strings.contains 判斷是否包含
strings.HasPrefix,strings.HasSuffix 字首/字尾判斷
strings.Index(),strings.LastIndex() 子串出現的位置
strings.Join(a[]string, sep string) join操作
package main
import (
"fmt"
"strings"
)
// 字串
func main(){
// \ 本來是具有特殊含義的,告訴程式\就是一個單純的\
path := "\"E:\\36期Python全棧開發資料\\Administrator(8E5370323193)\\預習(2)\""
path1 := "'E:\\36期Python全棧開發資料\\Administrator(8E5370323193)\\預習(2)'"
fmt.Println(path)
fmt.Println(path1)
s := "I'm ok"
fmt.Println(s)
// 多行的字串
s2 := `
世情薄
人情惡
雨送黃昏花易落
`
fmt.Println(s2)
s3 := `E:\36期Python全棧開發資料\Administrator(8E5370323193)\預習(2)`
fmt.Println(s3)
// 字串相關操作
fmt.Println(len(s3))
// 字串拼接
name := "理想"
world := "遠大"
ss := name + world
fmt.Println(ss)
ss1 := fmt.Sprintf("%s%s", name, world)
// fmt.Printf("%s%s", name, world)
fmt.Println(ss1)
// 分割
ret := strings.Split(s3, "\\")
fmt.Println(ret)
// 包含
fmt.Println(strings.Contains(ss, "理想"))
// 字首
fmt.Println(strings.HasPrefix(ss, "理想"))
// 字尾
fmt.Println(strings.HasSuffix(ss, "理想"))
s4 := "abcded"
fmt.Println(strings.Index(s4, "c"))
fmt.Println(strings.LastIndex(s4, "c"))
fmt.Println(strings.Index(s4, "d"))
fmt.Println(strings.LastIndex(s4, "d"))
// 拼接
fmt.Println(strings.Join(ret, "+"))
}
byte和rune型別
字元用單引號(’)包裹起來
Go 語言的字元有以下兩種:
- uint8型別,或者叫 byte 型,代表了ASCII碼的一個字元。
- rune型別,代表一個 UTF-8字元。rune型別實際是一個int32
字串底層是一個byte陣列,可以和[]byte型別相互轉換。字串是不能修改的 字串是由byte位元組組成,所以字串的長度是byte位元組的長度。 rune型別用來表示utf8字元,一個rune字元由一個或多個byte組成。
修改字串
要修改字串,需要先將其轉換成[]rune或[]byte,完成後再轉換為string。無論哪種轉換,都會重新分配記憶體,並複製位元組陣列。
型別轉換
強制型別轉換的基本語法如下:
T(表示式)
其中,T表示要轉換的型別。表示式包括變數、複雜運算元和函式返回值等.
package main
import (
"fmt"
)
func main() {
s := "Hello 中國"
// len()求的是byte位元組的數量
n := len(s)
fmt.Println(n)
// for i := 0; i < len(s); i++ {
// fmt.Println(s[i])
// fmt.Printf("%c\n", s[i]) // %c:字元
// }
// 字串修改
s2 := "白蘿蔔" // [白 蘿 卜]
s3 := []rune(s2) // 把字串強制轉換成了一個rune切片
s3[0] = '紅' // 單引號表示字元
fmt.Println(string(s3)) // 把rune切片強制轉換成字串
c1 := "紅"
c2 := '紅' // rune(int32)
fmt.Printf("c1:%T c2:%T\n", c1, c2) // c1:string c2:int32
c3 := "H"
c4 := 'H'
c5 := byte('H')
fmt.Printf("c3:%T c4:%T\n", c3, c4) // c3:string c4:int32
fmt.Printf("c4:%d\n", c4) // c4:72
fmt.Printf("c5:%T\n", c5) // c5:uint8
// 型別轉換
n1 := 10 // int
var f float64
f = float64(n1)
fmt.Println(f)
fmt.Printf("%T\n", f) // float64
}