本文共 2049 字,大约阅读时间需要 6 分钟。
视频教程地址:
方法(func)
在 Go 语言中,方法的定义与其他语言相似,但有一个独特的功能:它可以接受零个或多个参数。
- 无参数,无返回值def func fn() {// 方法的格式// func funcName(arg type ...) ([arg] type ...) { // 返回值只有一个可以省略括号// }}
- 有参数,有返回值def func fn1(arg1 int, arg2 int) (a int) {a := arg1 + arg2return}
- 零个或多个参数def func fn2(args ...int) {fmt.Printf("%T, %v\n", args, args)a := 0for _, k := range args {a += k}fmt.Println("a val:", a)}
接口(interface)
接口在 Go 语言中用来定义方法,类似于其他编程语言,但有个特殊之处:只要某个类型实现了接口中的方法,就被认为实现了该接口,无需显式继承。
- 定义接口type It1 interface {Add(int) intSub(int) int}
- 实现接口的型式type Num intfunc (num Num) Add(n int) int {a := int(num)a += nnum = Num(a)return a}func (num Num) Sub(n int) int {a := int(num)a -= nnum = Num(a)return a}
- 接口的应用func Ad(num It1, n int) int {return num.Add(n)}func main() {a := 10num := Num(a)b := Ad(num, 10)fmt.Println("b:", b)fmt.Println("a:", a)fmt.Println("num:", num)}
问题演变:使值变化
将上述代码中的部分逻辑进行调整,确保值得改变:
- 修改后的定义type It1 interface {Add(int) intSub(int) int}type Num intfunc (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 main() {a := 10num := Num(a)fmt.Println("M ADDR : ", &num)b := Ad(&num, 10)fmt.Println("b:", b)fmt.Println("a:", a)fmt.Println("num:", num)}
结构体(struct)
在 Go 语言中,结构体用于定义自定义数据结构。
- 结构体定义type Person struct {Name stringAge uint8Money int}
- 方法定义func (person *Person) GetName() string {return person.Name}func (person *Person) AddIncome(money int) int {person.Money += moneyreturn person.Money}
- 结构体实例化func Str() {student1 := Person{Name: "zzh",Age: 18}fmt.Printf("stu1:%+v\n", student1)var student2 Personstudent2.Name = "zzh2"student2.Age = 19fmt.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() stringAddIncome(int) int}func AddUserMoney(user Human, money int) int {return user.AddIncome(money)}
转载地址:http://ixatz.baihongyu.com/