go的byte跟string有什么区别byte是字节型数据,string是字符串型数据,它们go语言byte的数据类型不同 。
一、字符串型 。
字符串型的变量 , 字符码范围为0到255,可以声明变长和定长字符串 。
用“String*大小”的语法声明一个定长字符串 。在Visual
Basic中,文字字符串要用引号引起来 。
二、字节型 。
变量包含二进制数时,使用字节型 。在转换格式期间,最好用字节型变量存储二进制数 。
§除go语言byte了一元减法外 , 可以对整数进行处理的运算符均可处理字节型的数据类型 。因为字节型是从0到255的无符号类型,所以不能表示负数 。
Golang bytes.buffer详解Buffer 介绍
Buffer 是 bytes 包中go语言byte的一个 type Buffer struct{…}
A buffer is a variable-sized buffer of bytes with Read and Write methods. The zero value for Buffer is an empty buffer ready to use.
(是一个变长的 buffergo语言byte,具有 Read 和Write 方法 。Buffer 的 零值 是一个 空的 buffergo语言byte,但是可以使用)
Buffer 就像一个集装箱容器go语言byte,可以存东西,取东西(存取数据)
创建缓冲器
输出
写入到缓冲器
buffer在new的时候是空的,也是可以直接Write的
Write
结果
WriteString
结果
WriteByte
WriteRune
结果
从缓冲器中写出
读出缓冲器
Read
ReadByte
返回缓冲器头部的第一个byte
ReadRun
ReadRune方法,返回缓冲器头部的第一个rune
为什么n==3,而n1==1呢?go语言byte我们看下ReadRune 的源码
ReadBytes
ReadBytes方法,需要一个byte作为分隔符,读的时候从缓冲器里找出第一个出现的分隔符,缓冲器头部开始到分隔符之间的byte返回 。
相当于有一个分隔符
ReadString
和readBytes方法类似
读入缓冲器
ReadFrom方法,从一个实现io.Reader接口的r , 把r的内容读到缓冲器里,n返回读的数量
从缓冲器取出
Next方法,返回前n个byte(slice),原缓冲器变
缓冲区原理介绍
go字节缓冲区底层以字节切片做存储,切片存在长度len与容量cap, 缓冲区写从长度len的位置开始写,当lencap时,会自动扩容 。缓冲区读会从内置标记off位置开始读(off始终记录读的起始位置),当off==len时 , 表明缓冲区已全部读完
并重置缓冲区(len=off=0),此外当将要内容长度+已写的长度(即len) = cap/2时 , 缓冲区前移覆盖掉已读的内容(off=0,len-=off),从避免缓冲区不断扩容
如何将golangbyte转换为字符串golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,他只是在这个基础上又加了一些概念这里说一个很小的问题,就是字节数组转string的问题,网上大部分都是这样转的(包括google上):string(p[:]),这个转完了是有问题的,我们再来看一下string这个结构体:
struct String
{
byte*str;
intgolen;
};
这个结构体让我想起了nginx的string,他是这样定义的:
typedef struct {
size_tlen;
u_char*data;
} ngx_str_t;
golang里边 string的概念其实不是以前遇到\0结尾的概念了 , 他其实就是一块连续的内存,首地址+长度 , 上面那样赋值,如果p里边有\0 , 他不会做处理这个时候,如果再对这个string做其他处理就可能出问题了,比如strconv.Atoi转成int就有错误,解决办法就是需要自己写一个正规的转换函数:
func byteString(p []byte) string {
for i := 0; ilen(p); i++ {
if p[i] == 0 {
推荐阅读
- blued服务器在国内还是国外,blued国外用户多吗
- 办公室如何利用淘宝做电商,网店办公室
- ios11promax手机壳,11promax原装手机壳
- flutter专业,flutter flutter
- vb.net图片操作 vb显示图片
- HBASE数据量命令,hbase数据操作命令
- mongodbdat文件,mongodb大文件存储规范的原理
- 荣耀九怎么连接5g路由器,荣耀9支持wifi6
- java代码不执行 javac执行不了