强制 Go 类型实现接口

Fra*_*nin 3 go

在Go中,你不\xe2\x80\x99t声明你需要实现一个接口,你只需执行它(它\xe2\x80\x99s称为\xe2\x80\x98结构类型\xe2\x80\x99类似于\xe2 \x80\x98duck 在动态语言中输入 \xe2\x80\x99)。\n如果你想强制一个类型实现一个接口(比如当你 \xe2\x80\x98inherit\xe2\x80\x99 C# 中的接口或例如Java)?换句话说,如果忘记实现接口(或签名错误)是一个错误,并且您希望尽早发现该错误,该怎么办?最好的方法是什么?

\n

Sar*_*lai 6

您可能做的最好的事情就是尝试将该类型的实例分配给接口变量

例如,您想确保类型A实现Stringer接口。

你可以这样做

var _ Stringer = new(A) //or
var _ Stringer = A{}
Run Code Online (Sandbox Code Playgroud)

这是示例程序,在示例中A实现了接口,但B没有

package main

import (
    "fmt"
)

type Stringer interface {
   String() string
}

type A struct {
}

func (a A) String() string {
    return "A"
}

type B struct {}


var _ Stringer = new(A)
var _ Stringer = new(B)

func main() {

    fmt.Println("Hello, playground")
}
Run Code Online (Sandbox Code Playgroud)

播放链接在这里:play.golang