定义

func funcName(param-list)(result-list){
    //code
}

特点

  1. 可无输入输出参数
  2. 多个相邻的相同类型参数可简写

    func test(a int,b int){ ...
    func test(a,b int){ ...

  3. 支持有名的返回值,参数名就相当于函数体内最外层的局部变量,命名返回值变量会被初始化为零值,最后的return可以不带参数名直接返回

    func add(a,b int)(sum int){
    sum = a + b
    return
    //等效于 return sum
    }

  4. 不支持默认值
  5. 不支持函数重载
  6. 不支持命名函数嵌套
  7. func xxx(){,这个{一定要与声明在同一行
  8. 当只有一个返回值时可省去括号

多值返回

与Python相同(或类似?)

func test()(int,int){
    return a,b
}
func main(){
    a,b := test()
}

实参与形参的传递

Go函数实参到形参的传递永远是值拷贝,有时函数调用后实参指向的值发生的改变,那是因为参数传递的是指针值的值拷贝,实参是一个指针变量,传递给形参的是这个指针变量的副本,二者指向同一地址。

不定参数

声明

func funcName(param ...type)

特点

  1. 所有不定参数的类型必须相同
  2. 不定参数必须是函数的最后一个参数
  3. 不定参数在函数内相当于切片,对切片的操作同样适合对不定参数的操作,比如遍历
  4. 切片可以作为参数传递给不变参数,切片名后要加“...”,例子见下面
  5. 形参为不定参数的函数和形参为切片的函数类型不相同
 func sum(arr ...int)(sum int){
    for i,v := range arr{
        sum += v
    }
    return
}
//传参
s := []int{1,2,3,4,5}
sum(s...)

其他要说的

按道理上面的某些代码应该有特殊样式,不过预览看来没有(不会Markdown)。

标签: Golang

添加新评论