Golang特殊init函数

ops/2024/9/23 11:17:39/

介绍

        init()函数是一个特殊的函数,存在一下特性

  • 不能被其它函数调用,而是子main()函数之前自动调用
  • 不能作为参数传入
  • 不能有传入参数和返回值

        作用:

  • 对变量进行初始化
  • 检查/修复程序状态
  • 注册
  • 运行一次计算

        以下是<<the way to go>>的解释:

变量除了可以在全局声明中初始化,也可以在 init ()函数中初始化。这是一类非常特殊的函数,它不能够被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比 main 函数高。

每个源文件都只能包含一个 init() 函数(此处存在错误)。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。

 使用

  • 每个源文件都可以包含多个init()函数

  • 导入包的顺序决定了init函数的执行顺序

go中不同包中init函数的执行顺序是根据包的导入关系决定。

 init函数调用关系:图片来源网络

场景

  • 对变量进行初始化

package mainimport ("math"
)var pi float64func init() {pi = 4 * math.Atan(1)}
  • 在程序开始前,调用后台执行goroutine
package mainfunc init() {go backend()}
  • 连接数据库
package mainimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx"
)var Db *sqlx.DBfunc init() {database, err := sqlx.Open("mysql", "root:xxx@tcp(127.0.0.1:3306)/test")if err != nil {fmt.Println("open mysql fail", err)return}Db = database
}

http://www.ppmy.cn/ops/24863.html

相关文章

什么是智慧民航?详解实现智慧民航目标的关键工具与技术

一、 智慧民航是什么&#xff1f; 智慧民航是指运用现代信息技术&#xff0c;特别是互联网、大数据、云计算、物联网和人工智能等&#xff0c;对民航业的各个环节进行优化和革新的一种模式。它致力于实现民航服务的个性化、运营的高效化、管理的智能化和监管的精准化&#xf…

E-MapReduce极客挑战赛季军方案

前一段时间我参加了E-MapReduce极客挑战赛&#xff0c;很幸运的获得了季军。在这把我的比赛攻略给大家分享一下&#xff0c;希望可以抛砖引玉。 赛题分析与理解 赛题背景&#xff1a; 大数据时代&#xff0c;上云已成为越来越多终端客户大数据方案的落地选择&#xff0c;阿里…

Flutter创建自定义的软键盘

参考代码&#xff1a; Flutter - Create Custom Keyboard Examples 本文贴出的代码实现了一个输入十六进制数据的键盘&#xff1a; &#xff08;1&#xff09;支持长按退格键连续删除字符&#xff1b; &#xff08;2&#xff09;可通过退格键删除选中的文字&#xff1b; &…

Agent AI智能体的未来

随着科技的飞速发展&#xff0c;Agent AI智能体的智能化水平也在不断提高&#xff0c;它们将在未来社会中扮演更加重要的角色。以下是我对Agent AI智能体未来发展趋势的探讨&#xff0c;涵盖技术进步与创新、伦理与法律规范以及经济与就业市场三个方面。 一、技术进步与创新 …

【JDBC】数据库连接池

1 简介 1.1 概念 持有多个数据库连接的容器&#xff0c;当程序需要操作数据库的时候&#xff0c;直接可以从池中取出连接&#xff0c;使用完成之后&#xff0c;再放回到池中。 1.2 优点 节省资源。如果每次访问数据库&#xff0c;都需要创建新的连接&#xff0c;在使用完成后…

Oracle 表分区

1.概述 分区表就是将表在物理存储层面分成多个小的片段&#xff0c;这些片段即称为分区&#xff0c;每个分区保存表的一部分数据&#xff0c;表的分区对上层应用是完全透明的&#xff0c;从应用的角度来看&#xff0c;表在逻辑上依然是一个整体。 目的&#xff1a;提高大表的查…

常见设计模式及其Rust实现

本文提供了一个设计模式的综合概述&#xff0c;涵盖了设计模式的必要性&#xff0c;基本原则以及23种常见模式的概括性描述。结合Rust语言自身的特性&#xff0c;重点阐述了Rust中Builder&#xff0c;Combinator&#xff0c;RAII,Typestate(state machine), Command, Strategy和…

Go语言基本语法(四)函数与变量的作用域

函数 Go语言中的函数&#xff08;Function&#xff09;是执行特定任务的代码块&#xff0c;它们是构建程序的基本单位之一。函数可以接受输入参数&#xff0c;执行一系列操作&#xff0c;并可返回结果。Go语言的函数设计简洁&#xff0c;强调代码的清晰度和模块化。下面是Go函…