9. Go 包

Go语言是使用包来组织源代码的,包(package)是多个 Go 源码的集合,是一种代码复用方案。Go语言中为我们提供了很多内置包,如 fmt、os、io等。

任何源代码文件必须属于某个包,同时源码文件的第一行有效代码必须是 package pacakgeName 语句,通过该语句声明自己所在的包。

Go语言没有强制要求包名必须和其所在的目录名同名,但还是建议包名和所在目录同名,这样结构更清晰。

同一个路径下只能存在一个package,一个package可以由多个源代码文件组成, package main 包 有且只能由一个main函数

包名的定义是不包括目录路径的,但是包在引用时一般使用全路径引用。比如在GOPATH/src/a/b/下定义一个包 c。在包 c 的源码中只需声明为package c,而不是声明为package a/b/c,但是在导入 c 包时,需要带上路径,例如import "a/b/c

go mod 存在时引入自定义包是以 go mod文件module 名称开头 如module coolcar 引入自定义包"coolcar/proto/gen/go"

Go中如果函数名的首字母大写,表示该函数是公有的,可以被其他程序调用,如果首字母小写,该函数就是是私有的。

包名

包名一般是小写的,使用一个简短且有意义的名称。

包名一般要和所在的目录同名,也可以不同,包名中不能包含-等特殊符号。

包一般使用域名作为目录名称,这样能保证包名的唯一性,比如 GitHub 项目的包一般会放到GOPATH/src/github.com/userName/projectName 目录下。

包名为 main 的包为应用程序的入口包,编译不包含 main 包的源码文件时不会得到可执行文件。

导入包

import “包的路径”

import 导入语句通常放在源码文件开头包声明语句的下面;

导入的包名需要使用双引号包裹起来;

包名是从GOPATH/src/后开始计算的,使用/ 进行路径分隔。

// 单行导入
import "包 1 的路径"
import "包 2 的路径"

// 多行导入  多个包 推荐使用多行
import (
    "包 1 的路径"
    "包 2 的路径"
)

包的导入路径

包的引用路径有两种写法,分别是全路径导入和相对路径导入。

相对路径只能用于导入GOPATH下的包,标准包的导入只能使用全路径导入。

绝对路径就是GOROOT/src/GOPATH/src/后面包的存放路径。

包的引用格式

使用标准格式引用包,但是代码中却没有使用包,编译器会报错。如果包中有 init 初始化函数,则通过import _ "包的路径" 这种方式引用包,仅执行包的初始化函数,即使包没有 init 初始化函数,也不会引发编译器报错。

package main

// 定义别名
import F "fmt"

func main() {
    // 使用别名调用方法
    F.Println("import别名")
}



// 省略引用格式
package main
import . "fmt"
func main() {
    //不需要加前缀 fmt.
    Println("省略引用格式 此种方式不推荐  因为无法识别函数属于那个包")
}

// 匿名引用格式 
package main

import (
    _ "database/sql"
    "fmt"
)

func main() {
    fmt.Println("匿名引用格式")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值