Go 字符串 (string)


字符串類型為 string,使用雙引號或者反引號包起來

字符串形式

反引號

當使用反引號時不會對字符串進行轉義,並可以包含多行文本

示例:

package main

import "fmt"

func main() {
	a := `
hello
world
!
	`
	b := `hello \n world`
	fmt.Println(a)
	fmt.Println(b)
}

輸出結果:


hello
world
!
        
hello \n world

雙引號

當使用雙引號時,只能通過 \n 進行換行
示例:

package main

import "fmt"

func main() {
	a := "hello \n world"
	fmt.Println(a)
}

輸出結果:

hello 
 world

切片

一個字節

如果直接使用索引進行取值,會取到一個字節
示例:

package main

import (
	"fmt"
)

func main() {
	a := "abc"
	for i := 0; i < len(a); i++ {
		fmt.Printf("%v, %T\n", a[i], a[i])
	}
}

輸出結果:

97, uint8
98, uint8
99, uint8

多個字節

如果通過切片取出來的還是字符串,即使只取了一個字節也是一個字節的字符串
示例:

package main

import (
	"fmt"
)

func main() {
	a := "abc"
	for i := 0; i < len(a); i++ {
		fmt.Printf("%v, %T\n", a[i: i+1], a[i: i+1])
	}
}

輸出結果:

a, string
b, string
c, string

不可修改

Go 中字符串類型是不能修改的,多個字符串低層都可以共用一段內存,這使得復制字符串、生成子串的成本都非常低

修改

有兩種方式可以改變字符串值:

1. 重新賦值

新開辟一段內存存放新的字符串

func main() {
	a := "hello world"
	fmt.Println(a)
	a := "Hello world"
	fmt.Println(a)
}

2. 先轉換為切片,修改之后再改回來

注意:如果要修改像中文字符之類超過 3 個字節的字符,需要轉換為 rune 而不是 byte
關於 rune 和 byte <- 點擊查看
示例:

func main() {
	a := "hello world"
	b := []rune(a)
	b[0] = 'H'
	a = string(b)
	fmt.Printf("%v", a)
}

遍歷

由於 len(string) 獲得的是字符串的字節數,所以直接通過長度遍歷遍歷的是字節數,超過 1 字節的字符無法正常遍歷
示例:

func main() {
	a := "你好 world"
	for i := 0; i < len(a); i ++ {
		fmt.Printf("%c - %T\n",a[i],  a[i])
	}
}

遍歷的是每個字節

for range

通過 for range 遍歷可以正常地顯示每個字符
示例:

func typeString() {
	for _, v := range a {
		a := "你好 world"
		fmt.Printf("%c - %T\n",v,  v)
	}
}

遍歷的是每個字符


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM