golang 第四课 结构体(struct)、interface{}、方法(func)详解

视频教程地址:

bilibili.com/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的常量、枚举、类型的讲解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值