golang 基础(F)函数的参数

作者: zidea | 来源:发表于2019-03-16 16:30 被阅读13次
square-gopher.png

函数

函数是由函数名,参数,返回值和函数体所组成。

func add(a, b int) int {} 

定义函数并且复习一下之前的 switch 语句

func eval(a, b int,op string) int {
    switch op {
    case "+":
        return a + b
    case "-":
        return a - b
    case "*":
        return a * b
    case "/":
        return a / b
    default:
        panic("unsupported operation: " + op)
    }
}

在 go 语言中 { 需要 bar() 在同一行不言就会报错

func bar() //报错
{

}
.\funtions.go:26:6: missing function body
.\funtions.go:27:1: syntax error: unexpected semicolon or newline before {

函数中的参数

定义函数可以没有任何参数就像 main 函数

func main(){

}

定义函数的参数时和其他语言没有什么不同,指定参数名称和参数类型

func sayMessage(msg string){
    // body
}

如果参数类型一致我们可以省略 greeting 后面指定类型

func sayGreeting(greeting, name string){
    fmt.Println(greeting, name)
    
}

我们可以尝试在 sayGreeting 内部修改 name 这个变量,因为函数作用域这些修改name 不会影响到函数外面的 name 值,这是大家的尝试。

func sayGreeting(greeting, name string){
    fmt.Println(greeting, name)
    name ="matthew"
    fmt.Println(name)
}
greeting := "hello"
    name := "zidea"
    sayGreeting(greeting,name)
    fmt.Println(name)

从结果来看

hello zidea
matthew
zidea

外面的 name 值依旧是 zidea 没有发生变化

我们可以将传递变量引用修改为将变量的地址作为参数传给函数

func sayGreeting(greeting, name *string){
    fmt.Println(*greeting, *name)
    *name ="matthew"
    fmt.Println(*name)
}
hello zidea
matthew
matthew
func main(){
    fmt.Println(eval(3,4, "*"))
    greeting := "hello"
    name := "zidea"
    fmt.Println(greeting, name)
}

我们也可以通过(...)来实现函数动态地传入多个参数,这和 es6 语法很相似。

func sum(values ...int){
    fmt.Println(values)
    result := 0
    for _, v := range values{
        result += v
    }
    fmt.Println("The sum is ", result)
}
Golang1.png

相关文章

网友评论

    本文标题:golang 基础(F)函数的参数

    本文链接:https://www.haomeiwen.com/subject/ygysmqtx.html