doukui4836
2019-09-17 22:21
浏览 138
已采纳

如何检查Go接口类型的变量是否具有实现它的某些结构类型?

Lets say that I have the following:

type A Interface{
   ....
}

//Implements A
type B struct{
   ....
}

//Imlements A
type C struct{
   ....
}

And now I have a function which accepts variable of type A as an argument:

func Foo(obj A){
     if A is B{
          ....
     }else if A is C{
          ....
     }
}

And a main function:

func main(){

    b := B{}
    Foo(b)

}

How can I check if the argument passed to the function is actually type B?

图片转代码服务由CSDN问答提供 功能建议

假设我具有以下内容:

  type A 接口{
 .... 
} 
 
 //元素A 
type B结构{
 .... 
} 
 
 //元素A 
type C结构{
 ..  .. 
} 
   
 
 

现在我有一个函数可以接受 A 类型的变量作为参数: \ n

  func Foo(obj A){
,如果A是B {
 .... 
}否则,如果A是C {
 .... 
} 
}  
   
 
 

和一个 main 函数:

  func main(){
  
b:= B {} 
 Foo(b)
 
} 
   
 
 

如何检查传递给函数的参数是否实际上是< 代码> B

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • douzi4766 2019-09-18 00:50
    已采纳

    Use a type switch as mentioned the tour page linked by @CeriseLimón.

    func Foo(v A) {
        switch v := v.(type) {
        case B:
            // It's a B
        case C:
            // It's a C
        }
    }
    

    See it in action in the playground.

    已采纳该答案
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题