Это третий день моего участия в Gengwen Challenge.Подробности о мероприятии, пожалуйста, проверьте:Обновить вызов
Если ❤️моя статья оказалась полезной, ставьте лайк и подписывайтесь. Это самый большой стимул для меня продолжать техническое творчество.Больше прошлых статей в моем личном блоге
Функция инициализации () Голанга
Возьмем пример
package main
import "fmt"
func init() {
fmt.Println("init() 1:", a)
}
func init() {
fmt.Println("init() 2:", a)
}
var a = 10
const b = 100
func main() {
fmt.Println("main() :", a)
}
// 执行结果
// init() 1: 10
// init() 2: 10
// main() : 10
что такое инициализация()
существуетGo
В процессе проектирования языка сохраняются две функции по умолчанию:main()
а такжеinit()
функция.
Разница между ними заключается в следующем:
-
main()
функция может использоваться только вmain
пакет, и каждыйmain
пакет может иметь только一个main()
функция - но для
init()
функция, может использоваться во всех пакетах. А программа (даже файл) может записать сколько угодноinit()
функция.
Примечание: Вы можете написать сколько угодно в программе (или даже в файле)
init()
функция, но для поддержки кода可读性
,排查问题
не приносит никакой пользы
функции init()
-
init()
используется для程序运行前
Инициализация пакета (пользовательские переменные, установленные коммуникационные соединения) работают -
每个包
,每个程序文件
Одновременно можно иметь несколько init(), но不建议
- Несколько в одном пакете или файле
init() 执行顺序
, явно не в Голанге - разные пакеты
init()
порядок исполнения согласно导入包的依赖关系
Принимать решение -
init()
не может вызываться другими функциями, но автоматически在main函数执行前
называться
- ссылка изeffective_go
когда init() выполняется
init()
Функция — Голанг程序初始化
часть включения.
Программно на Голанге初始化先于 main()
Реализация: конкретнаяruntime
Инициализируйте каждый импортированный пакет.
- Последовательность инициализации следующая
解析的依赖关系
порядок исполнения,Пакеты без зависимостей инициализируются первыми. - Сначала инициализируется область действия каждого пакета.
常量
,变量
(где: константы идут перед переменными), а затем выполнить внутреннюю часть пакетаinit()
. - Один и тот же пакет и файл могут быть
同时拥有
Множественная инициализация(). - init() — это то же самое, что и main(),
没有任何参数和返回值
, не может вызываться другими функциями. - тот же пакет, файл
多个 init()
Порядок выполнения не ясен.
Сводка порядка выполнения: import -> const -> var -> init() -> main()