谈谈Go语言的字符串设计
本文来自:http://www.ttkmwl.com 最给力的程序源码下载论坛 -通天源码论坛
而 C.CString 将 Go语言 string 转换成 C语言字符串的时候。 我们就要谈谈为什么它不会像 C++ 的 string::c_str() 一样只是单纯的共用内存了。
本质原因在于对于 Go 来说, string 和 C语言最大的不同是: 在C语言中,字符串是以 ’\0’ 结尾。 其实我认为这个本身是一种历史遗留问题。
比如一个 “hello” 的字符串。 我们在内存中表示可以有两种选择:
C语言默认的字符串选择了第一种方式, 我认为主要原因在于当年C语言发明的时候是内存和稀缺的时代。 第一种方式比第二种方式显然更省内存。
但是随着时代的发展,内存越来越便宜。内存已经越来越不是程序开发的瓶颈。 第二种方式越来越成为字符串设计的首选。 比如在Nginx之类的著名开源项目中,也是采用了第二种方式对字符串进行存储。