golang 函数以及函数和方法的详解及区别

作者:lqh 时间:2024-02-16 22:33:03 

golang 函数以及函数和方法的区别

在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。到底什么意思呢。

首先函数的格式是固定的,func+函数名+ 参数 + 返回值(可选) + 函数体。例


func main()

{

fmt.Println("Hello go")

}

在golang中有两个特殊的函数,main函数和init函数,main函数不用介绍在所有语言中都一样,它作为一个程序的入口,只能有一个。init函数在每个package是可选的,可有可无,甚至可以有多个(但是强烈建议一个package中一个init函数),init函数在你导入该package时程序会自动调用init函数,所以init函数不用我们手动调用,l另外它只会被调用一次,因为当一个package被多次引用时,它只会被导入一次。


package mypackage

import (
"fmt"
)

var I int

func init() {
I = 0
fmt.Println("Call mypackage init1")
}

func init() {
I = 1
fmt.Println("Call mypackage init2")
}


package main

import (
"demo/mypackage"
"fmt"
)

func main() {
fmt.Println("Hello go.... I = ", mypackage.I)
}

运行结果:

golang 函数以及函数和方法的详解及区别

我们可以看到,程序为我们自动调用了两个init函数,并且是按照顺序调用的。

下面来看方法。


package main

import "fmt"

type myint int

//乘2
func (p *myint) mydouble() int {
*p = *p * 2
return 0
}

//平方
func (p myint) mysquare() int {
p = p * p
fmt.Println("mysquare p = ", p)
return 0
}

func main() {
var i myint = 2
i.mydouble()
fmt.Println("i = ", i)
i.mysquare()
fmt.Println("i = ", i)
}

运行结果:

golang 函数以及函数和方法的详解及区别

我们可以看到方法和函数的区别,方法在func关键字后是接收者而不是函数名,接收者可以是自己定义的一个类型,这个类型可以是struct,interface,甚至我们可以重定义基本数据类型。我们可以给他一些我们想要的方法来满足我们的实际工程中的需求,就像上面一样我重定义了int并给了它一个乘2和平法的方法,这里我们要注意一个细节,接收者是指针和非指针的区别,我们可以看到当接收者为指针式,我们可以通过方法改变该接收者的属性,但是非指针类型缺做不到。

这里的接收者和c++中的this指针有一些相似,我们可以把接受者当作一个class,而这些方法就是类的成员函数,当接收者为指针类型是就是c++中的非const成员函数,为非指针时就是const成员函数,不能通过此方法改变累的成员变量。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

来源:http://blog.csdn.net/d_guco/article/details/53575067

标签:golang,函数
0
投稿

猜你喜欢

  • python命令行参数argparse模块基本用法详解

    2023-07-31 03:14:21
  • goland中文件头自动注释的操作

    2024-05-05 09:32:50
  • asp 去除最后一个逗号为空字符串的代码

    2010-06-09 19:18:00
  • ASP连接Access数据库和SQL server数据库的方法

    2007-08-22 13:16:00
  • sql server中通过查询分析器实现数据库的备份与恢复方法分享

    2012-05-22 18:41:58
  • js弹出新窗口而不会被浏览器阻止的方法

    2010-04-06 12:38:00
  • Python正则表达式之基础篇

    2021-06-17 13:10:45
  • 详解Django模板层过滤器和继承的问题

    2023-02-08 06:28:04
  • js实现的全国省市二级联动下拉选择菜单完整实例

    2023-09-09 05:21:01
  • 编写安全的SQL Server扩展存储过程

    2008-11-25 11:16:00
  • Python 读取 .gz 文件全过程

    2021-11-02 16:01:04
  • 解决layer弹出层msg的文字不显示的问题

    2024-04-23 09:07:51
  • Python数据结构之图的存储结构详解

    2021-03-28 10:42:48
  • Python 爬虫之超链接 url中含有中文出错及解决办法

    2023-07-27 00:25:06
  • request基本使用及各种请求方式参数的示例

    2021-03-31 02:32:52
  • python链表的基础概念和基础用法详解

    2021-02-26 07:13:50
  • python使用Tkinter显示网络图片的方法

    2021-09-26 18:25:38
  • JavaScript 解析 Cookie 的函数

    2007-11-08 11:58:00
  • python中统计相同字符的个数方法实例

    2021-04-21 00:28:58
  • 详解Python基础random模块随机数的生成

    2021-07-29 08:12:01
  • asp之家 网络编程 m.aspxhome.com