The Go Programming Language
› http://golang.org/
› Go Playground
Go Projects
› Revel Web Framework
hihanley

关于 Method 和 Function 的疑问

  •  1
     
  •   hihanley · Oct 3, 2021 · 3620 views
    This topic created in 1859 days ago, the information mentioned may be changed or developed.

    Go 语言中,有 Method: func (d Dog) Eat() 和和 Function: func Eat(d Dog),什么情况下该用哪个,有优先用哪个的约定吗?
    最近开发项目时,一个 struct 绑定的 method 越来越多,但是这个 method 又需要 struct 中的内容,所以产生了这个疑问。
    有的 method 需要在某个 method 调用之后才能调用,不写成文档,过一周自己都不明白逻辑。。。设计功力浅薄

    15 replies  •  2021-10-17 01:41:10 +08:00
    masterclock
    masterclock
    Oct 3, 2021
    1
    Method: func (d Dog) Eat() 狗吃
    Function: func Eat(d Dog) 吃狗肉?
    IndexOutOfBounds
    IndexOutOfBounds
    Oct 3, 2021❤️3
    2
    Method 类比 Java 的 Method,Function 类比 Java 的 Static Method
    从面向对象的角度是尽量用 Method
    hihanley
    hihanley
    OP
    Oct 3, 2021
    3
    @masterclock 哈哈,例子不太恰当
    QingXuJiaZhi
    QingXuJiaZhi
    Oct 3, 2021 via Android
    4
    具体问题具体分析,怎么方便怎么来。另外,绑定一大堆 method 也没啥问题,别怕多。
    QingXuJiaZhi
    QingXuJiaZhi
    Oct 3, 2021 via Android❤️1
    5
    “有的 method 需要在某个 method 调用之后才能调用”,这个只要加些防御代码,确保编译时会报错,也不算大问题。
    2i2Re2PLMaDnghL
    2i2Re2PLMaDnghL
    Oct 3, 2021❤️1
    6
    golang 的 method 主要是多态吧。
    function 能 single dispatch 吗?
    lance6716
    lance6716
    Oct 4, 2021 via Android❤️1
    7
    receiver 不是函数类型的一部分,所以某些需要特定类型函数的时候可以传 method
    hihanley
    hihanley
    OP
    Oct 4, 2021
    8
    @cmdOptionKana
    > 这个只要加些防御代码,确保编译时会报错
    大佬,我初学 go,要怎么加防御代码让他编译报错,可以指点一下吗,或者给个关键字
    hihanley
    hihanley
    OP
    Oct 4, 2021
    9
    @lance6716 呃,没有理解。。。“某些需要特定类型函数的时候可以传 method”
    phithon
    phithon
    Oct 4, 2021❤️1
    10
    举个例子,如果你的项目里既有 Cat 又有 Dog 的情况下,就需要用`func (d Dog) Eat()`和`func (c Cat) Eat()`,因为 Go 不支持重载,不可能既有`func Eat(Dog dog)`又有`func Eat(Cat cat)`。
    wqtacc
    wqtacc
    Oct 4, 2021❤️1
    11
    Go 中的方法函数实际上是个语法糖,在内部实现中,结构体或者指针就是它的第一个参数;至于一个方法要依赖另一个的问题,参考下 http 包中的 Request
    aliipay
    aliipay
    Oct 5, 2021
    12
    ide 支持快速找到所有调用某个 method 的代码吗? 我用 goland 基本要几十秒,太难受了
    hihanley
    hihanley
    OP
    Oct 7, 2021
    13
    @aliipay 可以的,几十秒有点离谱,是项目太大了么
    aliipay
    aliipay
    Oct 8, 2021
    14
    @hihanley 有点大,但是也算不上太大吧
    husher123
    husher123
    Oct 17, 2021
    15
    如果用 Method 是不是不方便 Mock,如果用 function,这个 function 可以属于某个 Adapter,然后可以方便的 Mock 这个 Adapter ?
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1289 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 20:41 · PVG 04:41 · LAX 12:41 · JFK 15:41
    ♥ Do have faith in what you're doing.