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

一篇文了解 Go的 init 函数---目的、执行和最佳实践

文章目录

  • Go init 函数
  • 例子实践
    • 实例 1: init的基本使用
  • 实例 2: 使用init对全局变量初始化
  • 实例3: init 在多文件中
  • 实例4: init 在不同的包中
  • 何时使用 init?
    • 良好用例
    • 避免在以下情况下使用 init
  • 总结:

Go init 函数

在 Go 中,init 函数是一个特殊函数,当软件包初始化时,它会在主函数之前自动执行。它主要用于设置任务,如初始化全局变量、打开数据库连接或注册依赖关系。
init 函数的主要特点:

  1. 无参数和无返回值 - init 函数不接受参数或返回值。
  2. 自动执行 - 它在 main() 之前运行,无需明确调用。
  3. 可以有多个init 函数 - 一个软件包可以有多个 init 函数,甚至可以跨越不同的文件。
  4. 按声明顺序执行 - 如果一个软件包中有多个 init函数,它们将按出现的顺序执行。

例子实践

实例 1: init的基本使用

package main
import "fmt"
func init() {
    fmt.Println("Initializing...")
}
func main() {
    fmt.Println("Main function running...")
}

输出:

Initializing...
Main function running...
结论: init ()函数运行在 main().函数之前

实例 2: 使用init对全局变量初始化

package main
import "fmt"
var config string

func init() {
     config = "Application Configured"
     fmt.Println("Configuring application...")
}

func main() {
fmt.Println(config) 
}

输出: Application Configured

实例3: init 在多文件中

如果软件包有多个文件,所有初始函数都会按照出现的顺序在 main() 之前运行。
File 1: (a.go)

package main
import "fmt"
func init() {
    fmt.Println("Init from a.go")
}

File 2 (b.go):
package main
import "fmt"
func init() {
    fmt.Println("Init from b.go")
}

Main File (main.go)
package main
import (
    "fmt"
)
func main() {
    fmt.Println("Main function running...")
}

输出:(execution order is preserved):
Init from a.go
Init from b.go
Main function running...

实例4: init 在不同的包中

package utils
import "fmt"
func init() {
    fmt.Println("Initializing utils package...")
}
func SayHello() {
    fmt.Println("Hello from utils!")
}

Main File (main.go)
package main
import (
    "fmt"
    "your_project/utils"
)
func init() {
    fmt.Println("Initializing main package...")
}
func main() {
    fmt.Println("Main function running...")
    utils.SayHello()
}

输出(Package-Level Execution Order)
Initializing utils package...
Initializing main package...
Main function running...
Hello from utils!

导入软件包中的 init 函数在 main 中的 init 函数之前运行。

何时使用 init?

良好用例

  1. 初始化全局变量。
  2. 设置日志配置。
  3. 注册依赖关系(如数据库连接)。
  4. 确保在 main() 运行前进行必要的设置。

避免在以下情况下使用 init

  1. 复杂逻辑(最好在 main 中明确初始化)。
  2. 业务逻辑(应放在 main 或其他函数中)。

总结:

  1. init() 会在 main() 之前自动运行。
  2. 它没有参数,也没有返回值。
  3. 每个软件包可以有多个 init 函数。
  4. 导入软件包中的init 会在 main 中的 init 之前运行

相关文章:

  • 【大模型学习】第三章 Prompt工程技术要点详解:从原理到应用
  • 如何实现在Windows系统内搭建Linux系统(WSL)
  • FPGA学习篇——Verilog学习3
  • 记录遇到的面试题
  • 云服务器漏洞 ALINUX3-SA-2024:0050: container-tools:rhel8 安全和BUG修复更新
  • Jmeter日志打印
  • 某小说网站爬虫
  • Hessian 矩阵的正定性与目标函数凸性的证明
  • 第52天:Web开发-JavaEE应用SpringBoot栈SnakeYaml反序列化链JARWAR构建打包
  • 【FSM-3: 串行序列】
  • 40岁开始学Java:Java中ASCII和Unicode的区别
  • Jenkins 删除历史构建记录
  • FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)
  • ‘QDesktopWidget::availableGeometry‘: Use QGuiApplication::screens()
  • 突破光学成像局限:全视野光学血管造影技术新进展
  • 【SDR课堂第12讲】AD9361毛刺问题总结
  • LeetCode 解题思路 9(Hot 100)
  • [python] del
  • 20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡为ext4格式
  • 【Linux】冯诺依曼体系结构-操作系统
  • 外贸网站怎么推广/站长工具果冻传媒
  • 数据库服务器/怎么做好网站搜索引擎优化
  • wordpress一键采集/seo和sem是什么意思
  • 做网站和app/重庆seo公司
  • 网站怎么做企业/昆明seo
  • 江苏建设集团招聘信息网站/网络营销有本科吗