Go语言 · 学习笔记 | 青训营

2023年 8月 28日 19.4k 0

一、Go包管理

  • 什么是Go语言中的包
    我们在使用其他语言,比如Java,是有包的概念的,它是Java语言中组织我们的Java文件的一个概念,比如java.lang这个包,他里面有很多我们常用的类,比如String。在Go语言中,包也是类似的概念,它是把我们的go文件组织起来,可以方便进行归类、复用等目的。 比如Go内置的net包:
  • net
    ├── http
    ├── internal
    ├── mail
    ├── rpc
    ├── smtp
    ├── testdata
    ├── textproto
    └── url

    以上是net包的一个目录结构,net本身是一个包,net目录下的http又是一个包。从这里大家可以看到,go语言的包其实就是我们计算机里的目录,或者叫文件夹,通过它们进行目录结构和文件组织,go只是对目录名字做了一个翻译,叫【包】而已。比如这里的net包其实就是net目录,http包其实就是http目录,这也是go语言中的一个命名习惯,包名和文件所在的目录名是一样的。

    2. 包的命名

    go语言的包的命名,遵循简洁、全小写、和go文件所在目录同名的原则,这样就便于我们引用,书写以及快速定位查找。

    比如go自带的http这个包,它这个http目录下的所有go文件都属于这个http包,所以我们使用http包里的函数、接口的时候,导入这个http包就可以了。

    package main
    
    import "net/http"
    
    func main() {
    http.ListenAndServe("127.0.0.1:8080",handler);
    }
    

    从这个例子可以看到,我们导入的是net/http,这在go里叫做全路径,因为http包在net里面,net是最顶级的包,所以必须使用全路径导入,go编译程序才能找到http这个包,和我们文件系统的目录路径是一样的。

    因为有了全路径,所以命名的包名可以和其他库的一样,只要它们的全路径不同就可以了,使用全路径的导入,也增加了给包名命名的灵活性。

    对于自己或者公司开发的程序而言,我们一般采用域名作为顶级包名的方式,这样就不用担心和其他开发者包名重复的问题了。

    如果你没有自己的域名,怎么办呢?这时候可以使用github.com。干研发这一行的,在github都会有个账号,如果没有赶紧申请一个,这时候我们就可以使用github.com/作为你的顶级路径了,别人是不会和你重名的。

    package main
    
    import "github.com/rujews/tools"
    

    这就是换成github.com命名的方式。

    3. main包

    当把一个go文件的包名声明为main时,就等于告诉go编译程序,我这个是一个可执行的程序,那么go编译程序就会尝试把它编译为一个二进制的可执行文件。

    一个main的包,一定会包含一个main()函数,这种我们也不陌生,比如C和Java都有main()函数,它是一个程序的入口,没这个函数,程序就无法执行。

    在go语言里,同时要满足main包和包含main()函数,才会被编译成一个可执行文件。

    我们看一个Hello World的Go语言版本,来说明main 包。

    package main
    
    import "fmt"
    
    func main() {
    fmt.Println("Hello, Golang")
    }
    

    假设该go文件叫hello.go,放在$GOPATH/src/hello目录下(补充:自从有了go module后不必一定在此目录下了),那么我们在这个目录下执行go build命令就会生成二进制的可执行文件,在window系统下生成的是hello.exe,在Unix,MAC和Linux下生成的是hello,我们在CMD或者终端里执行它,就可以看到控制台打印的:

    Hello, Golang
    

    二进制可执行文件的名字,就是该main包的go文件所在目录的名字,因为hello.go在hello目录下,所以生成的可执行文件就是hello这个名字。

    相关文章

    服务器端口转发,带你了解服务器端口转发
    服务器开放端口,服务器开放端口的步骤
    产品推荐:7月受欢迎AI容器镜像来了,有Qwen系列大模型镜像
    如何使用 WinGet 下载 Microsoft Store 应用
    百度搜索:蓝易云 – 熟悉ubuntu apt-get命令详解
    百度搜索:蓝易云 – 域名解析成功但ping不通解决方案

    发布评论