码迷,mamicode.com
首页 > 其他好文 > 详细

5 函数

时间:2018-10-29 02:02:45      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:add   res   func   col   特点   int   for   ...   拷贝   

1 golang函数特点

  1.不支持重载,一个包中不能有2个同名的函数

  2.函数是一等公民,函数也是一种类型,一个函数可以赋值给变量

  3.匿名函数

  4.多返回值

2 函数参数传递方式

  1.值传递

  2.引用传递

  需要注意的是,无论是值传递还是引用传递,传递的的都是变量的副本,不过值传递是值的拷贝,引用传递是地址的拷贝,一般来说,地址拷贝更为高效,而值拷贝取决于拷贝的对象的大小,对象越大,则性能越低

  注意:map,slice,chan,指针,interface默认是引用方式传递

3 defer 在函数执行结束前执行,一般用于释放资源

//defer:在函数执行结束前执行,一般用于释放资源

func read() {
    conn,err := openConn()
    defer func(){
        if conn!=nil{
            conn.Close()
        }

    }()
}

 

 

package main

import "fmt"

func main() {
    //fmt.Println(test05(10, 5))
    //fmt.Println(add2(1,2,3,4,5))
    fmt.Println(contact("hello"," ","world"))
}

//命名返回值的名字
func test05(a, b int) (sum int) {
    sum = a + b
    return
}

//可变参数练习
func add2(a int, arg... int) (res int) {
    res += a
    for _, v := range arg {
        res += v
    }
    return
}

func contact(arg...string)(res string)  {
    for _,v :=range arg{
        res+=v
    }
    return
}

func test01(a int, b int) {

}

func test02(a int, b int) int {
    return 1
}

func test03(a int, b int) (int, int) {
    return 1, 1
}

func test04(a, b int) (int, int) {
    return 1, 1
}

 

package main

import "fmt"

func main()  {
    var(
        a=5
        b=10
        c=add//函数赋值给变量
    )
    res := test(c,a,b)
    fmt.Println(res)
}


type add_func func(int,int) int

func add(a,b int) int{
    return a+b
}

func test(op add_func,a,b int) int{
    return op(a,b)
}

 

  

5 函数

标签:add   res   func   col   特点   int   for   ...   拷贝   

原文地址:https://www.cnblogs.com/jec1999/p/9868068.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!