如何在Golang中创建没有字段或方法的顶级对象?

Cru*_*yro -1 go

由于我来自Java并且是Golang的新手,我将尝试用Java解释我想要的东西.

    interface Car { }

    class MyCarA implements Car {
      int specificToA
    }

    class MyCarB implements Car {
      int specificToB
    }
Run Code Online (Sandbox Code Playgroud)

我认为这样的界面(如Car)在Java中称为标记界面.它只是表明编译器必要的抽象.

我怎么能在Golang中这样做?

我有

type MyCarA struct {
   specificToA int
}
type MyCarB struct {
  specificToB int
}
Run Code Online (Sandbox Code Playgroud)

我现在如何概括这些结构?它应该是一个接口还是另一个结构?

Cer*_*món 5

你可以这样做:

type Car interface { IAmACar() }

type MyCarA struct {
  specificToA int
}
func (MyCarA) IAmACar() {}

type MyCarB struct {
  specificToB int
}
func (MyCarB) IAmACar() {}
Run Code Online (Sandbox Code Playgroud)

您使用类型断言测试标记:

_, itIsACar := v.(Car)
Run Code Online (Sandbox Code Playgroud)

操场的例子

Car接口也可用于静态检测错误:

var c Car
c = MyCarA{0} // ok
c = 0 // error, int is not a car
Run Code Online (Sandbox Code Playgroud)

GO/AST包做类似的事情.请参阅文件ast.go中函数exprNode的使用.