Go语言包导入(15)| Go主题月

501 阅读4分钟

内置包导入

Go语言项目中可以看到要导入很多包,使用import 关键字。例如

import "fmt"

或者

import (
    "fmt"
)

除了fmt包,Go语言有很多非常常见的标准库(内置包)介绍一下(内置包可以不指定包的路径):

  1. io:文件操作,进行文件读写,通常用来对文件流,字节流进行处理
  2. strconv:数据类型转换,这个包名字可以看作是string convert两个单词的缩写。
  3. error:对错误操作的包
  4. math:包含了一些数学常量和一些数据数学函数
  5. os:提供一些系统相关的函数,例如文件权限操作,文件创建删除,获取主机名,获取进程ID等等
  6. time:提供时间显示,转换,计算的函数

psb (1).gif

本地自定义包导入

那么那些自定的包们如何使用导入呢?有两种方法:使用相对路径和绝对路径。例如:
使用相对路径: import "./model" ,但是不推荐这种方法。
使用绝对路径import "mypkg/model",会加载GOPATH/src/mypkg/model模块。
上篇文章说过打开Go Modules模式情况下这种GOPATH/src/这段路径就会失效,所以导入相同目录下包使用类似绝对路径的方法,绝对路径的根目录就会从项目的文件名开始找包。举个例子: 打开Go Modules 模式,新建一个文件夹GoStudy文件夹做为一个项目文件夹,新建一个main.go作为项目的入口文件,在项目文件夹根目录新建一个文件夹mypkg,在文件夹mypkg下面新建一个mypkg.go的文件。作为自定义本地包,输入以下内容作为测试:

package mypkg

import "fmt"

func Show(){  //记得函数名字首字母大写,要在其他包调用它
    fmt.Println("my name is mypkg")  
}

此时的目录文件结构为:

image.png 接下来在main.go输入下面内容:

package main
import (
	"fmt"
	"GoStudy/mypkg"
)
func main() {
	mypkg.Show()
	fmt.Println("hello")
}

在这个项目文件夹输入go mod init GoStudy 在项目根目录下生成go.mod文件,会自动生成以下内容:

module GoStudy

go 1.16

然后就可以运行测试main.go:

image.png 可以看到自己的自定义的包中的Show函数已经被调用了。

image.png

远程包导入

假如我们要使用Go语言大名鼎鼎的Gin框架,这就是一个远程的包。 我们直接使用以下命令:

go get github.com/gin-gonic/gin

image.png 如上图所示,可能会下载很多与其相关其他的包,然后在入口文件main.go的import 那里加上这个包GitHub链接,然后测试一下最简单的Gin框架吧

package main
import (
	"fmt"
	"GoStudy/mypkg"
	"github.com/gin-gonic/gin"
)
func main() {
    mypkg.Show()
    fmt.Println("hello")
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
            c.String(200, "Hello,土味挖掘机")
    })
    r.Run() // listen and serve on 0.0.0.0:8080
}

命令行输入go run main.go ,浏览器打开:127.0.0.1:8080

image.png

image.png

import 其他用法

import 方式

还需要说说 import 有三种导入方式。实现三种功能。

import _ "fmt"

执行fmt里面的init()方法,无法使用fmt里面的方法。

import ft "fmt"

给fmt包起一个别名:ft,在包名特别长需要使用里面的方法的时候特别有用,可以使用ft.Println()调试输出。

import import . "fmt"

将fmt包所有的方法导入到当前包种,可以直接直接使用fmt里面所有的方法,例如直接使用Println("hello"),但是这种方法不推荐使用,会有函数重名报错的风险。

init 函数

在包被调用时会事先执行。init函数的格式和普通函数一样,功能主要做一些初始化处理,例如收集一些环境变量,加载配置文件等等,例如我们写一个调用的打印输出的init的函数的例子:

package mypkg

import "fmt" 

func init(){
    fmt.Println("mypkg包,环境变量已初始化,配置文件已加载!")
}

Go语言的基本知识差不多都讲完了,后面打算写一点代码片段,根据我自己的兴趣,例如Go语言图像处理,Gin框架,GUI程序制作,做一些小功能或者工具来慢慢了解巩固Go语言的其他的语法知识,至于高级用法,例如协程(Goroutine),通道(channel),指针我们后面边学边聊。

image.png