Golang Go语言中请教一个函数返回函数的语法

发布于 1周前 作者 itying888 来自 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

8 回复

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,并返回xy的和。在main函数中,通过调用outerFunction获取返回的匿名函数,并将其赋值给add变量,然后调用add函数并输出结果。

这种技术非常有用,尤其是在需要封装行为或创建可配置的回调函数时。希望这个示例能帮助你理解Go语言中函数返回函数的语法。如果有更多问题,欢迎继续提问!

回到顶部