ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Go之导入包、init函数、全局变量和main()函数的执行顺序

2022-06-18 14:03:18  阅读:294  来源: 互联网

标签:函数 fmt Println init func Go main


此文是学习了韩顺平老师的视频之后总结的,方便以后自己查阅,如有不对,请指出批评。

1.每一个源文件都可以包含一个init函数,该函数会在init函数执行之前被Go框架调用,也就是说init函数在main函数执行前被调用。

因此可以使用init函数进行一些初始化的工作。

1 func init() {
2     fmt.Println("我先来的哦init")
3 }
4 
5 func main() {
6     fmt.Println("我居然是老二")
7 }
结果为:

  我先来的哦init
  我居然是老二

2.但是如果一个文件包含全局变量,init函数和main函数,它的执行流程是:定义全局变量-->init函数-->main函数。

import "fmt"

var first=test()
  
func test(){
    fmt.Println("我才是真正的老大first")
}

func init() {
    fmt.Println("我变成老二了,呜呜呜init")
}

func main() {
    fmt.Println("原本以为在谷底了,怎么走都是向上,没想到啊")
}
结果为:

  我才是真正的老大first
  我变成老二了,呜呜呜init
  原本以为在谷底了,怎么走都是向上,没想到啊main 1

3.如果导入了本地包,则会先执行导入包的变量和init函数

 1 package main
 2 
 3 import (
 4     "fmt"
 5     "main/demo1"
 6 )
 7 
 8 var first = test()
 9 
10 func test() int {
11     fmt.Println("唔啊啊,这是怎么回事啊,test()")
12     return 1
13 }
14 
15 func init() {
16     fmt.Println("怎么会这样,我怎么变成老三了,呜呜呜init")
17 }
18 
19 func main() {
20     fmt.Println("累了,毁灭吧main", first)
21     fmt.Println("Age=", demo1.Age, "Name=", demo1.Name)
 1 package demo1
 2 
 3 import "fmt"
 4 
 5 var Age int
 6 var Name string
 7 
 8 //Age和Name全局变量需要在main.go中使用,
 9 //但是我们先要初始化这两个变量的值
10 
11 //init完成初始化工作
12 func init() {
13     fmt.Println("没想到吧,你们得意的太早的,demo1的init")
14     Age = 100
15     Name = "lalalalala"
16 }

上述的main包和demo1在同一个目录下,直接导入即可,执行结果是:

1 没想到吧,你们得意的太早的,哈哈哈哈,demo1的init。
2 唔啊啊,这是怎么回事啊,我怎么成老二了,全局变量first得到test()函数的结果。
3 怎么会这样,我怎么变成老三了,呜呜呜init。
4 累了,毁灭吧main 1 。                     
5 Age= 100 Name= lalalalala。               

 

标签:函数,fmt,Println,init,func,Go,main
来源: https://www.cnblogs.com/xiaoliyulixianji/p/16388193.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有