是不是不能用:=的方式实例化一个接口?为什么?
package main
import (
"fmt"
"testing"
)
type Programmer interface {
WriteHelloWorld() string
}
type GoProgrammer struct{}
func (g *GoProgrammer) WriteHelloWorld() string {
fmt.Println("I am GO PROG")
return "I am go PROG"
}
func TestClient(t *testing.T) {
var p Programmer // 这样OK
// p := Programmer // <- 会报错 Type 'Programmer' is not an expression
p = new(GoProgrammer)
p.WriteHelloWorld()
t.Log(p.WriteHelloWorld())
}
interface是一个抽象, 就像c++里的抽象类一样是不能实例化的.
可以实例化的是实现了interface的方法的struct.
或者你也可以这样写