当前位置: 首页 > news >正文

西安建网站的公司广告设计制作服务方案

西安建网站的公司,广告设计制作服务方案,网页设计是哪个专业,网站功能需求分析文档Go原生的pkg中有一些核心的interface#xff0c;其中io.Reader/Writer是比较常用的接口。很多原生的结构都围绕这个系列的接口展开#xff0c;在实际的开发过程中#xff0c;你会发现通过这个接口可以在多种不同的io类型之间进行过渡和转化。本文结合实际场景来总结一番。 总… Go原生的pkg中有一些核心的interface其中io.Reader/Writer是比较常用的接口。很多原生的结构都围绕这个系列的接口展开在实际的开发过程中你会发现通过这个接口可以在多种不同的io类型之间进行过渡和转化。本文结合实际场景来总结一番。 总览 围绕io.Reader/Writer有几个常用的实现 net.Conn, os.Stdin, os.File: 网络、标准输入输出、文件的流读取strings.Reader: 把字符串抽象成Readerbytes.Reader: 把[]byte抽象成Readerbytes.Buffer: 把[]byte抽象成Reader和Writerbufio.Reader/Writer: 抽象成带缓冲的流读取比如按行读写这些实现对于初学者来说其实比较难去记忆在遇到实际问题的时候更是一脸蒙圈不知如何是好。下面用实际的场景来举例 场景举例 0. base64编码成字符串 encoding/base64包中 func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser 这个用来做base64编码但是仔细观察发现它需要一个io.Writer作为输出目标并用返回的WriteCloser的Write方法将结果写入目标下面是Go官方文档的例子 input : []byte(foo\x00bar) encoder : base64.NewEncoder(base64.StdEncoding, os.Stdout) encoder.Write(input) 这个例子是将结果写入到Stdout如果我们希望得到一个字符串呢观察上面的图不然发现可以用bytes.Buffer作为目标io.Writer input : []byte(foo\x00bar) buffer : new(bytes.Buffer) encoder : base64.NewEncoder(base64.StdEncoding, buffer) encoder.Write(input) fmt.Println(string(buffer.Bytes()) 1. []byte和struct之间正反序列化 这种场景经常用在基于字节的协议上比如有一个具有固定长度的结构 type Protocol struct {Version uint8BodyLen uint16Reserved [2]byteUnit uint8Value uint32 } 通过一个[]byte来反序列化得到这个Protocol一种思路是遍历这个[]byte然后逐一赋值。其实在encoding/binary包中有个方便的方法 func Read(r io.Reader, order ByteOrder, data interface{}) error 这个方法从一个io.Reader中读取字节并已order指定的端模式来给填充datadata需要是fixed-sized的结构或者类型。要用到这个方法首先要有一个io.Reader从上面的图中不难发现我们可以这么写 var p Protocol var bin []byte //... binary.Read(bytes.NewReader(bin), binary.LittleEndian, p) 换句话说我们将一个[]byte转成了一个io.Reader。 反过来我们需要将Protocol序列化得到[]byte使用encoding/binary包中有个对应的Write方法 func Write(w io.Writer, order ByteOrder, data interface{}) error 通过将[]byte转成一个io.Writer即可 var p Protocol buffer : new(bytes.Buffer) //... binary.Writer(buffer, binary.LittleEndian, p) bin : buffer.Bytes()2. 从流中按行读取 比如对于常见的基于文本行的HTTP协议的读取我们需要将一个流按照行来读取。本质上我们需要一个基于缓冲的读写机制读一些到缓冲然后遍历缓冲中我们关心的字节或字符。在Go中有一个bufio的包可以实现带缓冲的读写 func NewReader(rd io.Reader) *Reader func (b *Reader) ReadString(delim byte) (string, error) 这个ReadString方法从io.Reader中读取字符串直到delim就返回delim和之前的字符串。如果将delim设置为\n相当于按行来读取了 var conn net.Conn //... reader : NewReader(conn) for {line, err : reader.ReadString([]byte(\n))//... }花式技zuo巧si string转[]byte a : Hello, playground fmt.Println([]byte(a)) 等价于 a : Hello, playground buf : new(bytes.Buffer) buf.ReadFrom(strings.NewReader(a)) fmt.Println(buf.Bytes())
http://www.yutouwan.com/news/304973/

相关文章:

  • 本地建设网站软件wordpress文章对齐方式
  • 门户网站制作流程博客天津地区网站建设
  • 网站平台建设如何免费建造网站
  • 设计简单的网站安阳网站建设兼职
  • 南阳旅游网 网站设计付费阅读下载网站开发
  • 学校门户网站建设说明wordpress邮箱失败
  • 网站开发与管理所对应的职位及岗位专门做处理货的网站
  • 政务咨询投诉举报网站建设网站推广需要多少钱
  • 定制化网站开发的好处牛商网朱依静
  • angularjs做的网站有哪些用什么做wordpress
  • 广州网站设计公司vi设计公司推广方式单一的原因
  • 提高网站打开速度那片海dede织梦源码企业网络公司工作室网站模板源码模板php
  • synology建设网站一个公司做2个产品网站怎么做
  • 徐州集团网站建设公司环保网站策划书
  • 网站怎么做移动图片不显示不出来相册网站建设方案
  • 深圳快速网站制作服免费php网站空间
  • 功能型网站 设计职业生涯规划大赛是干什么的
  • 工信部网站备案验证码网上注册公司营业执照注册流程
  • 网站建设每天的工作wordpress可视编辑
  • 网站建设飠金手指下拉中建国际建设有限公司官网是央企吗
  • 番禺网站设计投资者网站建设
  • 所有网站打不开廊坊有限公司
  • 音乐网站开发模板做网站优化费用
  • 石岩网站建设公司网站的建设及维护
  • 外贸网站模板 外贸网站制作怎么做游戏推广网站
  • 深圳网站建设公司首选wordpress 显示评论内容
  • php网站开发占比wordpress主机服务器销售源码
  • 企业网站的建立流程的第一步是php js做网站
  • 上海住房和城乡建设部网站织梦笑话娱乐网站源码2w数据+36条采集规则
  • 网站建设制作需要多少钱站酷做网站