go 接口/错误处理 知识点

Posted 文大侠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 接口/错误处理 知识点相关的知识,希望对你有一定的参考价值。

接口

面向对象3大特性,封装/继承/多态,封装采用结构体完成,继承使用组合的方式完成,而接口使用的是所谓的鸭子模型(Duck Type)。

也就是说不像c++/java中,实现接口必须继承实现,只需要实现了接口定义的一组方法,那么就默认为实现了该接口。

如下,利用接口实现多态,注意new后传入对象指针

// --- interface

type Animal interface 
	sayHello(words string)


type Peopple struct 


func (p *Peopple) sayHello(words string) 
	log.Printf("你好 %v\\n", words)


type Cat struct 


func (p *Cat) sayHello(words string) 
	log.Printf("喵喵 %v\\n", words)


type Dog struct 


func (p *Dog) sayHello(words string) 
	log.Printf("汪汪 %v\\n", words)


func SayHello(p Animal) 
	p.sayHello("你好呀")


// 多态
func TestSayHello(t *testing.T) 
	SayHello(new(Peopple))
	SayHello(new(Dog))
	SayHello(new(Cat))

异常处理

不同于传统的java/c++中使用异常的方式,go通过多返回值支持,一般使用返回error来判断,也可以看作是c++/java中通过判断返回是否为空来处理异常。

需要注意的是,panic和os.Exit的差别,前者可以可以让函数做清理操作,后者直接退出,某种程度上和c++/java的处理逻辑一致。

具体演示程序如下

// --- panic error

func doneWithPanic() 
	defer func() 
		fmt.Println("doneWithPanic clear before return")

		if err := recover(); err != nil 
			fmt.Printf("doneWithPanic recover - %v\\n", err)
		
	()

	fmt.Println("doneWithPanic start")
	panic("doneWithPanic panic when error")
	fmt.Println("doneWithPanic end")


func doneWithExit() 
	defer func() 
		fmt.Println("doneWithExit clear before return")
	()

	fmt.Println("doneWithExit start")
	os.Exit(-1)
	fmt.Println("doneWithExit end")


func TestDone(t *testing.T) 
	doneWithPanic()
	doneWithExit()

输出内容如下

=== RUN   TestDone
doneWithPanic start
doneWithPanic clear before return
doneWithPanic recover - doneWithPanic panic when error
doneWithExit start

原创,转载请注明来自

以上是关于go 接口/错误处理 知识点的主要内容,如果未能解决你的问题,请参考以下文章

go 接口/错误处理 知识点

Go错误处理

Go36-19,20-错误处理

GO语言学习(十九)Go 错误处理

2.11 Go之error接口

C#基础知识点总结