下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年版股权转让合同标的及详细描述
- 2024年驾驶员义务免除协议版B版
- 2024年酒类产品国际销售与出口合同
- 2025年度股权协议转让标的评估与尽职调查服务合同2篇
- 2024年物流行业废弃物资源化利用承包合同范本3篇
- 2025版酒店管理公司租赁合同
- 2024年员工股份代持及企业内部人才培养协议3篇
- 2025版智能停车场设计与运营合同3篇
- 2025版涵洞工程劳务分包与可持续发展合同3篇
- 2024年版物流服务外包合同书
- 穿越河流工程定向钻专项施工方案
- 地球物理学进展投稿须知
- 机床精度检验标准 VDI3441 a ISO230-2
- 社会主义新农村建设建筑废料利用探究
- 解析电力施工项目的信息化管理
- 火炬介绍 音速火炬等
- 制剂申请书(共16页)
- 《质量守恒定律》评课稿
- 人教版七年级上册地理《第4章居民与聚落 第3节人类的聚居地——聚落》课件
- 对县委常委班子及成员批评意见范文
- 数据中心IDC项目建议书
评论
0/150
提交评论