Golang Go语言中全局匿名变量的作用是啥?

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中全局匿名变量的作用是啥?

看到过好几次别人的代码里面都有全局的匿名变量,比如这里:

...

type cachedWriter struct {
	gin.ResponseWriter
	status  int
	written bool
	store   persistence.CacheStore
	expire  time.Duration
	key     string
}

var _ gin.ResponseWriter = &cachedWriter{}
...

代码地址:https://github.com/gin-contrib/cache/blob/master/cache.go#L45

这里 var _ gin.ResponseWriter = &cachedWriter{} 这样写是为了啥,没看明白,求赐教~


更多关于Golang Go语言中全局匿名变量的作用是啥?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

10 回复

确定 cacheWriter 实现接口

更多关于Golang Go语言中全局匿名变量的作用是啥?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go<br>type myInterface interface {<br> foo()<br>}<br><br>type myData struct{}<br><br>func (o *myData) foo() {<br>}<br><br>var _ myInterface = &amp;myData{}<br><br>
1 楼说得对,如果没有实现 myInterface 接口,那么在编译阶段就会报错

原来如此,我学会了!

在挺多开源框架见到, 确实技巧了. 不过用 goland 的话, 可以一键某结构实现某接口, 可以避免这样的检验了

还有一些是为了跳过 unused 检测,比如

var _ = xxx

我刚想发个新帖子问这个问题的,就看到这个帖子了。在看 client-go 源码的时候也看到这种用法了

go<br>var _ RateLimiter = &amp;ItemFastSlowRateLimiter{}<br>

在Go语言中,全局匿名变量(通常指未显式命名的变量)的作用及其存在性是一个有些微妙但具体的话题。

首先,需要明确的是,Go语言中的匿名变量通常出现在多值返回的场景中。当某个函数返回多个值时,如果你只关心其中的部分返回值,可以使用匿名变量(即使用下划线 _)来忽略其他不关心的返回值。

对于全局匿名变量,这个概念实际上并不准确,因为Go语言中的变量需要被显式命名才能被声明和使用。然而,如果你在全局作用域(如包级别)的某个位置使用匿名变量,通常意味着你在处理某个函数返回的多值时,在全局作用域内忽略了某些返回值。

这种做法在Go语言中并不常见,也不推荐,因为它可能导致代码的可读性和可维护性降低。全局变量本身就应该尽量避免使用,因为它们可能会引入难以追踪的副作用和依赖关系。而匿名变量的使用则进一步增加了这种复杂性。

总的来说,全局匿名变量在Go语言中并不是一个推荐或常见的做法。如果你需要处理函数返回的多值,并且其中一些值不需要在全局作用域中使用,最好是在函数内部或更局部的作用域内处理这些返回值,以保持代码的清晰和简洁。

希望这能帮助你更好地理解Go语言中变量和返回值处理的相关概念。

回到顶部