美文网首页
Go学习--函数

Go学习--函数

作者: liuxuech | 来源:发表于2016-11-02 17:16 被阅读0次

1、函数重载:

指的是可以编写多个同名函数,只要它们拥有不同的形参与/或者不同的返回值,在 Go 里面函数重载是不被允许的。

funcName redeclaredinthisbook, previous declaration at lineno

2、申明外部函数:

func  flushICache(begin,  end uintptr)           // implemented externally

ep:

func  make(Type,sizeIntegerType) Type  //来自Go源码builtin.go

3、没有参数的函数通常被称为niladic函数(niladic function),就像main.main()。

4、传参方式:

    1)按值传递:Go 默认使用按值传递来传递参数,也就是传递参数的副本。函数接收参数副本之后,在使用变量的过程中可能对副本的值进行更改,但不会影响到原来的变量。Function(arg1)

    2)按引用传递:传递的是一个地址的副本,但是该地址副本和原地址指向的都是同一块内存,所以通过这个地址副本可以影响内存中的内容。Function(&arg1)

5、命名的返回值(推荐方式):

func A(input int) (x2 int, x3 int) {    

     x2 =2* input   

     x3 =3* input

     // return x2, x3

     return

}

6、空白符:

func ThreeValues() (a int, b int, c float32)  {

    a, b, c = 5, 6, 7

    return

}

a,_,c :=ThreeValues()  //这样就忽略了参数b。

7、传递变长参数:

func  myFunc(a,  b string,  elems ...int)  { 

    fmt.Printf("%T  ",elems)  //[]int , 即:elems是一个切片类型

    fmt.Println(a, b, elems)  //lxc zhuoer [1 2 3 4 5 6]

 }

myFunc("lxc", "zhuoer", 1,2,3,4,5,6) 

注意: elems如果是放在一个切片(sl)中要传递过来的话, 则可以使用 sl... 方式来传递。

sl := []int{1,2,3,4,5,6};

myFunc("lxc","zhuoer", sl... )

8、defer:

作用:允许我们推迟到函数返回之前(或任意位置执行return语句之后)一刻才执行某个语句或函数。

func A () { 

    fmt.Println("AAAAAAA")

    defer  fmt.Println("BBBBBBBB")

    fmt.Println("CCCCCCC")

}

输出:

AAAAAAAA

CCCCCCC

BBBBBBBB

特别注意:

for i :=0; i <4; i++ {

    defer func() {

        fmt.Print(i) 

    }()

}

输出:

4444  //个人理解:defer 只是暂时注册了这些匿名函数,并没有执行匿名函数的函数体,所以fmt.Println(i)这条语句没有执行,所以也就没有发生值拷贝,当真正需要执行的时候,i已经变为4了,此时发生的值拷贝也是拷贝的4.

for i :=0; i <4; i++ {

    defer fmt.Print(i)

}

输出:

3210

9、计算函数执行的时间:

start := time.Now()

longCalculation()

end := time.Now()

delta := end.Sub(start)   //delta执行时间,毫秒

相关文章

  • Go学习--函数

    1、函数重载: 指的是可以编写多个同名函数,只要它们拥有不同的形参与/或者不同的返回值,在 Go 里面函数重载是不...

  • go 零散笔记(未整理)

    go 学习零散笔记 Go语言程序员推荐使用 驼峰式 命名 函数(func) 一个函数的声明由func关键字、函数名...

  • 三、Go的函数

    三、Go的函数 Go语言最少有一个main()函数。 1、Go的函数定义: 2、函数参数 函数如果使用参数,该变量...

  • 第02天(函数、工程管理)_03

    11_函数类型.go 12_回调函数.go 13_匿名函数和闭包.go 14_闭包捕获外部变量的特点.go 15_...

  • Golang学习笔记-函数

    Go函数定义格式如下: 例如: Go可以很灵活的创建函数,并作为另外一个函数的实参: Go支持匿名函数,可作为闭包...

  • Go语言探索 - 7(原创)

    Go语言基础系列博客用到的所有示例代码 在 上一篇文章主要学习了Go语言的函数定义、值传递和引用传递以及闭包函数。...

  • Go语言基础3 - 函数

    概述 我们将用几节来学习Go语言基础,本文结构如下: 函数 函数的基本语句结构: func 是关键字,表示函数的开...

  • golang系列教程

    Go包管理 Go开发工具 Go Doc 文档 Go 数组 Go 切片 Go Map Go 类型 Go 函数方法 G...

  • 第03天(复合类型)_03

    13_数组做函数参数.go 14_数组指针做函数参数.go 15_切片的长度和容量.go 16_切片的创建.go ...

  • 09-Go语言函数

    函数 Go语言函数格式func 函数名称(形参列表)(返回值列表){函数语句} Go语言函数的类型没有返回值没有形...

网友评论

      本文标题:Go学习--函数

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