栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用Go服务HTTP部分内容?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用Go服务HTTP部分内容?

提供部分内容并非易事。有关介绍,请参见Wikipedia上的Byte服务。您必须处理特定的状态代码和标头(请求和响应),这虽然不太难,但是您不应该浪费时间自己做。

如果要提供(或从中提供)的内容是文件,则可以

http.ServeFile()
按照您提到的那样使用该文件,该文件可以处理部分内容(范围请求)。

如果要提供的内容不是文件形式,那么

http.ServeContent()
您的朋友是:

func ServeContent(w ResponseWriter, req *Request,    name string, modtime time.Time, content io.ReadSeeker)

是的,它还处理了部分内容的提供(范围请求):

ServeContent优于io.Copy的主要好处在于,它可以正确处理Range请求,设置MIME类型并处理If-Modified-Since请求。

您需要做的就是提供内容的

io.ReadSeeker
“视图”,这是必需的,以便实现可以“跳转”到客户端请求的部分,即需要提供服务的部分。您可能会问:该怎么做?

bytes
包包含一个实现的类型
io.ReadSeeker
bytes.Reader

因此,例如,如果您的内容为

[]byte
,则可以这样获得
io.ReadSeeker

var content []byte// fill contentr := bytes.NewReader(content)

如果您没有全部内容

[]byte
呢?一种选择是提供您自己实现的类型的值
io.ReadSeeker

io.ReadSeeker
是:

type ReadSeeker interface {    Reader    Seeker}

io.Reader
包含一种方法:

Read(p []byte) (n int, err error)

io.Seeker
还包含一种方法:

Seek(offset int64, whence int) (int64, error)

您的内容可以在某个地方访问,无论如何,您都知道。

Seek()
被调用以使您知道内容中需要什么部分(位置),并被
Read()
调用以便可以填充传递的切片(以提供实际内容)。请注意,这些方法可能会被多次调用,因此您必须跟踪内容(源)中的位置。如果您选择沿着这条路走,请阅读链接接口的文档,以确保您符合接口的“一般合同”,以避免出现意外错误。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/447961.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号