字串是不可變位元組(byte)序列,本身是乙個復合結構。預設以utf-8編碼儲存unicode字元。它的預設值是「」,而不是nil。字串底層就是⼀個byte陣列,所以可以和byte型別互相轉換。
使用「 『 」定義不做轉義處理的原始字串,支援跨行。
func main()
輸出:
line\r\n,
line 2
字串之中的字元是不能修改的,但是可以將其轉換為可變型別(rune或byte),完成之後再轉換回來。但是不管如何轉換,都需要重新分配記憶體,並複製資料。字串是由byte位元組組成,所以字元串的長度是byte位元組的長度。rune型別用來表示utf8字元,乙個rune字元由1個或多個byte組成。
func pp(format string, ptr inte***ce{})
func main()
有些時候,轉換會降低演算法的效能,因此可以考慮使用「非安全」方法進行改善。
func tostring(bs byte) string
func main()
該方法利用了byte和string頭結構「部分相同」,以非安全的指標型別轉換來實現型別「變更」,避免了底層陣列複製。在高併發壓力下能有效改善執行效能。
使用+拼接字串也會產生效能問題,每次都必須重新分配記憶體。可以預分配足夠的記憶體空間,使用strings.join函式,統計所有引數長度,並一次性完成記憶體分配操作。
陣列是同一型別的元素集合。go陣列下標也是從0開始,因此長度為n的陣列下標範圍是[0,n-1]。整數陣列中的元素預設初始化為0,字串陣列中的元素預設初始化為「」。
var a [3]int //定義乙個陣列
陣列的初始化有以下幾種:
//陣列初始化
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
var a [3]int = [3]int //定義時陣列初始化
a := [3]int //定義時陣列初始化
a := […]int //定義時陣列初始化
a := [3]int //定義時陣列初始化,未提供初始值的自動初始化為0
a := [3]int //定義時陣列初始化,制定索引位置初始化
陣列長度是型別的⼀部分
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
var b [5]int
b = a //a、b是不同型別的陣列,不能賦值
陣列內建函式len和cap都返回第一維長度。
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
fmt.printf(「len:%d\n」, len(a))
陣列的遍歷
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
for i := 0; i < len(a); i++
for index, val := range a
var a [3][2]int
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 30
a[2][0] = 30
a[2][1] = 30
for index, val := range a
陣列的拷貝與傳參
//陣列是值型別
var a [3]int
a[0] = 10
a[1] = 20
a[2] = 30
b := a
//b拷⻉了陣列a中所有元素
b[0] = 1000
fmt.println(a, b)
//陣列是值型別,函式傳參也會拷貝
func main()
func modify(b [3]int)
golang開發 二 安裝 Golang
當然了我們的安裝都是在vagrant裡面安裝,vagrant ssh。不用虛擬機器了,本機安裝當然也可以。go is a tool for managing go source code.usage go command arguments the commands are build compil...
golang開發 二 安裝 Golang
當然了我們的安裝都是在vagrant裡面安裝,vagrant ssh。不用虛擬機器了,本機安裝當然也可以。go is a tool for managing go source code.usage go command arguments the commands are build compil...
golang學習(二) 資料型別
個人github golang學習筆記 go語言基本的資料型別有整型 浮點型 布林型 字串 還有複雜資料型別如切片 結構體 函式 map 通道 指標 陣列 介面等。整型分為兩個大類 1.int8 int16 int32 int64 2.對應的無符號整型 uint8 uint16 uint32 uin...