go语言面向对象之method方法基本用法详解,花语实例

method前言之了解面向对象

如果你对python这么语言比较了解、熟悉,那么可以将go语言的method方法与python的类实例方法等同起来,助于快速、深刻地理解。除此之外,go语言的method方法和struct结构体常常应用于面向对象的编程。

面向对象(OOP)是一种编程思想,除了c语言不擅长之外,其他的大多数计算机语言都更擅长于此,而且正因为这是一种编程思想,所以其原理在各门可以进行面向对象编程的计算机语言那里是相通的,所以,想要了解什么是面向对象和什么是面向过程(POP),可以参考python面向过程的编程思想,打怪游戏实例python的面向对象OOP,打怪游戏实例升级版


go语言method声明语法

go语言的method方法声明的语法跟创建go语言的函数十分相似,不同的是,函数名(方法名)前面多了一个接受体,receiver。而什么是receiver呢?后面会进一步详解。下面是method的语法:

func ( r Receiver ) funcName ( argslist ) ( result list )

method的接受体receiver是什么

上述语法中,receiver可以是除了借口interface之外的任何其他类型,不过一般常用于struct结构体,这跟python类class中的实例方法类似,因此receiver也可以理解为method方法的归属者——类或对象,相当于标记,只有被标记的对象才能使用的方法及相应的程序处理逻辑(代码块),这里之所以强调了相应的程序处理逻辑,是因为方法名是可以重复的,就像方法被重写以配合不同的对象一样。大家可以来看一下下面的实例。

method基本用法实例

package main

import "fmt"

type Rose struct {
	Lan string
}

type Lily struct {
	Lan string
}

func (r Rose) flower_language() {
	fmt.Println("玫瑰常常象征爱情")
	fmt.Println(r.Lan)
}

func (l Lily) flower_language() {
	fmt.Println("百合往往表示纯洁")
	fmt.Println(l.Lan)

}

func main() {
	var rose Rose
	rose.Lan = "十一支玫瑰花语:表示一生只爱一人。"
	var lily Lily
	lily.Lan = "顺利、心想事成、祝福、高贵。"
	rose.flower_language()
	lily.flower_language()
}

代码输出:
玫瑰常常象征爱情
十一支玫瑰花语:表示一生只爱一人。
百合往往表示纯洁
顺利、心想事成、祝福、高贵。

代码解析

如上代码,我们创建了玫瑰和百合两个类别的结构体,并分别实现了以各自类别为receiver接受体的方法,而且方法名一样,通过各自的对象调用该方法,不难发现,输出的结果是跟以各自的类别为接受体的方法一一对应的。这跟python的class实例方法几乎一模一样,至少原理是这样的。由此,我们也不难总结出go语言method方法的职能是什么了——让程序的设计更加高效、简洁。


其他类型的method方法

前面介绍了,method方法可以应用于除了接口interface之外的其他任何类型,我们来尝试一下用float数据类型来创建一个method方法:

float类型的method方法实例

package main

import "fmt"

type F float64

func (f F) f_func() {
	fmt.Printf("这是float64的别名,值为%v \n", f)
}

func main() {
	var f F = 3.1
	f.f_func()

}
代码输出:
这是float64的别名,值为3.1

代码解析

如上代码,我们创建了一个F类作为float64的别名,虽然是别名,但二者并不等同,比如,我们可以用F这个别名调用f_func()函数,但是用float64的变量或对象调用f_func()则会发生undefined的错误。其他的类别,大家可以随便尝试。


全栈后端 / go语法 :













Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.