-2

Here is my program. I am trying to convert a person's age on mars. It looks everything is fine here but still I am getting this error

package main
import "fmt"

func main() {
var age int
fmt.Scanln(&age)
func mars(age) int{
days := age*365
return days/687
}
mars_age := mars(age)
fmt.Println(mars_age)
}

3 Answers3

1

Try:

package main

import "fmt"

func mars(age int) int {
    days := age * 365
    return days / 687
}
func main() {
    var age int
    fmt.Scanln(&age)

    mars_age := mars(age)
    fmt.Println(mars_age)
}
  • Named func's must be at the same level (i e. main, mars)
  • Function parameters must have types age int

NOTE Go permits anonymous functions (aka lambdas) too. In that case, you could define mars in main and you could assign it to a variable e.g. mars := func(age int) int { ... }

DazWilkin
  • 32,823
  • 5
  • 47
  • 88
0

Please see this post on how to use nested functions https://stackoverflow.com/a/42423998/2693654

You need to have something like:

package main
import "fmt"

func main() {
    var age int
    fmt.Scanln(&age)
    x:= func (age int) int {
        days := age*365
        return days/687
    }
    mars_age := x(age)
    fmt.Println(mars_age)
}
user157375
  • 21
  • 2
  • Which means I can define a variable inside a function but can't define a function? – Rajashekar Reddy Dec 07 '21 at 04:12
  • You can define a function, but you have to assign it to a variable. – user157375 Dec 07 '21 at 04:35
  • But that again throwing same error ``` func main() { var age int fmt.Scanln(&age) var x int = func mars(age int){ days := age*365 return days/687 } mars_age := x(age) fmt.Println(mars_age) } ``` – Rajashekar Reddy Dec 07 '21 at 05:05
  • This is because the variable is of type func not int. I mean: var x func(int) int x = func (age int) int { days := age*365 return days/687 } – user157375 Dec 07 '21 at 15:42
0
func main() {
   mars := func (param type) return_type {
       return .....
   }

   returnedValue := mars(bela bela bela)
}