Go语言基础14——方法和接收者

一、方法定义

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()
}

你可能感兴趣的:(Go语言基础14——方法和接收者)