下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年中级经济师之中级经济师金融专业题库附完整答案(各地真题)
- 人教版小学数学教案1-6年级教案:第7课时 用计算器探索规律
- 53模拟试卷初中语文八年级下册01-期中素养综合测试
- 小学英语语法知识
- 高中数学 1.2 点、线、面之间的位置关系 1.2.3.2 平面与平面垂直教案 新人教B版必修2
- 企业卡车售卖合同模板
- 商用小吃租赁合同模板
- 承办会议接待合同模板
- 养殖户和经销商合同模板
- 手机推广合同模板
- 紫罗兰永恒花园
- 驾驶员劳务派遣投标方案
- 大客户战略:大客户全生命周期管理
- 家长会课件:开学七年级家长会校长发言课件
- 食堂验收记录表
- 供电调研报告
- 数学成绩分析总结与反思
- 校友网络在高校校友会建设与发展中的作用研究
- 人教版三年级上册数学认识几分之一说课稿
- 水力发电企业突发环境事件应急预案
- 相似三角形的性质经典课件市名师优质课比赛一等奖市公开课获奖课件
评论
0/150
提交评论