'golang signal SIGSEGV: segmentation violation
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))
}
Solution 1:[1]
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))
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Pratheesh M |
