作为一门没有对象的OOP,如果有OOP的经验的话,GO上手应该是很快的。今天刚好在学习GO,说说我踩的坑吧
————————————————————————
Example:
————————————————————————
Example:
package main
import "fmt"
//动物类
type Animal struct{
Name string
Legs int
}
//狗类
type Dog struct{
Animal//继承Animal类
Tail int
}
//狗类下的方法
func(d Dog) Speak(){
fmt.Println("汪汪汪!")
}
//猫类
type Cat struct{
Animal//继承Animal类
eyes int
}
//猫类下的方法
func(c Cat) Speak(){
fmt.Println("喵~~~")
}
//所有拥有Speak()方法的接口
type SpeakAnimal interface{
Speak()
}
func main() {
//实例化对象,并显示申明类中所有变量
dog := Dog{Animal{"dahuang",4},1}
cat := Cat{Animal{"xiaohua",4},2}
var s SpeakAnimal
s = dog
s.Speak()
s = cat
s.Speak()
}
GO的结构特性:导包,类型,类型的方法,函数
1.type
2.func
func(type Type) Method(int in) int out {
return in
}
3.继承
4.interface
资料:
Go语言与面向对象编程
Go语言interface详解
go是面向对象语言吗?
1.type
- 类的关键字由class变为了type
- 省略了修饰符,由类名的首字母大小写决定访问权限
- 在类结构体中包含了所有类的成员变量
2.func
func(type Type) Method(int in) int out {
return in
}
- func(可指定为类的方法) 方法名(传入参数) 返回值
- 在go里只有类的方法才叫方法,没有指定类的叫函数。
- 需要特殊注意的是返回值可有多个
- 注意方法的参数的值传递与引用传递的区别
3.继承
- Dog类和Cat类都继承了Animal类,同时它们都具有了Animal类的属性和方法。
- 一般情况下,子类的对象可以调父类的属性,但是如果子类和父类中有重名的属性的话,需要显式调用。(子类.父类.父类的属性)
- 尽量不要继承!
4.interface
- interface由方法集所构成
- GO中interface是隐式声明的,只要包含了接口中的所有方法,就实现了此接口
- 所以每一个type都隐式的实现了一个空interface,因为空interface的方法集为空
资料:
Go语言与面向对象编程
Go语言interface详解
go是面向对象语言吗?