下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年团队管理机考试题及答案
- 2025年冰雪运动考试题库及答案
- 公园出租桌椅合同范本
- 2025年特岗文化素养题库及答案
- 拆迁门窗协议合同范本
- 帕金森病家庭护理者的支持与培训
- 疼痛管理护理视频教程
- 车尿素采购合同范本
- 冬至课件开头结尾摘抄
- 山东联通机考试题及答案
- 2026年云南中烟工业有限责任公司毕业生招聘(502人)笔试考试参考试题及答案解析
- 2025江苏苏州大学劳务派遣制人员招聘3人(第五批)笔试考试参考试题及答案解析
- 海洋信息安全:大数据平台建设保障
- 炉底和炉墙砌筑分项工程质量检查评估表
- 2026年沈阳职业技术学院单招职业倾向性考试必刷测试卷带答案
- 2025年铁路专业基础知识考试题库(含答案)
- 2025年地面装饰工(地砖铺贴)考试试卷及答案
- 全媒体运营师培训
- 小学语文教师专业技术工作总结范文
- 外贸综合服务协议书
- 天桥养护施工方案
评论
0/150
提交评论