简单谈谈Golang中的字符串与字节数组_第1页
简单谈谈Golang中的字符串与字节数组_第2页
简单谈谈Golang中的字符串与字节数组_第3页
简单谈谈Golang中的字符串与字节数组_第4页
简单谈谈Golang中的字符串与字节数组_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论