首页 > 编程语言 > 详细

GO语言 方法 接口

时间:2019-12-13 00:47:11      阅读:106      评论:0      收藏:0      [点我收藏+]

方法

1.什么是方法

方法其实就是一个函数,在 func 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。

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

2.方法的定义使用

1.方法绑定给结构体
//1.定义结构体
type Person struct {
    name string
    age int
    sex int
}
//2.给Person结构体加一个打印名字的方法
func (a Person)printName()  {
    fmt.Println(a.name) //接收器直接使用结构体内属性
}
//3.main函数中使用
var p *Person=&Person{name:"lqz"} //实例化
p.printName() //调用方法

3.指针接收器和值接收器

1.值接收器和指针接收器的区别在于方法接收器的类型;
func (a Person)changeName(name string) //值接收器
unc (a *Person)changeName(name string) //指针接收器
2.
//func (值)changeName(name string):在内部修改值,不会影响外部的值
//func (指针)changeName(name string):在内部修改值,会影响外部的值

示例:

1.值接收器方法
//1.定义结构体
type Person struct {
   name string
   age int
   sex int
}
//2.绑定方法
func (a Person)changeName(name string) {  
                           a.name=name 
                            fmt.Println(a) //{egon 0 0}
}
//3.main函数调用
p.changeName("egon")
fmt.Println(p) //{lqz 0 0}

2.指针接收器方法
//1.定义结构体
type Person struct {
   name string
   age int
   sex int
}
//2.绑定方法
func (a *Person)changeName(name string)  {
    a.name=name
    fmt.Println(a) //&{egon 0 0}
}
//3.main函数调用

    //var p *Person=&Person{name:"lqz"}
    //这种也可以,go给你处理了
        var p Person=Person{name:"lqz"}
    p.changeName("egon")
    fmt.Println(p)//{egon 0 0}

4.匿名字段提升方法

前提:属于结构体的匿名字段的方法可以被直接调用,就好像这些方法是属于定义了匿名字段的结构体一样。匿名才会提升不匿名不会提升。如果子类有就用自己的,没有用父类的

1.定义
type Person1 struct {
    name string
    age int
    sex int
    Hobby
}

type Hobby struct {
    id int
    hobbyname string
}
2.绑定方法
func (h Hobby)printHobbyId()  {
    fmt.Println(h.id)
}

func (a Person1)printName()  {
    fmt.Println(a.name)
}
func (a Person1)printHobbyId()  {
    fmt.Println("我重写了")
    //重用父类的方法
    //a.Hobby.printHobbyId()
    fmt.Println(a.Hobby.id)
}
3.main函数中
    //p:=Person1{name:"lqz",Hobby:Hobby{id:10}}
    //
    ////正常操作
    ////p.Hobby.printHobbyId()
    ////非正常操作  方法也提升了
    //p.printHobbyId()

5.补充

type Person2 struct {
    name string
    age int
    sex int
}
//方法中使用值接收器
func (a Person2)printName()  {
    fmt.Println(a.name)

}
//方法中使用指针接收器
func (a *Person2)printName2()  {
    fmt.Println(a.name)
}
//函数中使用值参数
func printName(a Person2)  {
    fmt.Println(a.name)
}
//在函数中使用指针参数
func printName2(a *Person2)  {
    fmt.Println(a.name)
}

func main() {
    //p:=&Person2{name:"lqz"}
    //调用值接收器
    //p.printName()
    //调用指针接收器
    //p.printName2()
    //调用值函数
    //printName(p)
    //调用指针函数
    //printName2(&p)
    //不管是指针接收器还是值接收器,都可以使用值来调用
    //不管是指针接收器还是值接收器,都可以使用指针来调用
    //函数中,是什么参数,就得传什么参数

接口

1.什么是接口

接口是一系列方法的集合。

1.
type 接口名 interface{
    方法一
    方法二
}

2.定义接口

 

 


 

 

 

 

GO语言 方法 接口

原文:https://www.cnblogs.com/tfzz/p/12032329.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!