• 『GoLang』包


    可见性规则

    在Go语言中,标识符必须以一个大写字母开头,这样才可以被外部包的代码所使用,这被称为导出。标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的。但是包名不管在什么情况下都必须小写。

    在设计Go语言时,设计者们也希望确保它不是过于以ASCII为中心,这意味着需要从7位ASCII的范围来扩展标识符的空间。 所以Go语言标识符规定必须是Unicode定义的字母或数字,标识符是一个或多个Unicode字母和数字的序列, 标识符中的第一个字符必须是Unicode字母。

    包的概念

    Go语言使用包(package)的概念来组织管理代码,包是结构化代码的一种方式。和其他语言如JAVA类似,Go语言中包的主要作用是把功能相似或相关的代码组织在同一个包中,以方便查找和使用。在Go语言中,每个.go文件都必须归属于某一个包,每个文件都可有init()函数。包名在源文件中第一行通过关键字package指定,包名要小写。如下所示:

    package fmt
    

    每个目录下面可以有多个.go文件,这些文件只能属于同一个包,否则编译时会报错。同一个包下的不同.go文件相互之间可以直接引用变量和函数,所以这些文件中定义的全局变量和函数不能重名。

    Go语言的可执行应用程序必须有package main,而且在main包中必须且只能有一个main()函数main()函数是应用程序运行开始入口。在main包中也可以使用init()函数。

    Go语言不强制要求包的名称和文件所在目录名称相同,但是这两者最好保持相同,否则很容易引起歧义。因为导入包的时候,会使用目录名作为包的路径,而在代码中使用时,却要使用包的名称。

    package的导入

    一个Go程序通过import关键字将一组包链接在一起。import其实是导入目录,而不是定义的包名称,实际应用中我们一般都会保持一致。

    例如标准包中定义的big包:package big,import "math/big" ,源代码其实是在GOROOTsrc中的src/math/big目录。在代码中使用big.Int时,big指的才是.go文件中定义的包名称。

    导入多个包时,一般按照字母顺序排列包名称,像GoLand会在保存文件时自动完成这个动作。所谓导入包即等同于包含了这个包的所有的代码对象

    为避免名称冲突,同一包中所有对象的标识符必须要求唯一。但是相同的标识符可以在不同的包中使用,因为可以使用包名来区分它们

    import语句一般放在包名定义的下一行,导入包示例如下:

    package main
    
    import  "context"  //加载context包
    

    导入多个包的常见的方式是:

    import  (
        "fmt"
        "net/http"
     )
    

    调用导入的包函数的一般方式:

    fmt.Println("Hello World!")
    

    下面介绍三种特殊的import方式:

    • import . "fmt"
      点操作的含义是某个包导入之后,在调用这个包的函数时,可以省略前缀的包名,如这里可以写成Println("Hello World!"),而不是fmt.Println("Hello World!")
    • import f "fmt"
      别名操作调用包函数时,前缀变成了别名,即f.Println("Hello World!")。在实际项目中有时这样使用,但请谨慎使用,不要不加节制地采用这种形式。
    • import _ "github.com/go-sql-driver/mysql"
      _ 操作是引入某个包,但不直接使用包里的函数,而是调用该包里面的init函数,比如这个mysql包的导入。此外在开发中,由于某种原因某个原来导入的包现在不再使用,也可以采用这种方式处理。

    包的初始化

    Go语言中init()函数常用于包的初始化,该函数是Go语言的一个重要特性,有下面的特征:

    • init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
    • 每个包可以拥有多个init函数
    • 包的每个源文件也可以拥有多个init函数
    • 同一个包中多个init()函数的执行顺序不定
    • 不同包的init()函数按照包导入的依赖关系决定该函数的执行顺序
    • init()函数不能被其他函数调用,其在main函数执行之前,自动被调用

    导入外部包

    如果你要在你的应用中使用一个或多个外部包,你可以使用go install在你的本地机器上安装它们。go install 是Go语言中自动包安装工具:如需要将包安装到本地它会从远端仓库下载包:检出、编译和安装一气呵成。

    假设你想使用https://github.com/gocolly/colly 这种托管在 Google Code、GitHub 和 Launchpad 等代码网站上的包。

    你可以通过如下命令安装: go install github.com/gocolly/colly 将一个名为 github.com/gocolly/colly 安装在GOPATH/pkg/ 目录下。

    go install/build都是用来编译包和其依赖的包。

    区别: go build只对main包有效,在当前目录编译生成一个可执行的二进制文件(依赖包生成的静态库文件放在GOPATH/pkg)。

    go install一般生成静态库文件放在GOPATH/pkg目录下,文件扩展名a

  • 相关阅读:
    Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存
    Hudi on Flink在顺丰的实践应用
    Kafka监控必备——Kafka-Eagle 2.0.2正式发布
    如何将炫酷的报表直接截图发送邮件——在Superset 0.37使用Schedule Email功能
    突发!美商务部宣布封禁微信,TikTok——面对科技封锁,如何应对
    离线安装Superset 0.37
    Windows系统快速安装Superset 0.37
    Superset 0.37 发布——颜值最高的数据可视化平台
    Hive查看,删除分区
    超详细,Windows系统搭建Flink官方练习环境
  • 原文地址:https://www.cnblogs.com/ice-coder/p/12674585.html
Copyright © 2020-2023  润新知