golang入门-- import包与包内init方法的执行时机

golang入门-- import包与包内init方法的执行时机,第1张

概述最近在学习revel(golang web开发框架) ,了解到revel管理和加载所有controller的方式。其中涉及的golang基础知识是import包。下面我们先来看看golang  imort包的几种方法和特征: 第一种方式相对路径 import "./module" //当前文件同一目录的module目录, 此方式没什么用容易出错</span> 第二种方式绝对路径 impor

最近在学习revel(golang web开发框架),了解到revel管理和加载所有controller的方式。其中涉及的golang基础知识是import包。下面我们先来看看golang imort包的几种方法和特征:

第一种方式相对路径

import   "./module"   //当前文件同一目录的module目录, 此方式没什么用容易出错</span>

第二种方式绝对路径

import “LearnGo/init” //加载gopath/src/LearnGo/init模块

下面展示一些特殊的import方式

1.点 *** 作

我们有时候会看到如下的方式导入包

import( . “fmt” )  

这个点 *** 作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println("hello world")可以省略的写成Println("hello world")

2.别名 *** 作

别名 *** 作顾名思义我们可以把包命名成另一个我们用起来容易记忆的名字,revel框架的app/controllers/tmp/main.go(框架的启动入口)里可以看到此方式的应用。

import(    f "fmt")

别名 *** 作的话调用包函数时前缀变成了我们的前缀,即f.Println("hello world")。


import (//revel框架的代码片段	"flag"	"reflect"	"github.com/revel/revel"	controllers0 "github.com/revel/modules/static/app/controllers"	_ "github.com/revel/modules/testrunner/app"	controllers1 "github.com/revel/modules/testrunner/app/controllers"	_ "guild_website/app"	controllers "guild_website/app/controllers"	tests "guild_website/tests"	"github.com/revel/revel/testing")

3._ *** 作

这个 *** 作经常是让很多人费解的一个 *** 作符,请看下面这个import

import (//revel框架的代码片段	_ "github.com/revel/modules/testrunner/app"	_ "guild_website/app")

_ *** 作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数,要理解这个问题,需要看下面这个图,理解包是怎么按照顺序加载的:

程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它 只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被导入时,如果该包还导入了其它的包,那么会先 将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开 始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。此外需了解别名 *** 作方式导入包也会执行init函数

总结

以上是内存溢出为你收集整理的golang入门-- import包与包内init方法的执行时机全部内容,希望文章能够帮你解决golang入门-- import包与包内init方法的执行时机所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1285044.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存