这个简单的脚本怎么了?

I study functions, wrote a simple script for the textbook, and there were 2 errors.

package main
import "fmt"

func zero(x int) {
    x = 0
    return x
}
func main() {
    x := 5
    x = zero(x)
    fmt.Println(x)
}

too many arguments to return (string return x)

How is "too many"? It's only one!

zero(x) used as value (string x = zero(x))

I don't understand what he says to me.

int in func

package main
import "fmt"

func zero(x int) int {
    x = 0
    return x
}
func main() {
    x := 5
    x = zero(x)
    fmt.Println(x)
}
package main

import "fmt"

func zero(x int) int {
    x = 0
    return x
}

func main() {
    x := 5
    x = zero(x)
    fmt.Println(x)
} 

I believe this is closer to the original idea...

package main

import "fmt"

func zero(x *int) {
    *x = 0
    return
}

func main() {
    x := 5
    zero(&x)
    fmt.Println(x)
}

too many means that your function is returning more values that the function signature specifies.

In your case, your function signature func zero(x *int), says that this function doesn't returns ANY params, and inside the function body, you're returning ONE value: return x. So 1 is too many for 0 expected. Exactly 1 more.

Then zero(x) used as value is telling you that you're calling a function that doesn't return ANY value, and you're trying to assign the non-existent return value to a variable: x = zero(x).

That's why the compiler tells you about using zero(x) as a value