文档章节

Go语言的method

SunnyGo
 SunnyGo
发布于 2016/05/27 11:50
字数 598
阅读 243
收藏 2

Go语言中函数是非常重要的,这点和C语言类似,但是又比C语言灵活的多。

method,一般翻译为方法,我也采用这种翻译。

1、method和function的关系:

Go 方法是作用在接收者(receiver)上的一个函数,接收者是某种类型的变量。因此方法是一种特殊类型的函数。(a Go method is a function that acts onvariable of a certain type, called the receiver. So a method is a specialkindof function. ---摘自《The Way to Go》)

method是针对某一类型定义的function,

function可以单独调用,method必须针对某一类型的实例进行调用。

//function 调用方式
package.FuncName()

//method 调用方式
var t package.Type
t.MethodName()

2、method和function的定义

func (struct type) funcName(var type)(return type){

}

红色的func是定义函数的关键字,是不可变的,绿色部分是可选的,当然,如果有这部分,那就不是个函数了,而是一个方法(method)。这个方法只用于这个struct type的实例。蓝色部分是参数部分,参数可以没有但是()不能够省略。黄色部分也是可选的,如果有的话代表的是函数的返回值。这个位置有点奇怪,我们熟悉的语言,不管是java还是C,都会把返回值放在函数名前边,go却把它放到了最后。还有,go中的函数可以有0-n个返回值,并且可以指定返回值的名字。

package main

import (
	"fmt"
)

type Person struct {
	Name string
	Age  int
}

// @Description show person's message
// @Param	name  string
// @Param	age  int

func (student *Person) show(name string, age int) {
	student.Name = name
	student.Age = age
	fmt.Printf("name: %s , Age: %d\r\n", student.Name, student.Age)
}

func main() {
	var p Person
	p.show("Bell", 42)
}

3、为普通类型添加method:

 go语言不允许为简单的基础类型添加method,如:

func (t int) myadd(i, j int) int {

	return i + j

}

编译器会提示:cannot define new methods on non-local type int

不过,通过go语言中的type,我们可以临时定义一个和int具有同样功能的类型(注意,go中用type定义的类型,和C中不一样的一点是,这新定义的类型和原来的类型属于不同的类型,不能直接相互赋值)。

然后对新定义的类型添加方法:

package main

import (
	"fmt"
)

type Int int

func (t *Int) myadd(i, j int) int {

	return i + j

}
func main() {
	var t Int
	fmt.Println(t.myadd(1, 2))
}

 

© 著作权归作者所有

共有 人打赏支持
SunnyGo
粉丝 7
博文 28
码字总数 8249
作品 0
东城
技术主管
私信 提问
Io Language 编程模型

七周七语言上介绍的 Io 编程语言是一种特别的原型语言。 软件的作者描述这门语言,说: ”Everything is an expression composed entirely of messages“ object method 明明是一个对象执行一...

Iolanguage
2014/06/24
254
3
Python staticmethod和classmethod

staticmethod, classmethod 分别被称为静态方法和类方法。 staticmethod 基本上和一个全局函数差不多,只不过可以通过类或类的实例对象(python里说光说对象总是容易产生混淆, 因为什么都是...

索隆
2012/04/27
0
0
Julia 0.5.2 和 0.6.0-rc1 发布,动态编程语言

Julia 0.5.2 和 0.6.0-rc1 发布了,本次更新包括了很多新的语言特性。 Julia是一个新的高性能动态高级编程语言。语法和其他编程语言类似,易于其他语言用户学习。Julia拥有丰富的函数库,提供...

两味真火
2017/05/10
1K
6
golang中method的传值与传地址

golang中,struct的method的形式如下: func (r ReceiverType) funcName(parameters) (results) 如果想要修改struct的成员的值,method被定义时候其ReceiverType必须是struct形式。如果Recei...

alexstocks
2015/01/23
0
1
Apache Groovy 2.4.10,JVM 动态脚本语言

Apache Groovy 2.4.10 了,Groovy 是一门基于 JVM 的敏捷开发语言,它结合了 Python、Ruby 和 Smalltalk 的许多强大的特性。 该版本是 2.4.x 分支系列的维护版本,强烈建议所有使用此分支上旧...

局长
2017/03/20
874
8

没有更多内容

加载失败,请刷新页面

加载更多

树形结构的数据库表Schema设计

程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门、栏目结构、商品分类等等,通常而言,这些树状结构需要借助于数据库完成持久化。然而目前的各种基于关系的数...

太菜鸟
27分钟前
0
0
Pod在多可用区worker节点上的高可用部署

一、 需求分析 当前kubernetes集群中的worker节点可以支持添加多可用区中的ECS,这种部署方式的目的是可以让一个应用的多个pod(至少两个)能够分布在不同的可用区,起码不能分布在同一个可用...

迷你芊宝宝
36分钟前
0
0
使用maven命令上传jar包到仓库

mvn deploy:deploy-file -DgroupId=com.jz.tss.service -DartifactId=tss-service -Dversion=1.9.02-SNAPSHOT -Dfile=E:/Workspace/tss-service/build/oracle/TSS-Service/WEB-INF/lib/TSS-S......

GodIsCj
37分钟前
2
0
mysql 向下无限递归(不使用函数,单纯sql)

表结构和数据 CREATE TABLE table1(id int, name varchar(10), parent_id int); INSERT table1 VALUES (1, 'Home', 0), (2, 'About', 1), (3, 'Contact', 1), (4, 'Legal', 2), ......

一雨成东
37分钟前
0
0
面试官问:ZooKeeper 一致性协议 ZAB 原理

一致性协议有很多种,比如 Paxos,Raft,2PC,3PC等等,今天我们讲一种协议,ZAB 协议,该协议应该是所有一致性协议中生产环境中应用最多的了。为什么呢?因为他是为 Zookeeper 设计的分布式...

Java爬坑之路
41分钟前
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部