英文:
What does the expression (*T)(nil) mean
问题
我在测试包中遇到了这两个语句:
var _ TB = (*T)(nil)
var _ TB = (*B)(nil)
这是一个简单的程序,用于尝试和调查这些语句的求值结果:
package main
import "fmt"
type TB interface{}
type T struct{}
var x TB = (*T)(nil)
func main() {
fmt.Printf("%T, %v", x, x)
}
输出结果为:
*main.T, <nil>
问题是,这个语法是什么意思,它的用途是什么,特别是在我们将其赋值给空白标识符的情况下?谢谢。
英文:
I came across these two statements in the testing package
var _ TB = (*T)(nil)
var _ TB = (*B)(nil)
Here's is a simple program to try and investigate what this evaluates to
package main
import "fmt"
type TB interface{}
type T struct{}
var x TB = (*T)(nil)
func main() {
fmt.Printf("%T, %v", x, x)
}
output
*main.T, <nil>
Question is, what does this syntax mean and what is its use, specifically in this case where we assign to the blank identifier? TIA
答案1
得分: 1
这是一个编译时检查,用于确保类型*T
和*B
满足接口TB
的要求。因此,如果你修改了*T
或*B
,使其不再满足TB
的要求,编译时会出现错误。
这不会对运行时产生任何影响。空标识符告诉编译器可以将其忽略。
英文:
It is a compile time check to ensure the types *T
and *B
satisfy the interface TB
. So if you modify *T
or *B
that no longer satisfies TB
, you will get a compile error.
It doesn't affect runtime at all. The blank identified tells the compiler it can throw it out.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论