当前位置: 首页 > news >正文

GO语言之Init函数和main函数

00.Init函数和main函数

一、init函数

go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性。

有下面的特征:

  1. init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
  2. 每个包可以拥有多个init函数
  3. 包的每个源文件也可以拥有多个init函数
  4. 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)
  5. 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
  6. init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

二、main函数

1.main函数

    Go语言程序的默认入口函数(主函数)func main()
    函数体用{}一对括号包裹。

    func main(){
        //函数体
    }

2.init函数和main函数的异同

    相同点:
        两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
    不同点:
        init可以应用于任意包中,且可以重复定义多个。
        main函数只能用于main包中,且只能定义一个。

两个函数的执行顺序:

对同一个go文件的init()调用顺序是从上到下的。

对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数。

对于不同的package,如果不相互依赖的话,按照main包中"先import的后调用"的顺序调用其包中的init(),如果package存在依赖,则先调用最早被依赖的package中的init(),最后调用main函数。

如果init函数中使用了println()或者print()你会发现在执行过程中这两个不会按照你想象中的顺序执行。这两个函数官方只推荐在测试环境中使用,对于正式环境不要使用。

相关文章:

  • Golang内置类型和函数
  • Go高级之Map实现原理
  • windows将pycharm的 默认CMD 终端更改为git bash
  • Anaconda Windows环境搭建与基本使用
  • git 配置ssh key
  • 图文:pycharm远程连接Linux开发与调试代码(超级详细)
  • Python 链接SQL server
  • django使用原生SQL查询示例
  • SQL server安装教程
  • python (socket)网络编程与并发
  • Linux安装Anaconda和虚拟环境配置
  • 2021最强Python学习教程,从零基础入门到精通
  • 大前端基础学习笔记
  • go语言开发之旅
  • Docker 入门到精通
  • CSS3 变换
  • HTML-表单
  • Python打包系统简单入门
  • 从setTimeout-setInterval看JS线程
  • 关于使用markdown的方法(引自CSDN教程)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 双管齐下,VMware的容器新战略
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 智能合约开发环境搭建及Hello World合约
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​插件化DPI在商用WIFI中的价值
  • #QT(串口助手-界面)
  • #单片机(TB6600驱动42步进电机)
  • (30)数组元素和与数字和的绝对差
  • (4)STL算法之比较
  • (C#)一个最简单的链表类
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (学习日记)2024.02.29:UCOSIII第二节
  • (已解决)什么是vue导航守卫
  • (原創) 物件導向與老子思想 (OO)
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .Net MVC + EF搭建学生管理系统
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .net web项目 调用webService
  • .NET 服务 ServiceController
  • .NET 解决重复提交问题
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .Net6 Api Swagger配置
  • .NET框架设计—常被忽视的C#设计技巧
  • [2016.7 test.5] T1
  • [ACTF2020 新生赛]Upload 1
  • [BUUCTF]-PWN:wustctf2020_number_game解析(补码,整数漏洞)
  • [C# WPF] 如何给控件添加边框(Border)?
  • [cocos2d-x]关于CC_CALLBACK
  • [GYCTF2020]Ez_Express
  • [Manacher]【学习笔记】
  • [NKCTF 2024]web解析
  • [Node.js]连接mongodb