golang 信号 SIGSEGV:分段违规

发布于 2025-01-13 19:08:42 字数 1016 浏览 3 评论 0原文

我正在尝试 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你怎么敢 2025-01-20 19:08:42

问题出在 fmt.Scanf("%f", &query) 上。查询是 int 并且您正在扫描到 %f(float64)。因此该值变为 0。由于 map 没有该值,因此会发生恐慌。

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("%d", &query)
    printResult(radius, getFunction(query))
}

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.

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("%d", &query)
    printResult(radius, getFunction(query))
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文