关于go:go语法入门将函数作为函数的参数

36次阅读

共计 1513 个字符,预计需要花费 4 分钟才能阅读完成。

一、介绍。

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   TestFuncNoParam
one
two
--- 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   TestFuncParamOne
100
101
--- 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)

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

正文完
 0