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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值