一、方法定义
package main
import "fmt"
// Person是一个结构体
type Person struct {
name string
age int8
}
// NewPerson 是一个Person类型的构造函数
func NewPerson(name string, age int8) *Person {
return &Person{
name: name,
age: age,
}
}
// Dream 是为Person类型定义方法
func (p Person) Dream(){
fmt.Printf("%s的梦想是学好Go语言!\n", p.name)
}
// SetAge 是一个修改年龄的方法
// 指针接收者 接收者的类型是指针
func (p *Person) SetAge(newAge int8){
p.age = newAge
}
// SetAge2 是一个使用值接收者来修改年龄的方法
func (p Person) SetAge2(newAge int8){
p.age = newAge
}
func main(){
p1 := NewPerson("Jiayuan", 24) // p1是一个Person类型的指针变量
// (*p1).Dream()
p1.Dream()
// 调用修改年龄的方法
fmt.Println(p1.age)
p1.SetAge(20)
fmt.Println(p1.age)
// 需要修改接收者的值 一定要使用指针类型
p1.SetAge2(30)
fmt.Println(p1.age) // 20?
}
二、为任意类型添加方法
package main
import "fmt"
// 为任意类型添加方法
// 只有自己定义的类型才能定义方法
// 基于内置的基本类型造一个我们自己的类型
type myInt int
func (m myInt) sayHi(){
fmt.Println("hi")
}
func main(){
var m1 myInt
m1 = 100
m1.sayHi()
}