Go语言编程快速入门:没有 class
P23 go22 - 没有 class
Go语言里没有class
- 没有class,没有对象,没有继承
- 提供了 struct ,可以实现相关的概念
type Location struct {
Lat, Lng float64
}
// 方法的接收者是 Location 类型
func (l Location) IsPositive() bool {
if l.Lat > 0 && l.Lng > 0 {
return true
}
return false
}
func main() {
loc1 := Location{10.0, 20.0}
loc2 := Location{10.0, -20.0}
fmt.Println(loc1, loc2)
fmt.Println(loc1.IsPositive())
fmt.Println(loc2.IsPositive())
}
构造函数
- 自己按上图方法,定义一个 NewLocation 方法
- 约定New开头,为构造用的函数
New函数
自定义Person作业
- Person 的结构体
- 添加 toString 方法
- 有New的实现可以传入 name/age
package main
import (
"fmt"
)
type Person struct {
name string
age int8
}
func (p Person) New(name string, age int8) Person {
p.name = name
p.age = age
return p
}
func (p Person) toString() string {
// 这里有点小问题,关于 int8 -> string 并非想要的结果
return p.name + string(p.age)
}
func main() {
// 这里必须传3个参数吗?
p1 := Person.New(Person{}, "aric", 100)
p2 := Person{name: "Tom", age: 25}
fmt.Println(p1.toString())
fmt.Println(p2.toString())
}
// 优化版
package main
import (
"fmt"
)
type Person struct {
name string
age int8
}
func New(name string, age int8) *Person {
return &Person{
name: name,
age: age,
}
}
func (p Person) toString() string {
// 这里有点小问题,关于 int8 -> string 并非想要的结果
return p.name + string(p.age)
}
func main() {
p1 := New("aric", 100)
p2 := Person{name: "Tom", age: 25}
fmt.Println(p1.toString())
fmt.Println(p2.toString())
}
参考