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

发布时间 - 2026-01-11 01:05:58    点击率:

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)
}

运行结果:

我们可以看到,程序为我们自动调用了两个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)
}

运行结果:

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

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

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


# golang  # 函数以及函数和方法的区别  # golang函数  # 一文了解Go语言中的函数与方法的用法  # Go语言七篇入门教程三函数方法及接口  # Go语言中普通函数与方法的区别分析  # Go语言学习函数+结构体+方法+接口  # go语言中函数与方法介绍  # 我们可以  # 可以看到  # 只会  # 可选  # 在我  # 就像  # 多个  # 给他  # 中有  # 我认为  # 要注意  # 给了  # 希望能  # 作为一个  # 可有可无  # 时就  # 谢谢大家  # 什么意思  # 中都  # 接触到 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Blade模板引擎语法_Laravel Blade布局继承用法  移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  智能起名网站制作软件有哪些,制作logo的软件?  WordPress 子目录安装中正确处理脚本路径的完整指南  Python3.6正式版新特性预览  如何选择可靠的免备案建站服务器?  html5如何设置样式_HTML5样式设置方法与CSS应用技巧【教程】  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何快速搭建高效简练网站?  Swift开发中switch语句值绑定模式  如何在宝塔面板中创建新站点?  java获取注册ip实例  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  JavaScript如何操作视频_媒体API怎么控制播放  Win11摄像头无法使用怎么办_Win11相机隐私权限开启教程【详解】  Laravel如何使用Service Container和依赖注入?(代码示例)  iOS验证手机号的正则表达式  Laravel如何使用软删除(Soft Deletes)功能_Eloquent软删除与数据恢复方法  如何在HTML表单中获取用户输入并结合JavaScript动态控制复利计算循环  免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?  香港服务器建站指南:免备案优势与SEO优化技巧全解析  焦点电影公司作品,电影焦点结局是什么?  如何在建站之星绑定自定义域名?  如何安全更换建站之星模板并保留数据?  如何在云主机快速搭建网站站点?  Laravel storage目录权限问题_Laravel文件写入权限设置  Laravel如何使用Gate和Policy进行授权?(权限控制)  Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  深入理解Android中的xmlns:tools属性  Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载  Laravel如何使用Seeder填充数据_Laravel模型工厂Factory批量生成测试数据【方法】  C语言设计一个闪闪的圣诞树  *服务器网站为何频现安全漏洞?  Laravel如何实现模型的全局作用域?(Global Scope示例)  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  音响网站制作视频教程,隆霸音响官方网站?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  Laravel如何使用模型观察者?(Observer代码示例)  Laravel如何使用Eloquent进行子查询  Laravel定时任务怎么设置_Laravel Crontab调度器配置  JavaScript中的标签模板是什么_它如何扩展字符串功能  简历没回改:利用AI润色让你的文字更专业  Python图片处理进阶教程_Pillow滤镜与图像增强  HTML5段落标签p和br怎么选_文本排版常用标签对比【解答】  制作旅游网站html,怎样注册旅游网站?