//定义一个无参无返回值的函数funcsss(){
fmt.Println("今天小仙女超级超级开心呀!")}//定义一个有参无返回值的函数funcaaa(a string, b, c int, d float64){
fmt.Printf("姓名:%s\n年龄:%d\n开心指数;%d\n爆表指数:%f\n", a, b, c, d)}//定义一个不定参数的函数funcbbb(g ...int){
//输出不定参数的长度fmt.Println("len(g)=",len(g))//输出不定参数for i :=0; i <=len(g)-1; i++{
fmt.Printf("g[%d]=%d\n", i, g[i])}//使用foreach语句遍历输出各元素for i, j :=range g {
fmt.Printf("g[%d]=%d\n", i, j)}}
//定义一个无参有返回值的函数funcggg()(int,int,int){
//返回值无名字return1,2,3}funchhh()(d string, e string, f string){
//定义返回值的名字d ="小仙女今天没有课哈哈!"e ="小仙女今天中午吃饭啦!"f ="小仙女今天中午睡午觉啦!"return}+//定义一个有参有返回值的函数//max min 是返回值名称,其顺序和返回值顺序一样//g h 是形参funciii(g, h int)(max, min int){
if g > h {
max = gmin = h}else{
max = hmin = g}return}
不定参数的传递
//不定参数传递//参数的全部传递funcddd(s ...string){
//将ddd全部参数传递给cccccc(s...)}funcccc(s ...string){
//输出参数长度fmt.Println("len(s)=",len(s))//输出不定参数for i :=0; i <=len(s)-1; i++{
fmt.Printf("s[%d]=%s\n", i, s[i])}//用foreach语句遍历输出各元素for i, j :=range s {
fmt.Printf("s[%d]=%s\n", i, j)}}//参数的部分传递funceee(h ...string){
//将eee不定参数的前几位传递过去给ffffff(h[:2]...)//传递h[0]~h[2](不包括h[2])//将不定参数的后面几位传递过去fff(h[2:]...)//传递h[2]之后的全部参数(包括h[2])}funcfff(h ...string){
//输出参数长度fmt.Println("len(h)=",len(h))//用foreach语句遍历输出各元素for i, j :=range h {
fmt.Printf("h[%d]=%s\n", i, j)}}
2、函数类型
递归函数
package mainimport("fmt")//实现1到100的求和funcC(){
var sum intfor i :=1; i <=100; i++{
sum += i}fmt.Printf("sum=%d\n", sum)}//递归函数求1到100的和funcA(i int)int{
if i ==100{
return100}return i +A(i+1)}funcB(i int)int{
if i ==1{
return1}return i +B(i-1)}//Fibonacci数列funcD(i int)int{
if i ==1|| i ==2{
return i -1}returnD(i-1)+D(i-2)}funcmain(){
sum :=A(1)fmt.Println(sum)sum =B(100)fmt.Printf("sum=%d\n", sum)C()fmt.Println("*****************************************")var h intfmt.Printf("请输入一个正整数:")fmt.Scan(&h)result :=D(h)fmt.Printf("result=%d\n", result)}
回调函数
//函数也是一种数据类型,通过type给一个函数类型起名//没有函数名字,没有{}type FuncType func(int,int)int//实现求和funcsum(a,b int)int{
return a+b
}//回调函数 函数有一个参数是函数类型funcaaa(a,b int, c FuncType)int{
returnc(a,b)}funcmain(){
e :=aaa(7,9,sum)fmt.Println("result=",e)}package mainimport("fmt")type FuncType func(int,int)int//类型别名// type long int// type char byte//返回值没有定义名称,return后直接写返回的表达式funcX(a int, b int)int{
return a + b
}funcY(a, b int)int{
return a - b
}funcZ(a, b int)int{
return a * b
}funcmain(){
var s FuncTypes = Xg :=s(1,2)fmt.Printf("result=%d\n", g)s = Yg =s(1,2)fmt.Printf("result=%d\n", g)s = Zg =s(1,2)fmt.Printf("result=%d\n", g)fmt.Println("------------------------------------")g =qqq(2,3,4, a)fmt.Printf("result=%d\n", g)g =qqq(2,3,4, b)fmt.Printf("result=%d\n", g)g =qqq(2,3,4, c)fmt.Printf("result=%d\n", g)}//回调函数type hhh func(int,int,int)intfuncqqq(x int, y int, z int, m hhh)int{
fmt.Println("@@@@")returnm(x, y, z)}funca(x int, y int, z int)int{
return x * y * z
}funcb(x int, y int, z int)int{
return x + y + z
}funcc(x int, y int, z int)int{
return x*y + z
}
匿名函数
package main
import("fmt")funcmain(){
a :=7str :="小仙女"func(){
a =9str ="嘿嘿嘿"fmt.Println(a,str)}()fmt.Println(a,str)//匿名函数,没有函数名字//用变量f1接收函数f1 :=func(){
fmt.Printf("a=%d\nstr=%s\n",a,str)}f1()//函数的调用//给函数起一个别名(sss)然后调用type sss func()//声明一个函数类型的变量f2var f2 sss//将f1赋值给f2f2 = f1//调用函数f2()//定义匿名函数,同时调用func(){
fmt.Printf("a=%d\nstr=%s\n",a,str)}()//()代表调用此匿名函数//函数必须调用 否则报错 或者可以找变量接收 如f1//带参数的匿名函数f3 :=func(i, j int){
fmt.Printf("result = %d\n",i+j)}f3(10,20)func(i,j int){
fmt.Printf("result = %d\n",i*j)}(10,20)//带参数有返回值的匿名函数c,d:=func(m,n int)(max,min int){
if m>n{
max = mmin = n}else{
max = nmin = m}return}(10,20)fmt.Println(c,d)f4:=func(x,y string)string{
fmt.Println(x,y)return x+y}f4("可可爱爱","开开心心")//给函数起一个别名并调用type ggg func(string,string)stringvar f5 gggf5 = f4f5("阳光很暖","微风正好")}