编辑代码

package main
import "fmt"

//方法:Go 中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,而不仅仅是 struct
/*语法格式:
func (recevier type) methodName(参数列表)(返回值){}
recevier type     特定类型,如指针、别名,结构体 
methodName 	      方法名
*/

//定义结构体
type Student struct {
	name string
	age  int
}

//NewPerson 构造函数
func NewStudent(name string, age int) *Student {
	return &Student{
		name: name,
		age:  age,
	}
}

//普通函数
func add (a ,b int) (sum int) {
    sum = a+b
    return
}

//方法
func (s Student) getStudent (name string ,age int) Student{
    s.name = name
	s.age = age
	return s
}

//指针接收方法
func (s *Student) get (name string ,age int) Student{
    s.name = name
	s.age = age
	return *s
}

func main () {
    //普通函数
   fmt.Println(add(2,3))
    //结构体构造函数
    p1 := NewStudent("苏轼", 25)
    fmt.Println(p1)

   //实例化结构体再调用方法赋值
   var s Student
   stu := s.getStudent("李白",12)
   fmt.Println(stu)

   //指针类型调用方法一
   var s2 *Student
   s2 = &s
   s2.get("李清照",8)
   fmt.Println(s2)
   //指针调用方法二
   u2 := p1.get("go", 787)
   fmt.Println(u2)
}