• 周五. 3月 1st, 2024

    Go语言笔记:四、代码包

    root

    1月 29, 2021 #import, #package
    package main
    
    import "fmt"
    
    func main() {
    	fmt.Println("HelloWorld")
    }

    package 声明Go语言的包,必须放在文件中代码的第一行。这里声明包为main包,即说明该代码为命令源码文件,编译后可独立运行。

    import “fmt” 导入fmt包。代码包导入的路径就是代码包所在工作区(GOPATH指定的目录)的src目录下的相对路径。如果代码包的路径为 E:/golang/src/log/pprof , 那行代码包的导入路径即为 log/pprof。

    当导入多个代码包时,需要用圆括号括起它们,且每个代码包名独占一行。在调用被导入代码包中的函数或使用其中的结构体、变量或常量时,需要使用包路径的最后一个元素加”.”的方式指定代码所在的包。如下代码示例:

    import (
        "logging"
        "go_lib/logging"
    )
    //代码编译时会抛出”logging redecleared as imported package name"错误

    如果导入包的最后一个元素重复,我们可以给它们起个别名来区分:

    import (
         la "logging"
         lb "go_lib/loggin"
    )

    这样我们就可以在代码中调用了

    var logger la.Logger = la.NewSimpleLogger()

    这里不必给每个引起冲突的代码包都起一个别名,只要能区分它们就可以了。

    如果我们想直接调用某个依赖包的程序,就可以用”.”来代替别名:

    import (
        . "logging"
        lb "go_lib/logging"
    )
    //使用
    var logger Logger = NewSimpleLogger()

    Go语言把变量、常量、函数、结构体和接口统称为程序实体,而把它们的名字统称为标识符。

    标识符可以是任何Unicode编码可以表示的字母字符、数字以及下划线”_”。 并且首字母不能是数字或下划线。

    标识符的首字母的大小写控制着对应程序实体的访问权限。

    1. 大写: 所对应的程序实体就可以被本代码包之外的代码访问到,可称”可导出的”
    2. 小写:程序实体只能被本包内的代码访问。

    注意:

    1. 程序实体必须是非局部的,局部程序实体的意思是,它被定义在了函数或结构体的内部。
    2. 代码包所在的目录必须被包含在环境变量GOPATH的工作区目录中。

    如果只想初始化某个代码包,而不需要使用导入包跌任何代码,可以用”_”代替别名,这种情况下我们只初始化了代码包。

    import _ "logging"

    在GO语言中,有专门的函数负责代码的初始化。这个函数无参数声明和结果声明,且名称必须为init

    func init() {
        println("初始化")
    }

    GO语言会在程序真正执行前对整个程序的依赖进行分析,并初始化相关的代码包。

    所有的代码包初始化函数都会在main函数(命令源码文件中的入口函数)之前执行完成,而且只会执行一次。

    当前代码包中的所有全局变量的初始化会在代码包初始化函数执行前完成。

    在同一个代码包中,可以存在多个代码包初始化函数,甚至代码包内的每一个源码文件都可以定义多个代码包初始化函数。

    Go语言编译器不能保证同一个代码包中的多个代码包初始化函数的执行顺序。

    root

    发表回复