Golang中没有类(class)的概念,但是有结构(struct)的概念。在其他语言(比如C++)中,属性是与方法绑定在一起的,而在go中属性与方法是松耦合的。
一个简单的结构:
type Student struct {
name string
id string
score int
}
方法
方法写在结构的外面,比如我们要为Student对象添加getter和setter,我们应该在Student结构外添加如下代码:
func (self *Student) SetName(name string) {
self.name = name
}
func (self *Student) SetId(id string) {
self.id = id
}
func (self *Student) SetScore(score int) {
self.score = score
}
func (self *Student) Name() string {
return self.name
}
func (self *Student) Id() string {
return self.id
}
func (self *Student) Score() int {
return self.score
}
继承
继承是通过在结构里嵌入其他结构来实现对其他结构的继承的。比如以下代码就是Car继承了Object,拥有了Object中定义的字段:
package main
import (
"fmt"
)
type Printer interface {
Print()
}
type Object struct {
Owner string
Price int
}
type Car struct {
Base Object
Brand string
}
func (self *Car) Print() {
fmt.Printf("Owner:%s\n", self.Base.Owner)
fmt.Printf("Price:%d\n", self.Base.Price)
fmt.Printf("Brand:%s\n", self.Brand)
}
func main() {
car := &Car{Object{"coopersong", 1000000}, "BMW"}
car.Print()
}
封装
字段是否对外暴露(公有还是私有)是通过字段名的大小写决定的。
多态多态是通过接口实现的,如果不能确定具体类型,可以先用interface{}类型代替。