• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

GO 方法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一 方法声明

在函数声明时,在其名字之前放上一个变量,即是一个方法。这个附加的参数会将该函数附加到这种类型上,即相当于为这种类型定义了一个独占的方法

func (i ST) add(q int) int {
    return i.x + q
}

func add(i ST, q int) int {
    return i.x + q
}

func main() {

    st1 := ST{100}
    fmt.Println(st1.add(200))
这种st1.add的表达式叫做选择器,因为他会选择合适的对应p这个对象的add方法来执行

二 基于指针对象的方法

当这个接受者变量本身比较大时,我们就可以用其指针而不是对象来声明方法

func (i *ST) add2(q int) int {
    return i.x + q
}
//这个方法的名字是(*ST).add2。这里的括号是必须的

func main() {

    st1 := ST{100}
    fmt.Println(st1.add2(200)) //编译器会隐式地帮我们用&st去调用add2这个方法

三 嵌入结构体扩展类型


type ST struct {
    x int
}

type ST2 struct {
    ST //在类型中内嵌的匿名字段也可能是一个命名类型的指针,比如*ST,这种情况下字段和方法会被间接地引入到当前的类型中。添加这一层间接关系让我们可以共享通用的结构并动态地改变对象之间的关系
    y int
}

func (i ST) add(q int) int {
    return i.x + q
}

func main() {

    st0 := ST2{ST{100}, 200}

    fmt.Println(st0.add(100))

我们可以把ST2类型当作接收器来调用ST里的方法,即使ST2里没有声明这些方法。一个ST2并不是一个ST,但他"has a"ST,并且它有从ST类里引入的add方法。
内嵌字段会指导编译器去生成额外的包装方法来委托已经声明好的方法
再看一个例子
var cache = struct {
    sync.Mutex
    mapping map[string]string
}{
    mapping: make(map[string]string),
}


func Lookup(key string) string {
    cache.Lock()
    v := cache.mapping[key]
    cache.Unlock()
    return v
}




鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
SQL SERVER 2008 无法附加数据库 标题: Microsoft SQL Serve ...发布时间:2022-07-10
下一篇:
Go 语言 HTTP Server 源码分析发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap