当前位置:   article > 正文

golang 第四课 结构体(struct)、interface{}、方法(func)详解_golang func a(b string, c interface{})

golang func a(b string, c interface{})

视频教程地址:

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)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

接口 (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)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

这样改 值也会变

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)
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

结构体(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
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45

上一篇: 第二课 golang的常量、枚举、类型的讲解

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/907921
推荐阅读
相关标签
  

闽ICP备14008679号