




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、 ) C $ cat main.gopackage mainfunc main() str := helloprintln(byte(str)$ GOOS=linux GOARCH=amd64 go tool compile -S main.go.go.string.hello SRODATA dupok size=50 x0000 68 65 6c 6c 6f hello. 8個bit 類type StringHeader struct Data uintptrLen inttype SliceHeader struct Data uintptrLen intCap int :str1 :=
2、 this is a stringstr2 := this is anotherstring串的開始和結束,我們可以在字符串內部直接使掃描器,它的主要作就是將輸的字符流轉換成 func (s *scanner) stdString() s.startLit()for r := s.getr()if r = breakif r = s.escape()continueif r = n s.ungetr()s.error(newline in string)breakif r 0 s.errh(s.line, s.col, string not terminated)breaks.nlsemi =
3、 trues.lit = string(s.stopLit()s.kind = StringLits.tok = _Literal來 ;func (s *scanner) rawString() s.startLit()for r := s.getr()if r = breakif r 0 & s0 = s = strings.Replace(s, r, , -1)u, _ := strconv.Unquote(s)return ValU: u 拼接和類型轉換,字符串相關功能的主要是通過+ func walkexpr(n *Node, init *Nodes) *Node switch n.O
4、p / .case OADDSTR:n = addstr(n, init)5concatstring2,3,4,55func addstr(n *Node, init *Nodes) *Node c := n.List.Len()buf := nodnil()args := *Nodebuffor _, n2 := range n.List.Slice() args = append(args, conv(n2, types.TypesTSTRING)var fn stringif c = 5 fn = fmt.Sprintf(concatstring%d, c) else fn = conc
5、atstringst := types.NewSlice(types.TypesTSTRING)slice := nod(OCOMPLIT, nil, typenod(t)slice.List.Set(args1:)args = *Nodebuf, slicecat := syslook(fn)r := nod(OCALL, cat, nil)r.List.Set(args)/ .return rconcatstring2,3,4,5func concatstrings(buf *tmpBuf, a string) string idx := 0l := 0count := 0for i, x
6、 := range a n := len(x)if n = 0 continueif l+n l throw(string concatenation too long)l += ncount+idx = iif count = 0 return if count = 1 & (buf != nil | !stringDataOnStack(aidx) return aidxs, b := rawstringtmp(buf, l)for _, x := range a copy(b, x)b = blen(x):return s1但是在正常情況下,原始的多個字符串都會被調組轉換成字符串所使的函
7、數,也就是個類似0 1func slicebytetostring(buf *tmpBuf, b byte) (str string) l := len(b)if l = 0 return if l = 1 stringStructOf(&str).str = unsafe.Pointer(&staticbytesb0)stringStructOf(&str).len = 1returnvar p unsafe.Pointerif buf != nil & len(b) = len(buf) p = unsafe.Pointer(buf) else p = mallocgc(uintptr(len(b), nil, false)stringStructOf(&str).str = pstringStructOf(&str).len = len(b)memmove(p,(*(*slice)(unsafe.Pointer(&b).array, uintptr(len(b)returnstringStructOf成 func stringtoslicebyte(buf *tmpBuf, s string) byte var b byteif bu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備風險評估管理制度
- 設計單位業務管理制度
- 設計規章制度管理制度
- 診所中醫醫師管理制度
- 診所收費票據管理制度
- 試劑耗材入庫管理制度
- 財務管理公司管理制度
- 財富顧問薪金管理制度
- 貨架汽配倉庫管理制度
- 貨物道路運輸管理制度
- 售票員崗前培訓
- 教科版六年級下冊科學第一單元《小小工程師》教材分析及全部教案(定稿;共7課時)
- 2024屆北京市海淀區101中學語文八年級第二學期期末檢測試題含解析
- 國家自然科學基金申請經驗匯總課件
- 《新產程管理》課件
- 管理ABC-干嘉偉(美團網COO)
- 雙活數據中心與災備解決方案
- 國有資產委托經營管理協議
- 中試車間安全培訓
- 醫療衛生機構6S常態化管理打分表
- 2023年江西南昌軌道交通集團運營分公司招聘327人筆試參考題庫(共500題)答案詳解版
評論
0/150
提交評論