Mako Shan

Mako 是一名密码朋克爱好者
这里是我记录生活和成长的地方

联系我的微信号
👏欢迎一起交流学习

Golang 学习笔记 (2)

函数

函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。

Go语言里面拥三种类型的函数:

  • 普通的带有名字的函数
  • 匿名函数或者lambda函数
  • 方法(Methods)

函数定义

package mymath 
import "errors" 
func Add(a int, b int) (ret int, err error) { 
 if a < 0 || b < 0 { // 假设这个函数只支持两个非负数字的加法
 err= errors.New("Should be non-negative numbers!") 
 return 
 } 
 return a + b, nil // 支持多重返回值
} 

函数调用

函数调用非常方便,只要事先导入了该函数所在的包,就可以直接按照如下所示的方式调用

import "mymath"// 假设Add被放在一个叫mymath的包中
 // ... 
c := mymath.Add(1, 2) 

注意在Go语言中小写字母开头的函数只在本包内可见,大写字母开头的函数才能被其他包使用

不定参数

不定参数是指函数传入的参数个数为不定数量。为了做到这点,首先需要将函数定义为接受

  • 不定参数类型:
func myfunc(args ...int) { 
 for _, arg := range args { 
 fmt.Println(arg) 
 } 
} 

这段代码的意思是,函数myfunc()接受不定数量的参数,这些参数的类型全部是int,所以它可以用如下方式调用:

myfunc(2, 3, 4) 
myfunc(1, 3, 7, 13) 

形如...type格式的类型只能作为函数的参数类型存在,并且必须是最后一个参数。它是一
个语法糖(syntactic sugar),即这种语法对语言的功能并没有影响,但是更方便程序员使用。通
常来说,使用语法糖能够增加程序的可读性,从而减少程序出错的机会。
从内部实现机理上来说,类型...type本质上是一个数组切片,也就是[]type,这也是为
什么上面的参数args可以用for循环来获得每个传入的参数。

  • 不定参数的传递

假设有另一个变参函数叫做myfunc3(args ...int),下面的例子演示了如何向其传递变参:

func myfunc(args ...int) { 
 // 按原样传递
 myfunc3(args...) 
 // 传递片段,实际上任意的int slice都可以传进去
 myfunc3(args[1:]...) 
} 
7
新OS X 10.11 El Capitan无法安装VMware Tools
目录