Go语言接口1 定义Go语言接口是一种抽象类型定义了一组方法的集合但是没有具体的实现只是规定了实现这个接口的类型必须实现这些方法是不同类型之间的交互桥梁。比如说蓝牙协议就像是接口蓝牙协议是跨平台的安卓手机和苹果手机等等不同的设备用蓝牙必须要满足蓝牙协议2 举例实现一个接口animal和两个实现类catdog一个animal类型的实例变量animal同时调用Speak方法体现了接口的一个基本应用场景多态调用同一个方法但输出不同实际意义是避免大量if/elseswitch/casepackage main import fmt // Animal定义接口 type Animal interface { Speak() string } // Dog 定义结构体 type Dog struct{} func (d Dog) Speak() string { return Wangwang! } // Cat 定义结构体 type Cat struct{} func (c Cat) Speak() string { return miaomiao! } type Bird struct{} func main() { var animal Animal animal Dog{} fmt.Println(animal.Speak()) animal Cat{} fmt.Println(animal.Speak()) //animalBird{} //fmt.Println(animal.Speak()) }定义了一个接口animal同时规定要实现Speak方法Bird没有实现Speak方法编译会不通过。GO错误处理GO语言通过内置的错误接口提供了一个简单的错误处理机制error类型的接口定义type error interface { Error() string }处理错误的常用方法有returnpanicFatalpackage main import ( fmt os ) // error类型的定义 type error interface { Error() string } func OpenFile(path string) error { file, err : os.Open(path) if err ! nil { //log.Fatal(err) //使用这个发生错误会返回错误信息内部调用exit函数同时不会再向下执行会记录到日志里 //panic(err) //内置函数会有更详细的错误信息类似try except处理比如说地址触发后不向下执行 //return err //不处理错误信息直接返回错误信息触发后不会向下执行 } fmt.Println(执行到这了吗) fmt.Println(file) return nil } func main() { err : OpenFile(test.txt) if err ! nil { fmt.Println(err) return } }当我们使用panic抛出异常后一般使用recover“捕获”处理切记recover只在defer匿名的函数里面才能发挥出真正的作用。我写了一段实例代码如下func ReadFilePanic(path string) { op, err : os.Open(path) if err ! nil { panic(err) } fmt.Println(op.Name()) } func main() { defer func() { if r : recover(); r ! nil { fmt.Println(recover() test,, r) } }() ReadFilePanic(path/test.txt) }