Golang闭包函数用法示例
Golang闭包函数用法示例
package main
import (
"fmt"
)
type test struct {
name string
fn func() string
}
var d = []test{{
"Google",
func() string {
str := read()
return str
}}}
func read() string {
str := "golang"
return str
}
func main() {
for i := 0; i < len(d); i++ {
name := d[i].name
lang := d[i].fn
fmt.Println(name, lang)
}
}
请告诉我为什么我没有得到预期的语言输出:- 输出:- Google 0x483280 期望输出:- Google golang 这是我需要的
更多关于Golang闭包函数用法示例的实战教程也可以访问 https://www.itying.com/category-94-b0.html
5 回复
谢谢,
在你的结构体中,fn 只是一个返回字符串的函数,所以你实际执行的是:
var fn = func() string{return "google"}
print(fn)
因此正确的做法是:
var fn = func() string{return "google"}
var s = fn()
print(s)
问题在于您没有调用闭包函数。在代码中,d[i].fn 是一个函数类型的变量,直接打印它会显示函数的内存地址而不是执行函数的结果。
要获得预期的输出,您需要调用这个函数:d[i].fn()。
以下是修正后的代码:
package main
import (
"fmt"
)
type test struct {
name string
fn func() string
}
var d = []test{{
"Google",
func() string {
str := read()
return str
}}}
func read() string {
str := "golang"
return str
}
func main() {
for i := 0; i < len(d); i++ {
name := d[i].name
lang := d[i].fn() // 调用函数获取返回值
fmt.Println(name, lang)
}
}
输出:
Google golang
关键区别在于:
- 原代码:
lang := d[i].fn- 这获取的是函数本身 - 修正后:
lang := d[i].fn()- 这调用函数并获取其返回值
在Go语言中,函数是一等公民,可以作为值传递和存储。当您需要执行函数并获取结果时,必须使用括号 () 来调用它。

