Go 方法的基本概念及使用

人走茶凉 提交于 2020-10-20 04:57:17

方法

  • 基本介绍
    • 在某些情况下,我们要需要声明(定义)方法。比如 Person 结构体:除了有一些字段外( 年龄,姓名..),Person 结构体还有一些行为比如:可以说话、跑步..,通过学习,还可以做算术题。这时就要用方法才能完成。
    • Golang 中的方法是作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是 struct
  • 方法的声明和调用
type A struct {
Num int
}
func (a A) test() {
fmt.Println(a.Num)
}

  • 对上面的语法的说明
    • func (a A) test() {} 表示 A 结构体有一方法,方法名为 test
    • (a A) 体现 test 方法是和 A 类型绑定的

type Person struct{
	Name string
}
//给Person类型绑定一方法
func (person Person) test() {
	fmt.Println("test() name=", person.Name) 
}
func main() {
	var p Person
	p.Name = "tom"
	p.test() //调用方法
}
  • 输出结果:

  • 对上面的总结
    • test 方法和 Person 类型绑定
    • test 方法只能通过 Person 类型的变量来调用,而不能直接调用,也不能使用其它类型变量来调用

  • func (p Person) test() {}... p 表示哪个 Person 变量调用,这个 p 就是它的副本, 这点和函数传参非常相似
type Person struct{
	Name string
}
//给Person类型绑定一方法
func (person Person) test() {
    person.Name = "jack"
	fmt.Println("test() name=", person.Name) 
}
func main() {
	var p Person
	p.Name = "tom"
	p.test() //调用方法
    fmt.Println("main() p.Name=", p.Name)
}
  • 输出结果:


  • p 这个名字,有程序员指定,不是固定, 比如修改成 person 也是可以


方法的使用

  • Person 结构体添加 speak 方法,输出 xxx 是一个好人
type Person struct{
	Name string
}
//给Person结构体添加speak 方法,输出  xxx是一个好人
func (p Person) speak() {
	fmt.Println(p.Name, "是一个goodman~")
}
func main() {
	var p Person
	p.Name = "卤蛋"
        p.speak()
}
  • 输出结果:


  • Person 结构体添加 jisuan 方法,可以计算从 1+..+1000 的结果, 说明方法体内可以函数一样,进行各种运算
type Person struct{
	Name string
}
func (p Person) jisuan() {
	res := 0
	for i := 1; i <= 1000; i++ {
		res += i
	}
	fmt.Println(p.Name, "计算的结果是=", res)
}

func main() {
	var p Person
	p.Name = "卤蛋"
        p.jisuan()
}
  • 输出结果:


  • Person 结构体 jisuan2 方法,该方法可以接收一个数 n,计算从 1+..+n 的结果
type Person struct{
	Name string
}
func (p Person) jisuan2(n int) {
	res := 0
	for i := 1; i <= n; i++ {
		res += i
	}
	fmt.Println(p.Name, "计算的结果是=", res)
}
func main() {
	var p Person
	p.Name = "卤蛋"
        p.jisuan2(18)
}
  • 输出结果:


  • Person 结构体添加 getSum 方法,可以计算两个数的和,并返回结果
type Person struct{
	Name string
}
func (p Person) getSum(n1 int, n2 int) int {
	return n1 + n2
}
func main() {
	var p Person
	p.Name = "卤蛋"
        n1 := 10
        n2 := 20
        res := p.getSum(n1, n2)
        fmt.Println("res=", res)
}
  • 输出结果:

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!