栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

第001节:方法

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

第001节:方法

1.1 什么是方法

Go 语言中同时有函数和方法。一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集

方法只是一个函数,它带有一个特殊的接收器类型,它是在func关键字和方法名之间编写的。接收器可以是struct类型或非struct类型。接收方可以在方法内部访问。

方法能给用户自定义的类型添加新的行为。它和函数的区别在于方法有一个接收者,给一个函数添加一个接收者,那么它就变成了方法。接收者可以是值接收者,也可以是指针接收者。

在调用方法的时候,值类型既可以调用值接收者的方法,也可以调用指针接收者的方法;指针类型既可以调用指针接收者的方法,也可以调用值接收者的方法。

也就是说,不管方法的接收者是什么类型,该类型的值和指针都可以调用,不必严格符合接收者的类型。

1.2 方法的语法

定义方法的语法

func (t Type) methodName(parameter list)(return list) {}func funcName(parameter list)(return list){}

实例代码:

package mainimport (      "fmt")type Employee struct {      name     string    salary   int    currency string}func (e Employee) displaySalary() {      fmt.Printf("Salary of %s is %s%d", e.name, e.currency, e.salary)}func main() {      emp1 := Employee {        name:     "Sam Adolf",        salary:   5000,        currency: "$",    }    emp1.displaySalary() //Calling displaySalary() method of Employee type}

可以定义相同的方法名

示例代码:

package mainimport (    "fmt"    "math")type Rectangle struct {    width, height float64}type Circle struct {    radius float64}func (r Rectangle) area() float64 {    return r.width * r.height}//该 method 属于 Circle 类型对象中的方法func (c Circle) area() float64 {    return c.radius * c.radius * math.Pi}func main() {    r1 := Rectangle{12, 2}    r2 := Rectangle{9, 4}    c1 := Circle{10}    c2 := Circle{25}    fmt.Println("Area of r1 is: ", r1.area())    fmt.Println("Area of r2 is: ", r2.area())    fmt.Println("Area of c1 is: ", c1.area())    fmt.Println("Area of c2 is: ", c2.area())}

运行结果

Area of r1 is:  24Area of r2 is:  36Area of c1 is:  314.1592653589793Area of c2 is:  1963.4954084936207

虽然method的名字一模一样,但是如果接收者不一样,那么method就不一样method里面可以访问接收者的字段调用method通过.访问,就像struct里面访问字段一样

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/793638.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号