函数是Go语言里面的核心设计,它通过func来声明,函数可以有一个或者多个参数,每个参数后面都要带有类型,通过“,”分隔,可以返回多个值,函数的格式为:
func funcName(input1 type1, input2 type2)(output1 type1, output2 type2){
//处理逻辑代码
//返回值
return value1, value2
}
返回值声明了两个变量output1和output2,如果不想声明也可以,但是要保留两个类型声明
如果只有一个返回值且不声明返回值变量,可以省略“包括返回值”的括号
如果没有返回值就直接省略最后的返回信息
一个实际应用函数的例子(用来计算最大值)
package main
import "fmt"
func max(a, b int) int {
if a > b {
return a
}
return b
}
func main() {
x := 3
y := 4
z := 5
max_xy := max(x, y) //调用函数 max(x, y)
max_xz := max(x, z)
fmt.Printf("max(%d,%d) = %d\n", x, y, max_xy)
fmt.Printf("max(%d,%d) = %d\n", x, z, max_xz)
fmt.Printf("max(%d,%d) = %d\n", y, z, max(y, z)) //直接调用
}
多个返回值
例子:
package main
import "fmt"
//返回A+B和A*B
func sub(A, B int) (int, int) {
return A + B, A * B
}
func main() {
x := 3
y := 4
xPLUSy, xTIMESy := sub(x, y) //调用函数 sub(x, y)
fmt.Printf("xPLUSy(%d,%d) = %d\n", x, y, xPLUSy)
fmt.Printf("xTIMESy(%d,%d) = %d\n", x, y, xTIMESy)
}
变参
Go语言支持变参,接受变参的函数有不定数量的参数,为了做到这一点,首先需要定义函数使其接受变参。
func myfunc(arg ...int) {}
arg ...int 告诉我们Go语言这个函数接受不定数量的参数。注意,这些参数的类型全部时int。在函数体中,变量arg时一个int的slice
for _, n := arg {
fmt.Printf("And the number is: %d\n", n)
}
传值与指针
函数的普通传值只是传值的copy,而实参不会变化,比如
package main
import "fmt"
func add(a int) int {
a = a + 1
return a
}
func main() {
x := 3
fmt.Printf("x = %d\n", x) //输出x=3
x1 := add(x) //调用函数
fmt.Printf("x+1 = %d\n", x1) //输出x+1=4
fmt.Printf("x = %d\n", x) //继续输出x,应该为x=3
}
如果想真正的传 x 本身的话就需要指针了,变量在内存中是存放于一定的地址上,修改变量实际是修改变量地址处的内存。
例子
package main
import "fmt"
func add(a *int) int {
*a = *a + 1 //修改了a的值
return *a //返回新值
}
func main() {
x := 3
fmt.Printf("x = %d\n", x) //输出x=3
x1 := add(&x) //调用函数 传x的内存地址
fmt.Printf("x+1 = %d\n", x1) //输出x+1=4
fmt.Printf("x = %d\n", x) //继续输出x,应该为x=4
}
这样就达到了修改x的目的。传指针的好处:可以使多个函数能操作同一个对象,可以传递体积大的结构体
defer延迟语句
当你进行一些打开资源的操作时,遇到错误需要提前返回,在返回前你需要关闭相应的资源,不然很容易造成资源泄露:
func ReadWrite() bool {
file.Open("file")
defer file.Close()
if failureX {
return false
}
if failureY {
return false
}
return true
}
如果有很多调用defer,那么defer采用后进先出模式
发布于:
http://www.golune.com/blog/content/c45ae5ed3c92d1277173d43fafba4a4b8652f
相关推荐
Go语言教程:Go语言函数介绍Go语言教程:Go语言函数介绍Go语言教程:Go语言函数介绍Go语言教程:Go语言函数介绍Go语言教程:Go语言函数介绍Go语言教程:Go语言函数介绍
第四节 Go 语言函数 21、函数的定义 22、Go 方法 63、实现游戏服务器日志函数 84、课后作业—难度: 95、深度分析塔防游戏关卡设计 106、微信公
html格式,带全文搜索. 在学习go的过程中需要查询各种资料和书籍 手册....包括以下书籍(html): go标准库文档 Go语言标准库 go指南 go_web编程 Go_基础教程 go语言圣经 Go入门指南 Go...Go 语言(Golang).pdf 学习go语言.pdf
就事后诸葛的角度来看,Go语言的这些地方都做的还不错:拥有自动垃圾回收、一个包系统、 函数作为一等公民、词法作用域、系统调用接口、只读的UTF8字符串等。但是Go语言本身只有很少的特 性,也不太可能添加太多的...
本文实例讲述了Go语言函数基本用法。分享给大家供大家参考,具体如下: 这里要说一下是Go函数和一些其他语言不一样的地方 1 函数格式不同 代码如下:func GetMsg(i int) (r string) { fmt.Println(i) r = “hi”...
Go 语言递归函数 递归,就是在运行的过程中调用自己。 语法格式如下: func recursion() { recursion() /* 函数调用自身 */ } func main() { recursion() } Go 语言支持递归。但我们在使用递归时,开发者需要设置...
谷歌最新开发语言,安卓开发语言热门候选,年度语言新星
Go语言天然并发,只需要关键字“go”就可以让函数并发执行,使得并发编程变得更为简单,这也是Go语言最大的优势。 四、Go语言能做什么开发 Go语言是非常有潜力的语言,是因为它的应用场景是目前互联网非常热门...
《Go语言鄠动力》是Go语言程序设计入门书,介绍了Go语言的基础知识,包括静态类型、流程控制、函数、动态类型、面向对象、并发编程等内容,以及同其他C类语言相比,Go所具备的全新特性。同时,《Go语言鄠动力》还...
go语言 思维导图 基础、函数
Gitgo - 提供了一些用于与Git仓库交互的Go函数
go语言技能资料及源码go语言技能资料及源码go语言技能资料及源码go语言技能资料及源码go语言技能资料及源码go语言技能资料及源码go语言技能资料及源码go语言技能资料及源码go语言技能资料及源码go语言技能资料及源码...
Go语言入门指南大纲及框架建议:轻松掌握Go语言学习秘诀 1. Go语言概述 Go语言的历史和创造者 Go语言的主要特性和优势 Go语言的应用领域 2. 安装与配置 在不同操作系统(Windows, macOS, Linux)上安装...
大家都知道go语言的defer功能很强大,对于资源管理非常方便,但是如果没用好,也会有陷阱哦。Go 语言中延迟函数 defer 充当着 try…catch 的重任,使用起来也非常简便,然而在实际应用中,很多 gopher 并没有真正搞...
●go的参数传递,都是值的...● go语言的声明 min,max :=0,100 (int类型) var s string (string类型) ● 位钱:是一种使用加密手段制作的分布式电子货币。 位钱地址编码使用EncodeBase58Check函数。(电子支付手段)
Go语言Api函数检索 代码导航 查找使用 代码重构 Go playground支持 其他支持 Markdown Json Golang Present 支持的操作系统 Windows ...
一、 GO语言环境搭建 2 二、 Go 命令 2 go build 3 go clean 4 go fmt 4 go get 4 go install 4 go test 4 go doc(godoc) 5 三、 Go基础 5 关键字 5 定义变量 5 常量 6 内置基础类型 6 Boolean 6 数值类型 6 ...
本文实例讲述了GO语言延迟函数defer用法。分享给大家供大家参考。具体分析如下: defer 在声明时不会立即执行,而是在函数 return 后,再按照 FILO (先进后出)的原则依次执行每一个 defer,一般用于异常处理、释放...