Golang回调函数练习与代码分享:https://play.golang.org/p/7AH5xa2w-2c
Golang回调函数练习与代码分享:https://play.golang.org/p/7AH5xa2w-2c https://play.golang.org/p/7AH5xa2w-2c
当我格式化这段代码时,提示“期望表达式”。他们到底想要什么表达式?
https://play.golang.org/p/6MlEdlkgFwb 我发现了一个错误并修复了它。 现在又提示“参数列表中缺少逗号”。我不知道他们想在哪个位置加逗号。 仍在努力解决中。 https://play.golang.org/p/uMFXAcFuX0Z 运行代码时出现以下错误: “prog.go:9:71: 语法错误:意外的int,期望逗号或右括号 prog.go:11:2: 语法错误:语句末尾出现意外的for prog.go:18:6: 语法错误:意外的yearlyincrease,期望左括号 prog.go:23:1: 语法错误:函数体外出现非声明语句” 这些错误信息对我来说完全是个谜。
更多关于Golang回调函数练习与代码分享:https://play.golang.org/p/7AH5xa2w-2c的实战教程也可以访问 https://www.itying.com/category-94-b0.html
不,他没有。他只是将其用作类型。
更多关于Golang回调函数练习与代码分享:https://play.golang.org/p/7AH5xa2w-2c的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
感谢 🙏。明天继续。时间不够了 😕。
我难道没有以同样的方式使用"incomeforthe nextfouryears"作为类型吗?
问题的解答似乎引发了更多疑问。我会继续努力研究。时间有限。感谢您的耐心帮助。
cherilexvold1974:
那么"printInt"是类型名称吗?而"func(int)"是类型?
正确。
GreyShatter:
不要一次性改变所有事情。一次改变,一次成功。
我不明白你在这里指的是什么。
阅读工具告诉你的内容。
什么工具?我不知道工具是什么。
你在这行代码中具体想要实现什么功能?
fmt.Println(incomeforthenextfouryears(func() yearlyincrease, int)(int)int{
让我重新开始。这个练习的目标是实践回调功能……“将一个函数作为参数传递给另一个函数”。
我的想法是创建一个函数,列出几个年份(2019-2023),然后传入一个函数来计算年度增长(我设想从40,000开始,每年增加1000)。尝试这样的做法有意义吗?
好问题,对吧?哈哈
嗯,最终目标是"将一个函数作为参数传递给另一个函数"。
所以我想要打印2019到2024年之间的每一年,并为每一年显示1000的增长量。我尝试创建一个函数来计算增长量,然后在列出每一年时调用该函数。我是否可以使用回调来实现这个目标呢?
你不能在另一个函数内部创建命名函数。你必须创建一个匿名函数并将其赋值给一个变量。这就是你收到该错误的原因。
file.go:11:6 表示在文件 file.go 的第 11 行,第 6 列。但请注意,使用 TAB 缩进时,每个 TAB 计为一列。
cherilexvold1974:
定义类型的目的是什么?
为了简化理解[如果你是初学者]或提高可读性[如果你更有经验]。
不错,只是有几个建议:
- 不要一次性修改所有内容。一次修改 - 一次成功。
- 仔细阅读工具提示的内容。
请多包涵。 你的代码:https://play.golang.org/p/PHODb5FUY-B 我的代码:https://play.golang.org/p/ZegcfjAzHT5 请忽略我的注释。 为什么我在格式化时收到这个错误信息:“prog.go:11:6: expected ‘(’, found test (and 1 more errors)”? 顺便问一下,11:6是什么意思?我明白11这部分;但对6感到困惑。
定义类型的目的是什么? 这样写看起来如何? type yearlyincrease func(int) 尝试应用到我的程序中。
func test(arg printInt) {
for i := 0; i < 5; i++ {
arg(i)
}
}
出现了错误:“prog.go:14:6: expected ‘(’, found test (and 2 more errors)” 查看或忽略并继续你正在做的事情:
很高兴再次收到你的回复。
NobbZ: 你不能在另一个函数内部创建命名函数。必须创建一个匿名函数并将其赋值给变量。这就是你收到该错误的原因。
那么"incomeforthenextfouryears"就是你提到的命名函数吗?那位绅士使用的"printInt"不就是一个命名函数吗?
func main() {
printInt := func(i int) {
fmt.Println(i)
}
printInt(42)
}
cherilexvold1974:
我不明白你在这里指的是什么。
嗯…每个程序都从某个模板开始编写。如果你采用增量式编写代码而非复制粘贴的方式,一次不会遇到太多编译错误。对吧? 编译时错误属于基础级别,只需查阅文档的主页/包中的示例/…最后快速谷歌搜索就能解决。
cherilexvold1974:
我不知道什么是工具。
编译器、代码检查工具、应用程序。
他在使用"printInt"的地方,与我在这个代码中使用"incomeforthe nextfouryears"的位置完全相同。
但我却收到错误信息:“prog.go:11:6: expected ‘(’, found test (and 1 more errors)”
我遗漏了什么?
哪位先生在什么地方使用了 printInt?
我快速浏览后唯一能找到的 printInt 引用是在回调练习…再次尝试 https://play.golang.org/p/7AH5xa2w-2c中,而那里它是一个类型名称。
类型名称既不是命名函数也不是匿名函数。它只是一个类型,虽然类型可以用来描述命名或未命名函数(如果它们属于 func 类型)。
当然。但让我们回到你的目标——将函数作为参数传递给另一个函数。
-
定义参数的类型,例如这样:
type printInt func(int)因为函数也只是一个类型。 -
编写一个参数类型为 printInt 的函数,并在内部使用它
func test(arg printInt) { for i := 0; i < 5; i++ { arg(i) } } -
创建一个 printInt 类型的变量(就像其他类型一样):
var f printInt = func(p int) { fmt.Println(p) } -
调用它
test(f)
就这样。完整示例 - https://play.golang.org/p/Hkf0Da2xO-B
你的代码中存在几个语法错误,主要问题在于函数声明和调用时的参数列表格式不正确。让我逐一分析并提供修复后的代码:
主要问题分析:
- 函数声明语法错误:
yearlyincrease函数的参数列表格式不正确 - 函数调用语法错误:调用
yearlyincrease时参数传递方式错误 - 语句位置错误:在函数体外出现了执行语句
修复后的代码:
package main
import "fmt"
// 修复函数声明 - 添加了正确的参数列表
func yearlyincrease(salary float64, increase float64) float64 {
return salary + (salary * increase / 100)
}
func main() {
salary := 1000.0
// 修复函数调用 - 使用正确的参数传递方式
for i := 1; i <= 5; i++ {
newsalary := yearlyincrease(salary, 10.0)
fmt.Printf("Year %d: %.2f\n", i, newsalary)
salary = newsalary
}
}
关键修复点:
-
函数参数列表:
// 错误 func yearlyincrease(salary float64 increase float64) float64 // 正确 func yearlyincrease(salary float64, increase float64) float64 -
函数调用:
// 错误 yearlyincrease(salary 10.0) // 正确 yearlyincrease(salary, 10.0) -
语句位置:所有执行语句必须放在函数内部(如
main函数中)
运行结果:
代码现在可以正常编译运行,输出每年工资增长情况:
Year 1: 1100.00
Year 2: 1210.00
Year 3: 1331.00
Year 4: 1464.10
Year 5: 1610.51
这些语法错误是Go语言编译器的标准错误提示,熟悉后就能快速识别和修复。

