doujiao3072 2014-02-21 10:40
浏览 226
已采纳

GoLang类型开关中变量“ t”的实际类型是什么?

Given:

type MyInterface interface{

    MyMethod() int

}

var im MyInterface
...

If I call:

switch t := im.(type) {

   case:....

   default:...

}

What is the actual type of the variable t when it is declared? To illustrate the question: If I wanted to write

var t //What type should I use?! 

How would I declare t ?

For example In Delphi we have this structure:

TTypeInfo = record
  Kind: TTypeKind;
  Name: string;
  {TypeData: TTypeData}
end;

I believe I am looking for something in GoLang that is akin to TTypeKind, which has potential values such as tkInteger, tkString etc.

In C++, we find the type_info class type, which also provides some of this functionality.

What type would I use for t in the var t... declaration? Is this even possible?

  • 写回答

3条回答 默认 最新

  • dongshuogai2343 2014-02-21 19:34
    关注

    The type switch in Go is weird and special business. It’s not a generalization of another form that happens to be applied to types.

    To my knowledge, you can’t write it using var (and I do recognize that you only mention the var form as illustration).

    Within a case clause of the switch, t has the type specified in that case (see @Mue’s answer). Inside the default clause, it has im’s original type.

    To answer your question, the t symbol in this case is weird and special, and only meaningful in the context of the switch. Its type is context-dependent. I hesitate to even call it a variable.

    Edit, speculation:

    I haven’t looked at the compiler but I suspect it deconstructs each case into a type assertion (cast), the result of which is a local variable within the scope of the case clause. As a syntactic convenience, you can refer to each using the t symbol.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 高价求中通快递查询接口
  • ¥15 解决一个加好友限制问题 或者有好的方案
  • ¥15 关于#java#的问题,请各位专家解答!
  • ¥15 急matlab编程仿真二阶震荡系统
  • ¥20 TEC-9的数据通路实验
  • ¥15 ue5 .3之前好好的现在只要是激活关卡就会崩溃
  • ¥50 MATLAB实现圆柱体容器内球形颗粒堆积
  • ¥15 python如何将动态的多个子列表,拼接后进行集合的交集
  • ¥20 vitis-ai量化基于pytorch框架下的yolov5模型
  • ¥15 如何实现H5在QQ平台上的二次分享卡片效果?