函数名大写开头,可以被其他包访问
函数名小写开头,只能被本包访问
func funcname(p1 type1, p2 type2,...) (result1 type1 , result2, type2 ...)
单个返回值-例子
func add(a ,b int) int {
return a+b
}
调用
c := add(1,8);
fmt.Printf("c=%d \n",c)
多个返回值
func moreOper(a ,b int) (int,int) {
return a+b,a*b
}
调用
a,b := moreOper(1,9)
fmt.Printf("a=%d,b=%d \n",a,b)
输出
可变参数a=10,b=9
func sum(args ...int) {
total :=0;
for _,v :=range args {
total+=v
}
fmt.Printf("total=%d \n",total)
}
调用
函数作为类型sum(1,2,3,4,5,6,7,8,9);
import "fmt"
/**
是否基数
*/
func isOdd(num int) bool {
if num%2==1 {
return true
}
return false
}
/**
是否偶数
*/
func isEven(num int) bool {
if num%2==0 {
return true
}
return false
}
// 声明函数类型
type myBoolFunc func(int) bool
func filter(array []int, myFunc myBoolFunc) []int {
var result [] int
for _,v :=range array {
if myFunc(v) {
result = append(result,v)
}
}
return result;
}
func main() {
array := []int{1,2,3,4,5,6};
oddArray := filter(array,isOdd);
fmt.Println("oddArray=",oddArray)
evenArray := filter(array,isEven);
fmt.Println("evenArray=",evenArray)
}
输出
匿名函数oddArray= [1 3 5]
evenArray= [2 4 6]
例子1
func main() {
myadd := madd;
sum := myadd(3,5);
fmt.Printf("sum=%d \n",sum)
multiply := func(x,y int) int{ return x*y}
multiplyvalue := multiply(3,6)
fmt.Printf("multiplyvalue=%d \n",multiplyvalue)
}
func madd(x int ,y int) int{
return x+y;
}
例子2
total := func(num int) int {
sum:=0
for i:=1;i<=num;i++ {
sum +=i
}
fmt.Printf("sum=%d \n",sum)
return sum
}(100)
fmt.Printf("total=%d \n",total)
递归函数
package main
import "fmt"
func fibonacci(n int) int {
if n<2 {
return n
}
return fibonacci(n-2) + fibonacci(n-1)
}
func main() {
var i int
for i=0;i<10;i++ {
fmt.Printf("%d \t",fibonacci(i))
}
}