一、介绍。

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)

留神,咱们调用函数的时候,都没有加上(),是因为在外面咱们加上了括号,不然就两个括号了。