Go 语言最少有个 main() 函数。
函数声明告诉了编译器函数的名称,返回类型,和参数。
定义:
func function_name( [parameter list] ) [return_types] {
函数体
}
func:函数由 func 开始声明
function_name:函数名称
parameter list:参数列表,指定参数类型、顺序、及参数个数。参数是可选的,也就是说函数也可以不包含参数。
return_types:返回类型,函数返回一列值。return_types 是该列值的数据类型。(没有返回值的函数不需要)
函数体:函数定义的代码集合
package main
import "fmt"
func main() {
var x,y,z int
x,y,z=1,6,3
var res int
res=mymax(x,y,z)
fmt.Println(x,",",y,"和",z,"的最大值为:",res)
}
func mymax(a,b,c int) int{
var res,tmp int
if (a>b){
tmp=a
}else{
tmp=b
}
if(tmp>c){
res=tmp
}else{
res=tmp
}
return res
}
//1 , 6 和 3 的最大值为: 6
函数作为实参
在main函数中创建函数mymax作为实参
package main
import "fmt"
func main() {
var x,y,z int
x,y,z=1,6,3
mymax:=func(a,b,c int) int{
var res,tmp int
if (a>b){
tmp=a
}else{
tmp=b
}
if(tmp>c){
res=tmp
}else{
res=tmp
}
return res
}
fmt.Println(x,",",y,"和",z,"的最大值为:",mymax(x,y,z))
}
//1 , 6 和 3 的最大值为: 6
方法
方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。
func (variable_name variable_data_type) function_name() [return_type]{
/* 函数体*/
}
package main
import "fmt"
/* 定义结构体 */
type Circle struct {
radius float64
}
func main() {
var c1 Circle
c1.radius = 4
fmt.Println("Area of Circle = ", c1.getArea())
}
//Circle 类型对象中的方法
func (c Circle) getArea() float64 {
//c.radius 即为 Circle 类型对象中的属性
return 3.14 * c.radius * c.radius
}
//Area of Circle = 50.24
闭包
Go 语言支持匿名函数,可作为闭包。匿名函数是一个"内联"语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。
举例:创建了函数add(),返回另外一个函数。该函数的目的是在闭包中递增 i 变量
package main
import "fmt"
func main() {
add_func := add(1,2)
fmt.Println(add_func())
fmt.Println(add_func())
fmt.Println(add_func())
add_func2 := add(4,5)
fmt.Println(add_func2())
fmt.Println(add_func2())
fmt.Println(add_func2())
}
// 闭包使用方法
func add(x1, x2 int) func()(int,int) {
i := 0
return func() (int,int){
i++
return i,x1+x2
}
}
/*
1 3
2 3
3 3
1 9
2 9
3 9
*/