Golang Go语言中请教一个函数返回函数的语法
https://go.dev/play/p/xgmb2tPtMfw
package main
import (
“fmt”
“time”
)
func main() {
// incorrect
abc := time.Now().UTC
fmt.Println(abc())
time.Sleep(1000000000)
fmt.Println(abc())
fmt.Println("-------------------------------")
// correct
bcd := time.Now
fmt.Println(bcd())
time.Sleep(1000000000)
fmt.Println(bcd())
}
上面那种写法,返回的是固定值,编译器优化?
如果我不想自定义一个函数,类似
func utc() time.Time {
return time.Now().UTC()
}
abc := utc
…
或者匿名函数,类似
abc := func() time.Time { return time.Now().UTC()}
我就想直接 inline 定义这个匿名函数,咋整?
谢谢。
Golang Go语言中请教一个函数返回函数的语法
更多关于Golang Go语言中请教一个函数返回函数的语法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
incorrect 你已经把 time.Now()执行了,结果都出来了,后面那个 UTC 函数只是转换而已。因此结果就是固定的
更多关于Golang Go语言中请教一个函数返回函数的语法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
对。那我该怎么让 go 延迟执行这个 time.Now()呢?
函数返回函数<br>// You can edit this code!<br>// Click here and start typing.<br>package main<br><br>import (<br> "fmt"<br> "time"<br>)<br><br>func returnTimeFunc() func() time.Time {<br> return time.Now<br>}<br>func main() {<br><br> // correct<br> bcd := returnTimeFunc()<br> fmt.Println(bcd())<br><br>}<br>
abc : = time.Time.UTC
fmt.Println(abd(time.Now()))
golang 中的 func 是一等公民( first-class )
bcd := func() func() time.Time { return time.Now }
bcd_ := bcd()
fmt.Println(bcd_())
fmt.Println(func() time.Time { return time.Now() }())
都是可以的
在Go语言中,函数可以返回另一个函数,这种特性被称为高阶函数(Higher-Order Functions)。函数返回函数的语法相对直观,下面是一个简单的示例来说明这个语法结构:
package main
import "fmt"
// 定义一个返回函数的函数
func outerFunction(x int) func(int) int {
// 返回一个匿名函数,该匿名函数接收一个int类型参数并返回int类型结果
return func(y int) int {
return x + y
}
}
func main() {
// 调用outerFunction,并将返回的匿名函数赋值给add函数变量
add := outerFunction(10)
// 调用add函数(实际上是outerFunction返回的匿名函数)
result := add(5)
// 打印结果
fmt.Println(result) // 输出: 15
}
在这个示例中,outerFunction
接收一个int
类型的参数x
,并返回一个匿名函数。这个匿名函数也接收一个int
类型的参数y
,并返回x
和y
的和。在main
函数中,通过调用outerFunction
获取返回的匿名函数,并将其赋值给add
变量,然后调用add
函数并输出结果。
这种技术非常有用,尤其是在需要封装行为或创建可配置的回调函数时。希望这个示例能帮助你理解Go语言中函数返回函数的语法。如果有更多问题,欢迎继续提问!