GoLang下划线总结

道道法 · · 572 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

今天在看 Gin 框架的时候,跟踪 Gin 在处理接口返回时,使用到了一个 render 包,查看代码的过程中,发现了这样的写法:

// Render interface is to be implemented by JSON, XML, HTML, YAML and so on.
type Render interface {
    // Render writes data with custom ContentType.
    Render(http.ResponseWriter) error
    // WriteContentType writes custom ContentType.
    WriteContentType(w http.ResponseWriter)
}

var (
    _ Render     = JSON{}
    _ Render     = IndentedJSON{}
    _ Render     = SecureJSON{}
    _ Render     = JsonpJSON{}
    _ Render     = XML{}
    _ Render     = String{}
    _ Render     = Redirect{}
    _ Render     = Data{}
    _ Render     = HTML{}
    _ HTMLRender = HTMLDebug{}
    _ HTMLRender = HTMLProduction{}
    _ Render     = YAML{}
    _ Render     = Reader{}
    _ Render     = AsciiJSON{}
    _ Render     = ProtoBuf{}
)

第一眼看上去还挺奇怪的,_ 的作用就是忽略,作者这么写有什么意义吗?代码中 Render 是一个接口类型,这种赋值隐含实现了接口的类型断言:右边的数据类型是否实现了左边的接口类型,如果没有实现,则会报编译错误。

这种写法还是挺稳妥的,后续开发中可以其实可以借鉴。在 Go 中还有哪些使用 _ 的场景吗?

忽略函数的返回值

这是最常见的使用方式,在 for 循环的遍历中经常见到:

for _, v := range result {
    
}

还有就是忽略函数的返回值,也很常见。

在 import 包的时候使用

偶尔会看到在 import 数据包的时候,存在下面的方式:

import _ "githu.com/think-next"

这种方式是为了执行包内的 init 函数。对我们的代码而言,这个包没有一点用处,除了它内部的 init 方法。


有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:道道法

查看原文:GoLang下划线总结

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

572 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传