golang的变量和函数的初始化顺序

package main

import (
	"fmt"
)

var b int64 = a()

func init() {
	fmt.Println("init in main.go ")
}

func a() int64 {
	fmt.Println("calling a()")
	return 2
}
func main() {
	fmt.Println("calling main")
	fmt.Println(b)
}

输出为:

calling a()
init in main.go
calling main
2

        golang中程序首先加载依赖,加载依赖的顺序为率先加载不依赖别的依赖的依赖,之后加载全局变量,然后执行init()函数,最后是main函数,在函数中加载变量的顺序同加载依赖的方法相同,率先加载不依赖别的变量的变量。

        还记得在cobra中,经常用到init这个初始化函数

var versionCmd = &cobra.Command{
	Use:              "version",
	Short:            "Print the version number of Hugo",
	TraverseChildren: true,
	Long:             `All software has versions. This is Hugo's`,
	Args:             cobra.MinimumNArgs(1),
	Run: func(cmd *cobra.Command, args []string) {
		fmt.Println("Hugo Static Site Generator v0.9 -- HEAD")

		fmt.Println(cmd.Flags().GetString("name"))
		fmt.Println(cmd.Flags().GetString("author"))
	},
}

func init() {
	rootCmd.AddCommand(versionCmd)
	var Source string
	versionCmd.Flags().StringVarP(&Source, "source", "s", "", "读取文件路径")

	var Name string
	versionCmd.Flags().StringVarP(&Name, "name", "n", "default name", "你的名字")
}

在这段程序中,首选会加载versionCmd这个变量,之后执行init函数来进行初始化。

你可能感兴趣的:(我的golang学习之旅,golang,开发语言,后端)