2020-01-05 Go语言学习日记:函数

函数

func 函数名(传入参数列表/*变量名 类型*/) (返回参数列表/*变量名 类型*/) {
	函数体
	(需要给返回参数变量赋值)
	return //返回的时候就直接返回所有返回参数变量的值了
}
  • 函数名根据约定,小写开头为私有,大写开头为公有
  • 传入参数声明不能设置默认值
  • 不定参数类型可以声明为变量名(一般为args) ...类型
  • 不定参数类型可以传任意个数的参数
  • 不定参数类型只能放在最右边
  • 一个函数只能存在一种不定参数类型。例如以下则会报错:
    在这里插入图片描述
  • 不定参数的传递,可以通过args...来进行全部传递,也可以通过args[(开始位置(包括本身)):(结束位置(不包括本身))]切片方式进行传递。若哪边省略不写则说明包括哪边的全部元素。

函数类型(相当于把自己定义的函数当作类型初始化给变量)

有点类似于Java的接口?多态?

type 想起的函数名称 func(待传入的参数/*参数类型*/) (待返回的参数/*参数类型*/)

func Add(a int, b int) (result int) {
	result = a + b
	return
}

func main(){
	var 自己起的函数变量名 想起的函数名称
	自己起的函数变量名 = Add
	c := 自己起的函数变量名(3, 2)
	fmt.Printf("%d", c)
}
  • 相当于给函数起了一个名称,当实例化函数类型后,可以把所有类型相符的函数初始化给那个函数变量
  • 函数类型可以作为参数被传递(多态的实现)
type FuncType func(int, int) (result int)

func Calc(a int, b int, funcType FuncType) (result int) {
	result = funcType(a, b)
	return
}

func main() {
	
}

匿名函数和闭包

//赋给变量
func1 := func(i int, j int) (result int) {
	if i < j {
		result = i
	}else {
		result = j
	}
	return result
}
result := func1(1, 2)
//直接调用
result := func (i int, j int) (result int) {
	if i < j {
		result = i
	}else {
		result = j
	}
	return result
}(1, 3)
  • 可以调用内部函数外的数据。
  • 内部函数修改外部数据后,数据在外部也会改变。闭包是以引用方式捕获外部变量。
  • 闭包不关心捕获的常量和变量是否已经超出作用域,只要闭包还在使用,它就一直存在。例如
func FuncTest() (resultFunc func() (resultInt int)){
	var x int
	resultFunc = func() (resultInt int) {
		x++
		resultInt = x*x
		return
	}

	return
}

func main()  {
	funcTest := FuncTest()
	fmt.Printf("%d\t", funcTest())
	fmt.Printf("%d\t", funcTest())
	fmt.Printf("%d", funcTest())
}
//输出结果为
1	4	9
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值