string
go 語言中的字串其實是乙個唯讀的位元組陣列
string 對應的結構
type stringheader struct
type stringstruct struct
字串拼接
concatstrings:runtime/concatstrings
func
concatstrings
(buf *tmpbuf, a [
]string
)string
if l+n < l
l += n
count++
idx = i
}if count ==
0// 如果非空字串的數量為 1 並且當前的字串不在棧上就可以直接返回該字串,不需要進行額外的任何操作
if count ==1&&
(buf !=
nil||
!stringdataonstack
(a[idx]))
// 申請新的記憶體
s, b :=
rawstringtmp
(buf, l)
// 多個字串拷貝到目標字串所在的記憶體空間中
for_
, x :=
range a
return s
}
位元組陣列到字串的轉換
slicebytetostring:runtime/slicebytetostring
func
slicebytetostring
(buf *tmpbuf, ptr *
byte
, n int
)(str string
)// 長度為1 也特殊處理
if n ==
1stringstructof
(&str)
.str = p
stringstructof
(&str)
.len=1
return
}var p unsafe.pointer
// 如果入參的緩衝區夠用
if buf !=
nil&& n <=
len(buf)
else
// 複製
stringstructof
(&str)
.str = p
stringstructof
(&str)
.len
= n // 移動
memmove
(p, unsafe.
pointer
(ptr)
,uintptr
(n))
return
}
字串轉位元組陣列
stringtoslicebyte:runtime/stringtoslicebyte
func
stringtoslicebyte
(buf *tmpbuf, s string)[
]byte
b = buf[
:len
(s)]
}else
copy
(b, s)
return b
}
golang 原始碼分析之context
context 上下文 context.context 是用來設定截止日期 同步訊號,傳遞請求相關值的結構體。該介面定義了四個需要實現的方法 deadline 返回 context.context 被取消的時間,也就是完成工作的截止日期 done 返回乙個 channel,這個 channel 會在...
《Python原始碼剖析》之 str
定義 typedef struct pystringobject 說明 pyobject var head pystringobject是變長物件,比定長物件多了乙個ob size欄位 ob shash 儲存字串的hash值,如果還沒計算等於 1 當string hash被呼叫,計算結果會被儲存到這...
golang初探與命令原始碼分析
前段時間有群友在群裡問乙個go語言的問題 就是有乙個main.go的main函式裡呼叫了另乙個demo.go裡的hello 函式。其中main.go和hello.go同屬於main包。但是在main.go的目錄下執行go run main.go卻報hello函式沒有定義的錯 結構如下 gopath ...