golang函数——可以为类型(包括内置数据类型)定义函数,类似类方法,同时支持多返回值
不可或缺的函数,在Go中定义函数的方式如下:
func (p myType ) funcName ( a, b int , c string ) ( r , s int ) {
return
}
通过函数定义,我们可以看到Go中函数和其他语言中的共性和特性
共性
- 关键字——func
- 方法名——funcName
- 入参——— a,b int,b string
- 返回值—— r,s int
- 函数体—— {}
特性
Go中函数的特性是非常酷的,给我们带来不一样的编程体验。
为特定类型定义函数,即为类型对象定义方法
在Go中通过给函数标明所属类型,来给该类型定义方法,上面的 p myType
即表示给myType声明了一个方法, p myType
不是必须的。如果没有,则纯粹是一个函数,通过包名称访问。packageName.funcationName
如:
//定义新的类型double,主要目的是给float64类型扩充方法
type double float64
//判断a是否等于b
func (a double) IsEqual(b double) bool {
var r = a - b
if r == 0.0 {
return true
} else if r < 0.0 {
return r > -0.0001
}
return r < 0.0001
}
//判断a是否等于b
func IsEqual(a, b float64) bool {
var r = a - b
if r == 0.0 {
return true
} else if r < 0.0 {
return r > -0.0001
}
return r < 0.0001
}
func main() {
var a double = 1.999999
var b double = 1.9999998
fmt.Println(a.IsEqual(b))
fmt.Println(a.IsEqual(3))
fmt.Println( IsEqual( (float64)(a), (float64)(b) ) )
}
上述示例为 float64 基本类型扩充了方法IsEqual,该方法主要是解决精度问题。 其方法调用方式为: a.IsEqual(double)
,如果不扩充方法,我们只能使用函数IsEqual(a, b float64)
入参中,如果连续的参数类型一致,则可以省略连续多个参数的类型,只保留最后一个类型声明。
如 func IsEqual(a, b float64) bool
这个方法就只保留了一个类型声明,此时入参a和b均是float64数据类型。 这样也是可以的: func IsEqual(a, b float64, accuracy int) bool
变参:入参支持变参,即可接受不确定数量的同一类型的参数
如 func Sum(args ...int)
参数args是的slice,其元素类型为int 。经常使用的fmt.Printf就是一个接受任意个数参数的函数 fmt.Printf(format string, args ...interface{})
支持多返回值
前面我们定义函数时返回值有两个r,s 。这是非常有用的,我在写C#代码时,常常为了从已有函数中获得更多的信息,需要修改函数签名,使用out ,ref 等方式去获得更多返回结果。
而现在使用Go时则很简单,直接在返回值后面添加返回参数即可。
摘自:http://www.cnblogs.com/howDo/archive/2013/06/04/GoLang-function.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」