Go的函数和Python的函数有许多相似的地方,两者都支持变长函数,支持返回多个返回值。但是Golang作为静态编译型语言在语法上相比Python而言更加的严谨一些,这个也无可厚非了。
两者最大的区别在我看来是Python是面向对象的语言,它是有类这个概念的,所以在Python中函数就是方法,这两者没有本质的区别。但是由于Golang不是面向对象语言,没有类的这个概念,所以Go的类需要使用结构体来实现。因此在Go中有结构体绑定的函数叫方法,这个和别的语言是有区别的。
Go规定如果需要被导出的函数,即可以被外部包访问调用的函数,函数名首字母英文大写,反之亦然。
一个完整的函数声明结构格式如下:
func funcName(input type1, input2 type2) (output1 type1, output2 type2) { // 逻辑代码 return value1, value2 // 返回多值 }
普通函数
// 返回两数之和 func muti(x, y int) int { return x * y }
注意:如果函数参数中多个参数类型相等,可以将类型省略。
// 交换两参数 func swap(x, y string) (string, string) { return y, x }
参数变长函数
func strJoin(str ...string) string { return strings.Join(str, "==") }
目前来说,Go中的变长参数只能是同一种类型,否则编译会报错。
匿名函数和闭包
// 匿名函数 max := func(x, y int) int { if x > y { return x } return y } // 闭包 func countRecord() func() int { i := 0 return func() int { i++ return i } }
使用结构体实现“类”
因为Go没有类的概念,需要通过结构体的函数绑定来实现类的功能,而此时函数也不叫函数了,在这里应该叫方法。
package main import ( "fmt" ) type Rectangle struct { length float32 width float32 } func main() { var r Rectangle r.width = 12 r.length = 24 fmt.Printf("面积为:%f", r.getArea()) } func (r Rectangle) getArea() float32 { return r.length * r.width }
总结
Go的函数形式只有这么几种的话那也太平平无奇了,事实上Go语言函数还有很多比较先进的思想,例如多返回值、延迟语句,Panic异常可Recover异常捕获...这些函数特点可以更高效的编写Go语言的函数。
更高阶的用法需要等到后期我对概念更加理解之后再来分享,这篇文章仅仅用来记录学习过程。
JinF
冲冲冲!