博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
玩转Go语言之特殊的语法
阅读量:5983 次
发布时间:2019-06-20

本文共 1238 字,大约阅读时间需要 4 分钟。

defer 语句

这玩意基本没啥作用,就是在一个函数中如果某行代码前面有defer 关键字的话,这行代码就最后执行,如果有多个defer语句的话,遵循后进先出的原则

例如:

fmt.Println("申请存储空间")defer fmt.Println("释放存储空间")fmt.Println("使用存储空间")fmt.Println("使用存储空间")fmt.Println("使用存储空间")复制代码

简化代码作用:

func ReadWrite() bool {    file.Open("file")    defer file.Close    if failureX {     // file.Close()      retrun false      }    if failureY {        //file.Close()        return false    }        //file.Close    return 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

你可能感兴趣的文章
git 几款好用的客户端工具
查看>>
运维平台第一版本实现过程
查看>>
启动oracle em命令
查看>>
Android Studio 第五十六期 - Android之系统设置选项的包名
查看>>
mysql准实时同步数据到Elasticsearch
查看>>
Django+ PowerShell 管理AD系统
查看>>
MFA(Multi-Factor Authentication)应用之Outlook2013排错
查看>>
Kickstart+HTTP+DHCP+TFTP全自动批量安装部署Linux系统
查看>>
Docker学习之容器
查看>>
17.Azure备份(MARS)代理(上)
查看>>
解决MSN无法登录问题的意外收获
查看>>
不只是折腾!OS X 10.10 Yosemite 改造攻略
查看>>
演示:通过实验取证IP报文的各个字段
查看>>
C#设计模式(6)——原型模式(Prototype Pattern)
查看>>
Lync日常维护之三:客户端显示状态未更新的处理方法
查看>>
Oracle网格控制器OMA端安装Yast
查看>>
Android应用程序组件Content Provider应用实例(1)
查看>>
想晋级高级工程师只知道表面是不够的!Git内部原理介绍
查看>>
JavaScript基础——深入学习async/await
查看>>
MVP那些事儿(6)MVC转化为MVP
查看>>