Go语言之全局变量定义函数内部局部变量定义和defer关键字和值类型与引用类型
Posted 程序彤
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言之全局变量定义函数内部局部变量定义和defer关键字和值类型与引用类型相关的知识,希望对你有一定的参考价值。
定义全局变量函数必须使用var + 名 + type = ?进行定义
而定义局部变量(函数内部的变量)可使用 名:=?直接简短声明定义
defer
当函数的return执行完后,才执行用defer声明的语句。
会将语句压入到独立的defer栈中,当函数执行完毕后,再从defer栈中按照后进先出的规则出栈执行。
package main
import(
"fmt"
)
func main(){
res:=sum(2,3)
fmt.Println("main:res=",res)
}
func sum(n1 int,n2 int) int{
defer fmt.Println("n1=",n1)
defer fmt.Println("n2=",n2)
res:=n1+n2
fmt.Println("sum:res=",res)
return res
}
如果函数中n1++,n2++,但defer栈中的数在执行语句前所有结果就已经被固定压入栈中,例如如下:
func main(){
res:=sum(2,3)
fmt.Println("main:res=",res)
}
func sum(n1 int,n2 int) int{
defer fmt.Println("n1=",n1) // 2
defer fmt.Println("n2=",n2) // 3
n1++
n2++
res:=n1+n2 // 3+4=7
fmt.Println("sum:res=",res) // 7
return res
}
程序将输出顺序为7 3 2,并不是7 4 3
defer的主要存在价值:
能及时释放资源。比如打开一个资源后,可以立刻defer保证函数执行结束后立即关闭资源,防止忘记关闭资源。
值类型
基本数据类型int/float/bool/string/数组/结构体。。
引用类型
引用数据类型有指针、切片、管道、map、interface
以上是关于Go语言之全局变量定义函数内部局部变量定义和defer关键字和值类型与引用类型的主要内容,如果未能解决你的问题,请参考以下文章