表达式(*T)(nil)的含义是将nil转换为类型T的指针。

huangapple go评论74阅读模式
英文:

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 &quot;fmt&quot;

type TB interface{}
type T struct{}
var x TB = (*T)(nil)

func main() {
	fmt.Printf(&quot;%T, %v&quot;, x, x)
}

output

*main.T, &lt;nil&gt;

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.

huangapple
  • 本文由 发表于 2022年8月12日 22:51:53
  • 转载请务必保留本文链接:https://go.coder-hub.com/73335994.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定