package main

import "fmt"

// 项目开发中可以为type声明的类型编写一些方法,从而实现对象.方法的操作

// 声明类型
type myInt int  // int有的功能myInt都有

// 为MyInt类型自定义一个指针方法
// 此处可以使指针,可以是类型 *myInt myInt
// 如果是类型会拷贝一份,如果是指针不拷贝
func (i *myInt) doSomething(a, b int) int {
	return a + b + int(*i)
}

// 结构体也是基于type声明的类型,所以也可以使用此方式为结构体定义一些方法
type person struct {
	name string
	age int
	blog string
}
// 为person结构体类型自定义一个指针方法
// 注意:此处如果不是指针类型的话,在执行方式时,结构体对象就会被重复拷贝一份
// 如果是指针类型,就不会拷贝,节省内存空间
func (p *person) doSomething(a, b int) int {
	return a + b + p.age
}

func main() {
	var a myInt = 11
	ret := a.doSomething(1, 3)
	fmt.Println(ret)

	p := person{"mayanan", 28, "www.mayanan.cn"}
	age := p.doSomething(0, 0)
	fmt.Println(age)

}