GO对象方法的创建和使用
在Go语言中,可以给任意类型(包括内置类型,但不包括指针类型)添加相应的方法。
如下面的这个例子,定义了一个新类型Integer,它和int一样,只是为它内置的int类型增加了个新方法Less()
type Integer int func (a Integer) Less(b Integer) bool { return a < b } func main() { var a Integer = 1 if a.Less(2) { fmt.Println("less then 2") } }
Example1
package main import "fmt" //1、定义函数类型 定义结构体名称 //2、为已存在的数据类型起别名 type Int int //对象的方法 //func (对象)方法(参数列表)(返回值列表){ // 代码体 //} func (a Int) add(b Int) Int { fmt.Println(a) fmt.Println(b) return a + b } func main() { //将源文件编译成可执行程序 //编译过程 //1、预处理 包展开 替换数据类型 去掉注释 //2、编译 如果代码有错会提示 如果没错会编译成汇编文件 //3、汇编 将汇编文件转成二进制文件 //4、链接 将支持的库链接到程序中 变成可执行程序 //类型别名会在编译时进行转换 var a Int = 10 var b Int =20 //var b Int = 20 //包.函数 结构体.成员 对象.方法 //sum:=a.add(b) //对象.方法 //想要使用方法 必须是相同类型的对象才可以 sum:=b.add(a) fmt.Println(sum) //var b int = 20 //fmt.Println(a + 10) //fmt.Printf("%T\n", a) }
结构体作为对象的使用
package main import "fmt" type student5 struct { name string age int sex string score int addr string } //函数 func Print() { fmt.Println("hello world") } //结构体类型可以作为对象类型 func (s student5) Print() { fmt.Printf("%p\n",&s) fmt.Printf("姓名:%s\n", s.name) fmt.Printf("年龄:%d\n", s.age) fmt.Printf("性别:%s\n", s.sex) fmt.Printf("成绩:%d\n", s.score) fmt.Printf("地址:%s\n", s.addr) } func main() { //创建对象 stu := student5{"贾政", 58, "男", 80, "贾府"} fmt.Printf("%p\n",&stu) //对象.方法 stu .Print() fmt.Println(stu) stu1 := student5{"贾玲", 29, "女", 99, "北京"} stu1.Print() //打印错误日志使用函数 //print() //函数调用 //Print() //对象的方法名可以和函数名重名 但是相同的对象方法名不能重名 //fmt.Println(stu.Print) //fmt.Println(stu1.Print) //打印函数在代码区的地址 fmt.Println(Print) }