go 函数

// func test(){

// }

// func test(a int,b int){

// }

// func test(a int, b int) int{

// }

func test(a int, b int ) (int,int){

}

func test(a,b int){

}

花括号必须与函数声明在同一行,这种写法是错误的

func test()
{

}

golang函数特点

1 不支持重载,一个包中不能有两个名字一样的函数。

2. 函数也是一种类型,函数可以复制给一个变量。

3.支持匿名函数

4.多值返回

 

 

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

func main() {
	c := test

	fmt.Println(c)

	sum := c(1, 2)

	fmt.Println(sum)

	test(10, 20)
}

 自定义函数类型

package main

import "fmt"

type ty_func func(int, int) int

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

func operator(op ty_func, a, b int) int {
	return op(a, b)
}

func main() {
	c := add
	sum := operator(c, 100, 200)

	fmt.Println(sum)
}

 

 

函数参数传递方式

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

注意2:map、slice、chan、指针、interface默认以引用的方式传递

 命名返回值名称

package main

import "fmt"

func test(a, b, c int) (he int, cha int) {
	he = a + b + c
	cha = a - b - c
	return
}

func main() {

	a, b := test(15, 10, 5)
	fmt.Println(a)
	fmt.Println(b)

}

_标识符,用来忽略返回值

func main() {
	_, b := test(15, 10, 5)
	fmt.Println(b)
}

可变参数 

练习14:写一个函数add,支持1个或多个int相加,并返回相加结果

package main

import (
	"fmt"
)

func test(a int, age ...int) {
	var sum = a
	// fmt.Println(sum)

	// fmt.Println(len(age))
	for n := 0; n < len(age); n++ {
		sum += age[n]
	}
	fmt.Println(sum)
}

func main() {
	test(1)
	test(1, 3, 5)
	test(2, 4)
}

练习15:写一个函数concat,支持1个或多个string相拼接,并返回结果

 

func concat(age ...string) {
	var str string
	for n := 0; n < len(age); n++ {
		str += age[n]
	}

	fmt.Println(str)
}

func main() {
	concat("hellow", " world", " go")

}

defer

1.当函数返回时,执行defer语句。因此,可以用来做资源清理

2.多个defer语句,按先进后出的方式执行

3.defer语句中的变量,在defer声明时就决定了。

func defer_test() {
	i := 0
	defer fmt.Println(i)

	i = 10

	fmt.Println(i)
}

func main() {
	defer_test()
}

func defer_test() {
	i := 3
	for n := 0; n <= i; n++ {
		defer fmt.Println(n)
	}
}

func main() {
	defer_test()
}

用途

1. 关闭文件句柄

2. 锁资源释放

3. 数据库连接释放

匿名函数

package main

import "fmt"

var (
	test = func(a, b int) int {
		return a + b
	}(10, 20)
)

var test1 = func(age ...int) int {
	var sum int

	for n := 0; n < len(age); n++ {
		sum += age[n]
	}
	return sum
}

func main() {
	c := test
	fmt.Println(c)

	d := test1(100, 100, 100)
	fmt.Println(d)
}

 

转载于:https://www.cnblogs.com/LC161616/p/9781384.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值