Go语言编程快速入门:没有 class

P23 go22 - 没有 class
更新于: 2022-01-19 14:27:02

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())
}
给struct上添加方法

构造函数

  • 自己按上图方法,定义一个 NewLocation 方法
  • 约定New开头,为构造用的函数 

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())
}
优化版Person类实现

参考