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,怎样注册旅游网站?

