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