跟Java不同点:
-
struct 实现 interface,并没有明显的实现写法,各写各的
-
struct 可以实现部分interface的方法,而不必要全部实现。直接用没问题,用interface进行引用就报错:

示例代码:
Go
// 包路径
package main
import "fmt"
// 接口有两个方法
type Animal interface {
call()
getName() string
}
// 创建类Market,有一个name熟悉
type Market struct {
name string
}
/**
实现方法:
1. (m Market): 标识 这个是Market类的方法
2. call() 接口的方法
*/
func (m Market) call() {
fmt.Println("market call,", "name:", m.name)
}
func (m Market) getName() string {
return m.name
}
type Tiger struct {
name string
}
func (t Tiger) call() {
fmt.Println("tiger call,", "name:", t.name)
}
func (t Tiger) getName() string {
return t.name
}
func animalCall(a Animal) {
a.call()
}
// 空接口,可以接受任何类型的对象,并根据类型判断
func print(v interface{}) {
switch t := v.(type) {
case int:
fmt.Println("integer", t)
case string:
fmt.Println("string", t)
}
}
// main方法
func main() {
// 接口 interface
m1 := Market{name: "m111"}
fmt.Println(m1.getName())
m1.call()
m2 := new(Market)
m2.name = "m222"
m2.call()
t1 := Tiger{name: "t1111"}
fmt.Println(t1.getName())
t1.call()
// 根据传值的不同
animalCall(m1)
animalCall(t1)
// 定义一个接口,然后复制类对象,按照接口调用就可以
var a1 Animal
a1 = m1
a1.call()
// 将m1转换为 Market类型
m11 := a1.(Market)
fmt.Println(m11.name)
// 空接口接受人任何对象
print(11)
print("str11")
}