这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
基础语法:
一、面向对象封装:
与java类似,golang中也有面向对象的特征。但是不同于java的是,golang中并不是新创建一个类,然后在类里定义属性和方法。而是先定义个结构体,
比如type T struct {
name string
}
其中的name也就是属性,然后再在这个结构体下定义若干个方法
比如func (t *T) method1() {
t.name = "new name2"
}
这样在main方法中创建了个T对象后,就可以调用这个对象的method1方法了。
值得注意的是,我们在定义方法时,形参处我们传的是个指针类型。因为只有这样,才能实际影响到当前对象。
二、面向对象继承:
与java一样,golang也有继承,示例代码如下:
type Superman struct{ //这里我们定义了个超人结构体
Human //而这是个人类结构体,当这样写的时候,也就意味着超人类继承了人类
age int
}
func (this *Superman) Sleep(){
fmt.Println("superman is sleeping......")
}
三、面向对象多态:
同样的,这个也和java类似。在上面继承里的例子的基础上,假如说我们在main()里定义了个Human对象human,同时执行以下代码:
human=&Superman(20)
human.Sleep()
那么执行结果将会是输出superman is sleeping。而不是执行Human中的Sleep()中的内容。这就是多态。
四、interface与类型断言
golang中的所有程序都实现了interface{}的接口。也就是说不管是什么类型,就算是你自定义的,也都实现了interface{}的接口。
而当我们执行以下代码时:
func funcName(a interface{}) string {
return string(a)
}
会返回以下结果:
cannot convert a (type interface{}) to type string: need type assertion
那么此时我们就需要类型断言了。
通常我们使用的是直接断言,比如说我们定义了个变量a,那么此时用a.(type),会返回两个值。一个是value,一个是ok。当我们输入的type与a的类型相符时,ok的值是true,value此时也会得到a的值。