• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go语言基础语法(import)-5

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

章节

  • import 导包基础语法简介
  • import 导包原理
  • import 导包实践

1.import 基础语法简介

1.1 import语句可以导入源代码文件所依赖的package 包

1.1.1 import fmt

package main

import "fmt"

func main() {
    fmt.Println("测试")
}

1.2 不得导入源代码文件中没有用到的package,否则Go语言编译器会报编译错误

1.2.1 引入源代码程序中用不到的time包 (2018版的 goland 可以自动去除没有使用的package)

1.3 import 语法格式分为两种

1.3.1 语法格式1

import  "package1"
import  "package2"
import  "package3"

1.3.2 语法格式2

import (
      "package1"
      "package2"
      "package3"
)

2 import原理

  • 如果一个package main 中导入其他的包,包将被顺序导入;
  • 如果导入的包中依赖其他包(包B),会首先导入B包,然后初始化B包中常量和变量,最后如果B包中有init()方法,会自动执行init();
  • 所有包导入完成后才会对main中的常量变量进行初始化,谈后执行main中的init函数(如果存在),最后执行main函数;
  • 如果一个包被导入多次则该包只会被导入一次;

先初始化依赖包,包中内容的初始化为 常量&变量->init()函数->main(主程文件)中的main()函数

import导入依赖包原理图如下所示:

3.import 导包实践

3.1 创建learn01 、show02两个包

代码如下所示:
learn/lean01.go

package learn01

import "fmt"

//初始化函数
func init() {
   fmt.Println("learn_1 init")
}

//a函数 什么都不做
func Learn1() {

}

show02/show.go

package show02

import "fmt"

//初始化函数
func init() {
    fmt.Println("show_2 init")
}

//函数名大写
func Show2() {

}

main.go

package main

//问题1:没有自动 import 相关的包
import (
    "fmt"
    "learn01"
    "show02"
)

/**
   注意:无论fmt println 函数放在learn01.Learn1() show02.Show2()之前还是之后都是最后打印的,
       这其实是import原理导致的
 */
func main() {
    fmt.Println("main println")
    learn01.Learn1()//注意此为空方法体
    show02.Show2()
}

问题列表:

  • 最新版goland 2018.02版本对于源代码的放置路径有严格要求,必须放置在项目的 src 目录下?
  • import 自动导包功能缺失?

以上两个问题在网上暂时没有找到解决方案,估计是个人 ide 设置出现问题-待解决

运行结果如下所示:

注意:不同包的init()函数执行先后顺序跟导包顺序相关。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go搭建web服务发布时间:2022-07-10
下一篇:
Go语言核心36讲(Go语言实战与应用十五)--学习笔记发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap