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