一、介绍。
go语言的函数参数,个别咱们罕用的是,一个理论的值,比方 int,或者struct,map,指针等。
但在一些高阶的用法中,常见函数,作为参数,比方net/http库等。明天咱们学一下如何应用函数作为函数的参数。
二、入门应用。
其实说白了,函数为参数,被另一个函数应用。就是函数调用函数
咱们在一个函数内,调用另外一个函数。
2.1 应用一个 最简略的 无参,无返回函数。
在这里,咱们参数为printOne()或printTwo()。
咱们在funcNoParam中应用它。
func printOne() { fmt.Println("one")}func printTwo() { fmt.Println("two")}func funcNoParam(f func()) { f()}func TestFuncNoParam(t *testing.T) { funcNoParam(printOne) funcNoParam(printTwo)}
在下面的示例中,咱们应用printOne以及printTwo 作为 funcNoParam的参数。
执行完后果为:
=== RUN TestFuncNoParamonetwo--- PASS: TestFuncNoParam (0.00s)
能够只有合乎func()
,咱们就能够传进到funcNoParam(f func())
中。
能够执行无数种函数调用。
2.2 调用一个有参函数
在这里printOneParam(p int),printOnePlus(p int),都是为一个参数的函数。
printOneParam(p int) 为间接打印出一个p值printOnePlus(p int) 为打印出一个 p++值
咱们应用funcParamOne(f func(a int))来把他们作为一个参数传进来,供本人调用。
func printOneParam(p int) { fmt.Println(p)}func printOnePlus(p int) { fmt.Println(p + 1)}func funcParamOne(f func(a int)) { num := 100 f(num)}func TestFuncParamOne(t *testing.T) { funcParamOne(printOneParam) funcParamOne(printOnePlus)}
在这里,咱们定义了一个函数funcParamOne(f func(a int))
它的参数是一个带有一个int参数的函数,咱们在funcParamOne调用了f。
而后咱们咱们调用了两个合乎 func(a int)
类型的函数,printOneParam以及printOnePlus。
后果为:
=== RUN TestFuncParamOne100101--- PASS: TestFuncParamOne (0.00s)
2.3 调用一个有返回值函数
func funcInt64(f func() int64) string { return fmt.Sprintf("string之为: %d", f())}func TestFuncInt64(t *testing.T) { t.Log(funcInt64(rand.Int63)) t.Log(funcInt64(time.Now().Unix))}
在这里,咱们调用了rand.Int63(),以及 time.Now().Unix()
输入后果:
=== RUN TestFuncInt64 string之为: 5577006791947779410 string之为: 1676257027--- PASS: TestFuncInt64 (0.00s)
留神,咱们调用函数的时候,都没有加上()
,是因为在外面咱们加上了括号,不然就两个括号了。