Go方法(一)

作者: 草莓君_ | 来源:发表于2019-08-02 16:27 被阅读0次

定义

方法是与对象实例绑定的特殊函数。
方法是面向对象编程的基本概念,用于维护和展示对象的自身状态。对象是内敛的,每个实例都有各自不要的独立特征,以属性和方法来暴露对外通信接口。普通函数则专注于算法流程,通过接受参数来完成特定逻辑运算,并返回最终结果。换句话说,方法是有关联的,而函数通常没有。
方法和函数定义语法区别在于前者有前置实例接收参数(receiver),编译器以此确定方法所属类型。在某些语言里,尽管没有显式定义,但会在调用时隐式传递this实例参数。
可以为当前包,以及除接口和指针以外的任何类型定义方法。

type N int

func (n N) toString() string {
    return fmt.Sprintf("%#x", n) //输出ASCII码
}
func main() {
    var a N = 25
    println(a.toString())
}

方法同样不支持重载(overload)。receiver参数名没有限制,按惯例会选用简短有意义的名称(不推荐使用this、self)。如方法内部并不引用实例,可省略参数名,仅保留类型。

type N int
func (N) test() {
    println("hello world")
}

方法可看作特殊的函数,那么receiver的类型自然可以是基础类型或指针类型。这回关系到调用时对象实例是否被复制。

type N int
func (n N) value() {
    n++
    fmt.Printf("v: %p, %v\n", &n, n)
}

func (n *N) pointer() {
    (*n)++
    fmt.Printf("v: %p, %v\n", n, *n)
}

func main() {
    var a N = 25
    a.value()
    a.pointer()
    fmt.Printf("v: %p, %v\n", &a, a)
}

输出:

v: 0xc00008e008, 26     //可以看到指针地址改变,接受者复制了数据
v: 0xc00008e000, 26
v: 0xc00008e000, 26

相关文章

  • 第04天(面对对象编程)_03

    11_方法的继承.go 12_方法的重写.go 13_方法值.go 14_方法表达式.go 15_接口的定义和实现.go

  • golang系列教程

    Go包管理 Go开发工具 Go Doc 文档 Go 数组 Go 切片 Go Map Go 类型 Go 函数方法 G...

  • Go方法(一)

    定义 方法是与对象实例绑定的特殊函数。方法是面向对象编程的基本概念,用于维护和展示对象的自身状态。对象是内敛的,每...

  • go语言中的方法

    go支持OO语言的一些特性,方法就是其中之一。本文将介绍go语言中方法相关的概念。 方法声明 在go语言中,我们可...

  • 21. Go 协程

    21. Go 协程 Go 协程是什么? Go 协程是与其他函数或方法一起并发运行的函数或方法。Go 协程可以看作是...

  • 2021-03-04 - 2

    执行方法1 go build 执行代码的路径 例如 :go build /Users/apple/go/src/g...

  • go语言array, slice, map(四)

    array go语言数组,定义方法如下: var arr [n]type 声明方法 go语言也支持多维数组 sli...

  • go test相关命令记录

    1.执行单个*_test.go文件下的所有方法 go test -v demo_test.go demo.go 2...

  • 博士「快毕业」的方法

    原文链接:博士「快毕业」的方法 To go, or not to go. 莎士比亚写下了“to be or not...

  • go 方法

    Go 既允许使用值,也允许使用指针来调用方法,不必严格符合接收者的类型。

网友评论

    本文标题:Go方法(一)

    本文链接:https://www.haomeiwen.com/subject/mzildctx.html