玩转Go语言之特殊的语法

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值