Go_函数
函数 : 实现某些功能的代码的封装
Go函数声明
// 基本格式
func 函数名(变量 类型, ...) 返回值类型{
函数体
}
// 示例
func add(a int, b int) int{
return a+b
}
// 接收多参数, 一定要在最后面, 该变量是一个数组
func 函数名(变量 ...类型) 返回值类型{
函数体
}
// 示例
func add(num ...int) int {
sum := 0
for _, v := range num{
sum += v
}
return sum
}
// 多返回值
func 函数名(变量 类型, ...) (返回值类型,返回值类型){
函数体
}
// 示例 过,多返回值经常被用到
// 命名返回值, return后不必写返回的值, 只要把返回值的变量赋值就行
// 示例
func add(a ,b int)(c int){
c = a+b
return
}
Go函数特性
匿名函数 -- 过
func(参数列表){
函数体
}(实参)
Go语言 函数也是一种类型(可以作为函数参数的类型), 一个函数可以赋值给变量
相同参数,返回值的函数可以认为是相同类型
import "fmt"
func def(a func(int,int)int) int{
return a(2,1)
}
func add(a,b int)int{
return a+b
}
func mul(a, b int)int{
return a*b
}
func main() {
fmt.Println(def(add))
fmt.Println(def(mul))
}
闭包: 一个函数和与其相关的引用环境组合而成的实体; 也就是我们说的在一个函数内部访问外部的非全局变量
package main
import “fmt”
func Adder() func(int) int {
var x int
return func(delta int) int {
x += delta // 与python不同, 函数是可以访问和修改外部变量的
return x
}
}
func main() {
var f = Adder()
fmt.Print(f(1),” - “)
fmt.Print(f(20),” - “)
fmt.Print(f(300))
}
值传递 : 函数内部使用的是实参的副本
defer语句 : 函数中定义defer语句, 在函数结束时执行, 其执行的函数实际传入的值就是defer语句定义时传入的值, 而并非函数结束时的值, 多个defer定义后进先出
package main
import "fmt"
func aa(a int){
fmt.Println(a)
}
func main() {
var a = 1
defer aa(a)
defer aa(100)
a += 12
fmt.Println(a)
}
// 13
// 100
// 1
defer常用来进行回收操作(比如, 关闭文件句柄)
Go特殊函数
init函数 : 每个源文件都可以包含一个init函数, 在main函数执行之前被Go框架调用
package main
import "fmt"
var a string
var b int
func main(){
fmt.Println(a)
fmt.Println(b)
}
func init(){
a = "hello word"
b = 10
}
一个包被导入时, 其内部的init()方法也会被执行
内置函数
close:主要用来关闭channel
len:用来求长度,比如string、array、slice、map、channel
new:用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针
make:用来分配内存,主要用来分配引用类型,比如chan、map、slice
append:用来追加元素到数组、slice中
panic和recover:用来做错误处理

浙公网安备 33010602011771号