# 函数

# 定义

package main
import "fmt"
func sum(x int, y int) int {
	return x + y
}
func main() {
	var a, b int
	fmt.Scanln(&a, &b)
	fmt.Println(sum(a, b))
}

go 语言函数的定义格式如下:

func funcName(param type) returnType {
    code
}

func 为关键字,go 语言中使用 func 定义函数
funcName 为函数名,推荐使用小驼峰写法 (下文介绍)
param 为参数名称, type 为参数类型
returnType 为函数返回值,不返回可以不写
code 为代码块

smallFontOutput 就是小驼峰写法,即为首字母小写,其他单词的首字母大写

如果需要多个参数,把参数写为 param type, param type 即可
go 语言可以返回多个变量,如下:

package main
import "fmt"
func swap(a string, b string) (string, string) {
	return b, a
}
func main() {
	var a, b = "hello", "world"
	fmt.Println(swap(a, b))
}

# 变量作用域

package main
import "fmt"
// 这里不可以用 c
func demo() {
	var c = 1
	fmt.Println(c)
	// 这里可以用 c
}
// 这里不可以用 c

这里的 c 就是局部变量,仅在函数内可用

package main
import "fmt"
var c = 1
func demo() {
	fmt.Println(c)
}
// 所有地方都可以用

这里的 c 是全局变量,整个文件内可用

闭包在后面会提及

# defer 语句

Go 语言中的 defer 语句会将语句推迟到函数退出时执行

package main
import "fmt"
func main() {
	fmt.Println("start")
	defer fmt.Println(1)
	fmt.Println("end")
}

输出结果:

start
end
1