博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数 -- 就要学习 Go 语言
阅读量:2287 次
发布时间:2019-05-09

本文共 2862 字,大约阅读时间需要 9 分钟。

原创文章,若需转载请注明出处!

欢迎扫码关注公众号「Golang来了」或移步 查看更多精彩文章。

函数

函数是一段能够完成特定功能的代码段,可以接收输入参数或者能够返回想要的值。

函数声明

Go 语言采用如下语法声明一个函数:

func funcName(parameterName type) returntype {
//函数体 }

可以看到,func 是声明函数的关键字;funcName 是函数名;() 之间的是输入参数,根据需要,可传多个参数 (parName1 type, parName2 type) 或者不传;returntype 是返回值类型,如果没有返回值,可以省略。

func add(a int,b int) int {
return a + b}func main() {
fmt.Println("a + b =",add(1,2))}

输出:

a + b = 3

上面的add()函数示例很简单:两数相加。(){} 之间的int是返回值的类型。如果有不止一个相同类型的输入参数,则可以简写:

func add(a,b int,c,d string) int {
fmt.Println(c+d) return a + b}func main() {
fmt.Println("a + b =",add(1,2,"add"," + "))}

输出:

add + a + b = 3

ab 都是int型,所有简写成a,b intcd都是string类型,同理。

多值返回

不像其他语言,Go 语言的函数是允许返回多个值的。

func calculate(a,b int) (int,int) {
return a+b,a*b}func main() {
sum,multi := calculate(1,2) fmt.Println("a + b =",sum) fmt.Println("a * b =",multi)}

上面的代码,calculate() 函数返回两个值,在调用函数中不需要用到其中某一个值的时候,可以使用空白标识符_忽略。因为如果定义了变量而没有使用,会编译不通过。

func main() {
sum,_ := calculate(1,2) fmt.Println("a + b =",sum) //fmt.Println("a * b =",multi)}

命名返回值

在函数定义的时候,可以给所有的返回值分别命名,Go 会自动创建这些变量,在函数体中可以给变量赋值等。在函数结束的时候,直接使用return就可以将返回值返回,而不用指定返回的变量。

func calculate(a,b int) (sum,multi int) {
sum = a + b multi = a * b return }func main() {
sum,multi := calculate(1,2) fmt.Println("a + b =",sum) fmt.Println("a * b =",multi)}

注意:函数结束时的return是必须的,不能省略。

函数类型

Go 语言中,函数也是一种类型。如果两个函数的入参类型和返回值类型均相同,则它们是同种类型。如果将函数作为参数传递给另外一个函数时或将函数作为返回值时,函数类型就会显得很有用了。

func add(a,b int) (r int) {
r = a + b return}func multi(c,d int) (res int) {
res = c * d return}func main() {
fmt.Printf("%T \n",add) fmt.Printf("%T",multi)}

输出:

func(int, int) int func(int, int) int

定义了两个函数 add()multi(),它们的入参和返回值都一样,所有它们的类型相同,都是func(int, int) int

func add(a,b int) (r int) {
r = a + b return}func multi(c,d int) (res int) {
res = c * d return}func calculate(a,b int,f func(int,int) int) (r int) {
r = f(a,b) return}func main() {
sum := calculate(1,2,add) multi := calculate(1,2,multi) fmt.Println(sum,multi)}

输出:

3 2

上面的代码,定义calculate()函数,接收两个int类型的参数和一个func(int,int) int类型的参数f,在函数体里,调用了f函数。

可以给func(int,int) int创建类型别名,是程序更简洁:

func add(a,b int) (r int) {
r = a + b return}func multi(c,d int) (res int) {
res = c * d return}// 创建类型别名type calculateFunc func(int,int) intfunc calculate(a,b int,f calculateFunc) (r int) {
r = f(a,b) return}func main() {
sum := calculate(1,2,add) multi := calculate(1,2,multi) fmt.Println(sum,multi)}

匿名函数

Go 语言中,函数可以作为一个值,这样便可以将函数赋给一个变量或者返回一个函数变量。

var add = func(a,b int) (r int) {
r = a + b return}func main() {
fmt.Println("a + b =",add(1,2))}

上面的代码,创建了一个匿名函数,赋给了一个全局变量add。Go 编译器会自动判别变量add的类型,这里是func(int, int) int

匿名函数可以赋值,也可以立即执行:

func main() {
sum := func(a,b int) int {
return a + b }(1,2) fmt.Println(sum)}

输出:

3

上面的代码,定义匿名函数时,直接传递了两个参数,返回结果。

(全文完)

扫描上方二维码,欢迎关注公众号「Golang来了」,获取最新精彩文章!

你可能感兴趣的文章
javascript中编写类似in_array()的原型函数
查看>>
go 数据库操作
查看>>
php读取二进制流
查看>>
Golang热重启
查看>>
热重启golang服务器(graceful restart golang http server)
查看>>
echo框架使用:获取与配置
查看>>
PHP模拟多进程并发将内容写入文件
查看>>
nginx.conf配置说明
查看>>
Eclipse设定和修改文件字符编码格式和换行符
查看>>
git常用操作以及快速入门教程
查看>>
MongoDB 3.0 常见集群的搭建(主从复制,副本集,分片....)
查看>>
在notepad++中 “tab转为空格”、“按tab插入空格”、“文档格式转换”
查看>>
Zend Framework 常用组件概述
查看>>
Zend_Db -> Zend_Db_Adapter
查看>>
Zend_Db -> Zend_Db_Select
查看>>
Zend_Db -> Zend_Db_Table
查看>>
PHP漏洞全解(三)-客户端脚本植入
查看>>
Java学习日记 求最值 排序 选择 冒泡 交换
查看>>
IO流输出系统信息
查看>>
File类常见方法
查看>>