golang 信号 SIGSEGV:分段违规
我正在尝试 golang 中的高阶函数。它在 printResult 函数中包含“result := calcFunction(radius)”的行中出现恐慌。任何人都可以帮助我,因为我在这里做错了什么。
package main
import "fmt"
func calcArea(r float64) float64 {
return 3.14 * r * r
}
func calcPerimeter(r float64) float64 {
return 2 * 3.14 * r
}
func calcDiameter(r float64) float64 {
return 2 * r
}
func getFunction(query int) func(r float64) float64 {
query_to_func := map[int]func(r float64) float64{
1: calcArea,
2: calcPerimeter,
3: calcDiameter,
}
return query_to_func[query]
}
func printResult(radius float64, calcFunction func(r float64) float64) {
result := calcFunction(radius)
fmt.Println("Result:", result)
}
func main() {
var query int
var radius float64
fmt.Print("Enter the radius of the circle: ")
fmt.Scanf("%f", &radius)
fmt.Print("Enter operation: \n 1: Area\n 2: Perimeter\n 3: Diameter \n :")
fmt.Scanf("%f", &query)
printResult(radius, getFunction(query))
}
I am trying higher order function in golang. It is panicking in printResult function at line containing "result := calcFunction(radius)". Can anybody help me as what I am doing wrong here.
package main
import "fmt"
func calcArea(r float64) float64 {
return 3.14 * r * r
}
func calcPerimeter(r float64) float64 {
return 2 * 3.14 * r
}
func calcDiameter(r float64) float64 {
return 2 * r
}
func getFunction(query int) func(r float64) float64 {
query_to_func := map[int]func(r float64) float64{
1: calcArea,
2: calcPerimeter,
3: calcDiameter,
}
return query_to_func[query]
}
func printResult(radius float64, calcFunction func(r float64) float64) {
result := calcFunction(radius)
fmt.Println("Result:", result)
}
func main() {
var query int
var radius float64
fmt.Print("Enter the radius of the circle: ")
fmt.Scanf("%f", &radius)
fmt.Print("Enter operation: \n 1: Area\n 2: Perimeter\n 3: Diameter \n :")
fmt.Scanf("%f", &query)
printResult(radius, getFunction(query))
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
问题出在
fmt.Scanf("%f", &query)
上。查询是 int 并且您正在扫描到%f
(float64)。因此该值变为 0。由于 map 没有该值,因此会发生恐慌。Problem is with the
fmt.Scanf("%f", &query)
. query is int and you are scanning to%f
(float64). So the value become 0. Since map does not have that value, it panics.