玩转Go语言之特殊的语法
defer 语句
这玩意基本没啥作用,就是在一个函数中如果某行代码前面有defer 关键字的话,这行代码就最后执行,如果有多个defer语句的话,遵循后进先出的原则
例如:
fmt.Println("申请存储空间")defer fmt.Println("释放存储空间")fmt.Println("使用存储空间")fmt.Println("使用存储空间")fmt.Println("使用存储空间")复制代码
简化代码作用:
func ReadWrite() bool {file.Open("file")defer file.Closeif failureX {// file.Close()retrun false }if failureY {//file.Close()return false}//file.Closereturn true
}
复制代码
总结:
1.defer语句的格式
defer 语句
2.defer语句的作用
延迟执行, 会在所属函数执行完毕之后再执行
常用于资源释放, 解锁, 错误处理等等
以前在C语言中我们说过, 通过malloc申请的存储空间, 一定更要释放free
但是由于我们不能写完malloc之后立即free,所以经常导致我们忘记释放
malloc -- >申请存储空间
... ... --> 使用存储空间
free --> 释放存储空间
注意点:
如果在同一个函数中编写了多个defer语句, 那么会遵守先进后出的原则
先注册的defer语句后执行, 后注册的defer语句先执行
init()函数
1.在Go语言中保留了两个函数, 一个叫做main,另外一个叫做init
main函数是由系统调用的, init函数也是由系统调用的复制代码
2.init函数的作用:
对当前文件进行初始化复制代码
3.调用顺序
main包 --> 常量 --> 全局变量 --> init函数 --> main函数 --> 执行逻辑代码 --> Exit程序复制代码
4.注意点:
main函数只能在main包中(package main), 并且一个程序只能有一个,
但是init函数每个包中都可以有, 并且可以有多个(但是企业开发推荐只写一个)
复制代码
上图是每个包中初始化的先后顺序
import几种形式
1.点操作
import{
. "fmt"
}
func main {
Println("点操作")
}
2.起别名
import{
f "fmt"
}
func main {
f.Println("起别名")
}
3._操作
只是调用包的init函数,不调用其他函数
import{
_ "test"
}
转载于:https://juejin.im/post/5ba99c0e6fb9a05cf039e802
玩转Go语言之特殊的语法相关推荐
- 玩转C语言之自定义数据类型-typedef
玩转C语言之自定义数据类型-typedef 1 引言 引言:在C语言中没有提供字节类型,如果在工程中需要使用表示字节的变量时,该怎么办呢? 我们知道 1 个字节占用 8 个二进制位空间,解决这个问题的 ...
- 零基础玩转C语言系列第一章——初始C语言(上)
目录 一.如何学好C语言? 1.鼓励你,为你叫好. 2.挤时间学习 3.学好编程,不仅仅是学好C语言 二.初始C语言 本章目标 本章重点 1.什么是C语言? 2.第一个C语言程序 3.数据类型 4.变 ...
- 深圳c语言程序设计,深圳零基础玩转C语言编程
零基础玩转C语言编程 教学特色:注重学员的实操动手能力,案例解析且提供一对一服务 使用教材:国家教材 学习内容:掌握Microsft Visual 2010集成开发工具.掌握C语言编程,重点掌握数组. ...
- R语言用户自定义函数的语法结构、编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等)、编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据)、应用自定函数
R语言用户自定义函数的语法结构.编写自定义统计值计算函数(使用ifelse结构计算均值和标准差等).编写自定义日期格式化(format)函数(switch函数使用不同分枝格式化日期数据).应用自定函数 ...
- 编译原理课程作业-Cminus语言的词法及语法分析器实现
Cminus Compiler 编译原理课程作业-Cminus语言的词法及语法分析器实现 设计思想 词法分析 使用确定有限态自动机(DFA)实现与Lex自动分析两种方式实现. 语法分析 使用递归下降方 ...
- 从D语言看C++ Template语法
从D语言看C++ Template语法 许式伟 (版权声明) 2007-5-2 D语言是一门新兴的语言,它试图结合C/C++性能上的高效,同时又象Python.Ruby等"现代"语 ...
- 悠漓带你玩转C语言(数组)
1. 一维数组的创建和初始化. 1.1 数组的创建 数组是一组相同类型元素的集合 数组的创建方式: type_t arr_name [const_n]; //type_t 是指数组的元素类型 //co ...
- 基于Python实现的类Pascal语言的词法分析和语法分析器
类Pascal语言的语法分析器 功能 使用Python实现的类Pascal语言的词法分析和语法分析器. 语法分析实现的功能有: 利用文法推导式构造LR(1)分析表 使用LR(1)分析表对输入的Toke ...
- c语言实现的学生管理系统,教你如何玩飞c语言!
教你如何玩飞c语言------学生管理系统篇上(链表篇) 作为编程语种链最底层的OG(元老),相信无论是学Java,python,JS还是其他语种的小伙伴们,都或多或少地听说过我们年长的长辈,c语言! ...
最新文章
- 新手!SDK Manager里找不到API安装的选项怎么办?
- 《SAS编程与数据挖掘商业案例》学习笔记之十七
- 分析股票大数据_Python大数据分析量学祖师爷网站数据
- 剑指Offer——跳台阶
- 10-300-020-简介-架构-简介
- 简明python教程怎么买-简明python教程在哪买!《简明python教程》 下载地址?
- 【数论】—— 多边形数的计算(三角形数,五边形数)
- Apache+tomcat集群
- 基于Nextcloud,挂载Google drive,搭建Aria2+AriaNg,实现在线下载BT磁链/在线观看/全功能文件管理/无限容量云盘
- Linux网络编程(Socket)(一)
- 深股通,沪股通,港股通
- 专属于程序员的理财建议,抱走不谢
- 集成框架 -- 快手接入
- LMS算法实现系统识别
- 移动硬盘安装ubuntu(UEFI)——遇到的问题以及解决方法
- css属性visibility:unset
- C# 数字转16进制和字符串转换16进制
- 模板template
- 手机扫描证件识别的优势
- android 使用阿里百川电商SDK的问题