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

简介: Go语言系列学习文章

章节

  • 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两个包
创建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 设置出现问题-待解决

运行结果如下所示:
main.go 运行结果

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

目录
相关文章
|
20天前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
31 7
|
19天前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
20天前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
93 71
|
19天前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
100 67
|
20天前
|
存储 Go
go语言中映射
go语言中映射
32 11
|
21天前
|
Go 索引
go语言修改元素
go语言修改元素
27 6
|
11天前
|
Go 数据安全/隐私保护 UED
优化Go语言中的网络连接:设置代理超时参数
优化Go语言中的网络连接:设置代理超时参数
|
Go
go起步-语法控制语句
主要记录下go语言if、for siwtch循环控制语句
1357 0
|
22天前
|
Go 索引
go语言for遍历数组或切片
go语言for遍历数组或切片
91 62
|
23天前
|
并行计算 安全 Go
Go语言中的并发编程:掌握goroutines和channels####
本文深入探讨了Go语言中并发编程的核心概念——goroutine和channel。不同于传统的线程模型,Go通过轻量级的goroutine和通信机制channel,实现了高效的并发处理。我们将从基础概念开始,逐步深入到实际应用案例,揭示如何在Go语言中优雅地实现并发控制和数据同步。 ####