golang var _ 在编译期间执行

niclelin · 2017-12-15 08:18:55 · 2726 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-12-15 08:18:55 的主题,其中的信息可能已经有所发展或是发生改变。

证明如下

package main

import "fmt"

func main() {

}
// make sure that all the initialization happens before the init() functions
// are called, cf https://golang.org/ref/spec#Package_initialization
var _ = initDebug()
//这是在编译期间就执行

func initDebug() bool {
    fmt.Println("in the initDebug happens before the init()")

    return true
}

//运行期间执行的
func init(){
    fmt.Println("in the init after initDebug")
}

结果如下

in the initDebug
in the init after initDebug

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

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

2726 次点击  
加入收藏 微博
4 回复  |  直到 2018-04-21 19:50:02
specita
specita · #1 · 7年之前

我理解的编译期间是go build

wuyuting
wuyuting · #2 · 7年之前

用在变量

type Car interface {
    run()
}

type Honda struct {

}

func (s Honda)run()  {

}

var _  Car = Honda{}

上面用来判断 type Honda是否实现了接口 Car, 用作类型断言,如果Honda没有实现借口Car,则编译错误.

_admin_
_admin_ · #3 · 7年之前
specitaspecita #1 回复

我理解的编译期间是go build

赞同你的说法

niclelin
niclelin · #4 · 7年之前
wuyutingwuyuting #2 回复

用在变量 ``` type Car interface { run() } type Honda struct { } func (s Honda)run() { } var _ Car = Honda{} ``` 上面用来判断 type Honda是否实现了接口 Car, 用作类型断言,如果Honda没有实现借口Car,则编译错误.

这是为了在编译期间就确定是否实现了接口,没实现,就编译错误

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