视频教程地址:
/video/BV1aU4y1h7dE/
func
方法
跟其它语言的差不多,多了一个可以传 0 个 或多个参数的形式
// 无参数 无返回值
func fn() {
// 方法的格式
// func funcName(arg type ...) ([arg] type ...) { // 返回值只有一个可以省略括号
// }
}
// 有参数 有返回值
func fn1(arg1 int, arg2 int) (a int) { // 返回参数名可以指定,这样在方法体内就不需要声明了
a = arg1 + arg2
return
}
// 0个或多个参数
func fn2(args ...int) {
fmt.Printf("%T, %v\n", args, args)
a := 0
for _, k := range args {
a += k
}
fmt.Println("a val:", a)
}
接口 (interface{}
)
接口里面定义的是方法,只要这个类型(type)实现了这个接口里的方法,就是实现了这个接口,不需要显示的继承
func main() {
a := 10
num := Num(a)
b := Ad(num, 10)
fmt.Println("b:", b) // 20
fmt.Println("a:", a)// 10
fmt.Println("num:", num)// 10
}
// num值为什么没有改变呢
type It1 interface {
Add(int) int
Sub(int) int
}
type Num int
func (num Num) Add(n int) int {
a := int(num)
a += n
num = Num(a)
return a
}
func (num Num) Sub(n int) int {
a := int(num)
a -= n
num = Num(a)
return a
}
func Ad(num It1, n int) int {
return num.Add(n)
}
这样改 值也会变
func main() {
a := 10
num := Num(a)
fmt.Println("M ADDR : ", &num)
b := Ad(&num, 10)
fmt.Println("b:", b)
fmt.Println("a:", a)
fmt.Println("num:", num)
}
type It1 interface {
Add(int) int
Sub(int) int
}
type Num int
func (num *Num) Add(n int) int {
a := int(*num)
a += n
*num = Num(a)
fmt.Println("ADD:", *num)
return a
}
func (num *Num) Sub(n int) int {
a := int(*num)
a -= n
*num = Num(a)
return a
}
func Ad(num It1, n int) int {
return num.Add(n)
}
结构体(struct
)
type Person struct {
Name string
Age uint8
Money int
}
func (person *Person) GetName() string {
return person.Name
}
func (person *Person) AddIncome(money int) int {
person.Money += money
return person.Money
}
func Str() {
// 声明带创建
student1 := Person{Name: "zzh", Age: 18}
fmt.Printf("stu1:%+v\n", student1)
var student2 Person
student2.Name = "zzh2"
student2.Age = 19
fmt.Printf("stu2:%+v\n", student2)
AddUserMoney(&student1, 10)
AddUserMoney(&student2, 20)
fmt.Printf("stu1:%+v\n", student1)
fmt.Printf("stu2:%+v\n", student2)
}
type Human interface {
GetName() string // 接口定义了一个方法 GetName(), 返回一个字符串
AddIncome(int) int // 传入一个 int 类型的参数值,返回一个 int 类型
}
func AddUserMoney(user Human, money int) int {
totalMoney := user.AddIncome(money)
return totalMoney
}
上一篇: 第二课 golang的常量、枚举、类型的讲解