首页 > 其他分享 >Go 快速入门指南 - init 函数

Go 快速入门指南 - init 函数

时间:2022-12-22 16:45:30浏览次数:35  
标签:初始化 入门 init func Go main hello 函数

概述

init() 函数 是一个特殊的函数,一般称为初始化函数,不能被调用。 在每个文件里面,当程序启动或者文件被作为包引用的时候, init() 函数就会自动执行,一般用来做一些包的初始化操作。

语法规则

init() 函数 没有参数,也没有返回值。

func init() {
    // do something
}

执行顺序

包的初始化函数按照程序中引入的顺序执行,依赖于具体的顺序优先级,每次初始化一个包。例如 包 a 引入了 包 b, 那么确保 包 b 的初始化操作 在 包 a 的初始化操作之前完成。初始化过程是自下而上的,main 包 最后初始化,也就是说,在 main 函数 执行前, 所引用到的包已经全部初始化完成。

import -> const -> var -> init() -> main()

例子

包变量初始化

package main

import "fmt"

var (
    pageIndex int
    pageSize  int
)

func init() {
    pageIndex = 1
    pageSize = 20
}

func main() {
    fmt.Printf("page index = %d\n", pageIndex)
    fmt.Printf("page size = %d\n", pageSize)
}

// $ go run main.go
// 输出如下 
/**
  page index = 1
  page size = 20
*/

多个包之间引用初始化顺序

// 定义包 A
package A

func init() {
    println("hello A")
}

// 定义包 B
package B

import "A" // 包 B 引用包 A

func init() {
    println("hello B")
}

package main

import "B" // 包 main 引用包 B

func init() {
    println("hello main")
}

func main() {
    println("hello world")
}

// $ go run main.go
// 输出如下 
/**
  hello A
  hello B
  hello main
  hello world
*/
```

reference
=========

1.  1. https://book.douban.com/subject/27044219/

## 联系我

![公众号](/i/l/?n=23&i=blog/659234/202212/659234-20221212222239874-1055285184.png)

标签:初始化,入门,init,func,Go,main,hello,函数
From: https://www.cnblogs.com/duanbiaowu/p/16998851.html

相关文章

  • Go 快速入门指南 - 零值和错误
    零值当一个变量使用 var 进行声明后并未进行初始化(变量后面没有赋值符 =)操作,会默认分配一个零值(zerovalue)。不同类型对应的零值类型零值boolfalse......
  • Go 快速入门指南 - 判断是否实现接口
    判断是否实现接口Go里面没有 implements 关键字来判断一个结构体(对象)是否实现了某个接口, 要实现类似的功能,需要用到 类型断言。类型断言// 判断 v 是否实......
  • Go 快速入门指南 - 字符切片
    概述建议先阅读 字符串, 切片 两个小节。由于字符串不可变,如果每次以 重新赋值 的方式改变字符串,效率会非常低,这时应该使用 []byte 类型,[]byte元素可以被修改。......
  • Go 快速入门指南 - 切片
    概述阅读本小节之前,建议先阅读 数组 小节。切片 是对数组的一个连续片段的引用。片段可以是整个数组,也可以是数组的一部分(例如数组的第3个元素到第8个元素)。所......
  • Go 快速入门指南 - Map
    概述Map 是一种键值对的无序集合,在其他编程语言中也被称为 字典, Hash, 关联数组。重要的一点是: Map键 的数据类型必须是可以比较的,例如 string, int, float6......
  • Go 快速入门指南 - make 和 new
    概述new() 函数为数据类型T分配一块内存,初始化为类型T的零值,返回类型为指向数据的指针,可以用于所有数据类型。make() 函数除了为数据类型T分配内存外,还可以指定......
  • Go 快速入门指南 - 有序 Map
    概述Map 的遍历是无序的,这意味着不能依赖遍历的键值顺序。如果想实现Map遍历时顺序永远一致,一个折中的方案时预先给Map的 键 排序,然后根据排序后的键序列遍历Map......
  • Go 快速入门指南 - 变长参数和指针参数
    变长参数在函数的最后一个参数的数据类型之前加上省略号 ... ,表示该参数的数据类型是 变长类型,调用该函数时可以传递任意数量 (0-N) 的该类型的参数。一个函数......
  • Go 快速入门指南 - defer 函数
    概述一个 defer 语句就是一个普通的函数或方法调用。 defer 语句保证了不论是在正常情况下(return返回),还是非正常情况下(发生错误,程序终止),函数或方法都能够执......
  • java入门
    JAVAHelloWorld创建一个文件夹存放代码/java/code新建一个java文件文件后缀名为.javahello.java编写代码publicclassHelloWorld{ publicstaticvoidm......