go函数

1.以下代码可以直观看出函数的关键字 func,入参,多返回值

func Add(a int, b int)(ret int, err error){
    //todo
}

func Add(a, b int)(ret int, err error){
    //todo
}

func Add(a,b int) int {
    //todo
}

2.不定参数

func myfunc(args ...int){
    //遍历
    for _,arg := range args {
        //todo
    }
}


//调用
myfunc(1,2,3)
myfunc(2,3,4,5,6,7,8)
myfunc([]int{1,2,3,4,5,6}) //可以是切片

3.不定参数传递

func myfunc1(args ...int){
    //todo
}

func myfunc2(args ...int){
    //完全传递
    myfunc1(args...)

    //片段传递
    myfunc1(args[1:]...)
}

4.更加强大的 任意类型的不定参数 interface{} ,之后的篇章中会详细说明

//标准库中Printf原型
func Prinf(format string, args ...interface{}){
    //todo
}
package main

import	"fmt"

func MyPrintf(args ...interface{}){
    for _,arg := range args{
        switch arg.(type) {
            case int:
                fmt.Println(arg,"is int")
            case string:
                fmt.Println(arg,"is string")
            //case int64:
            //case int8
            //...
            //...
        }
    }
}

func main(){
	var (
        v1 int = 1
        v2 string = "a"
        v3 int64 = 3
    )
	
    MyPrintf(v1,v2,v3)
}

5.匿名函数

//对比普通函数和匿名函数

//普通函数
func GetName(id int) string{
    return "aa"
}



//匿名函数,顾名思义,没有函数名称的函数
func (id int) string{
    return "aa"
}


//匿名函数用法
//1.赋值给函数类型变量
var fn := func(id int) string{
    return "aa"
}

fn(1234)    //类似C++中回调函数

//2.可以直接调用
func (id int) string {
    return "aa"
}(1234)

6.闭包,概念上比较难理解,我所阅读的资料上是这么描述:

闭包是可以包含自由(未绑定到特定对象)变量的代码块,
这些变量不在这个代码块内或者任何全局上下文中定义,
而是在定义代码块的环境中定义。
要执行的代码块
(由于自由变量包含在代码块中,所以这些自由变量以及它们引用的对象没有被释放)
为自由变量提供绑定的计算环境(作用域)。

说实话,看完概念,我还是有点懵逼,不过我更喜欢用示例和注释来阐明,可能相对简单些

package main

import (
    "fmt"
)

func main() {
    var j int = 5
    
    myFunc := func (){
        var i = 1
        j += 1
        fmt.Println(i,j)
    }
    
    myFunc()
    
    j += 1
    
    myFunc()
}

//运行结果是
1 6
1 7

//myFunc 称为闭包函数
//myFunc可以直接访问和修改与其同级的局部变量(例如j变量)
//myFunc内局部变量无法被外部访问(例如i变量)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值