package main

import "fmt"

type student9 struct {
	name string
	age  int
	sex  string
	addr string
}

func test() {
	fmt.Println("hello world")
}

//func ()  函数类型
func (s *student9) PrintInfo() {
	fmt.Println(*s)
}

//func (string,int,string,string) 函数类型
func (s *student9) EditInfo(name string, age int, sex string, addr string) {
	s.name = name
	s.sex = sex
	s.age = age
	s.addr = addr
}
func main() {
	var s student9
	//通过方法为对象赋值
	//s.EditInfo("武则天", 32, "女", "洛阳")

	//fmt.Printf("%T\n",s.EditInfo)
	f := s.EditInfo

	//隐藏接收调用方法方式
	f("武则天", 32, "女", "洛阳")

	fmt.Println(s)

	//虽然对象相同 但是函数类型不同 不能赋值
	//f=s.PrintInfo//err

}
func main1201() {

	stu := student9{"甄姬", 32, "女", "许昌"}

	//stu.PrintInfo()

	//函数类型定义的变量
	//对象的方法和函数都具有相同的数据类型
	var f func()
	f = stu.PrintInfo
	f()

	f = test
	f()

	fmt.Printf("%T\n", f)
}