Это третий день моего участия в 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()