http://studygolang.com/articles/5831
package的作用
√ package是golang最基本的分发单位和工程管理中依赖关系的体现。
√ 每个golang源代码文件开头都拥有一个package声明,表示该golang代码所属的package。
√ 要生成golang可执行程序,必须建立一个名为main的package,并且在该package中必须包含一个名为main()的函数。
√ 在golang工程中,同一个路径下只能存在一个package,一个package可以拆成多个源文件组成。
√ import关键字导入的是package路径,而在源文件中使用package时,才需要package名。经常可见的import的目录名和源文件中使用的package名一致容易造成import关键字后即是package名的错觉,真正使用时,这两者可以不同。
• 《Go语言编程》中calc实例
▶ 工程目录
<calcproj>
├─<src>
├─<calc>
├─calc.go
├─<simplemath>
├─add.go
├─add_test.go
├─sqrt.go
├─sqrt_test.go
├─<bin>
├─<pkg>
▶ 详细源码
Δ add.go
package sm func Add(a int, b int) int { return a + b }
Δ sqrt.go
package sm import "math" func Sqrt(i int) int { v := math.Sqrt(float64(i)) return int(v) }
Δ add_test.go
package sm import "testing" func TestAdd1(t *testing.T) { r := Add(1, 2) if r != 3 { t.Errorf("Add(1, 2) failed. Got %d, expected 3.", r) } }
Δ sqrt_test.go
package sm import "testing" func TestSqrt1(t *testing.T) { v := Sqrt(16) if v != 4 { t.Errorf("Sqrt(16) failed. Got %v, expected 4.", v) } }
Δ calc.go
package main import "os" import "fmt" import "strconv" import "simplemath" var Usage = func() { fmt.Println("USAGE: calc command [arguments] ...") fmt.Println("\nThe commands are:\n\tadd\tAddition of two values.\n\tsqrt\tSquare root of a non-negative value.") } func main() { args := os.Args if args == nil || len(args) < 2 { Usage() return } switch args[1] { case "add": if len(args) != 4 { fmt.Println("USAGE: calc add <integer1> <integer2>") return } v1, err1 := strconv.Atoi(args[2]) v2, err2 := strconv.Atoi(args[3]) if err1 != nil || err2 != nil { fmt.Println("USAGE: calc add <integer1> <integer2>") return } ret := sm.Add(v1, v2) fmt.Println("Result: ", ret) case "sqrt": if len(args) != 3 { fmt.Println("USAGE: calc sqrt <integer>") return } v, err := strconv.Atoi(args[2]) if err != nil { fmt.Println("USAGE: calc sqrt <integer>") return } ret := sm.Sqrt(v) fmt.Println("Result: ", ret) default: Usage() } }
▶ 源码说明
calcproj工程中src\simplemath目录下只存在sm一个package,而sm包由四个源文件构成。calc.go文件中可以看到import导入的是simplemath而非sm,而在使用sm包中的Add和Sqrt函数时,使用的才是真正的包名sm。
import关键字
√ 使用import语句导入源代码文件所依赖的package路径。
√ 不得导入源代码文件中没有用到的package,否则golang编译器会报编译错误。
• import语法
▶ 风格一
import "package1" import "package2" import "package3" ...
▶ 风格二
import ( "package1" "package2" "package3" ... )
• import原理
如果编译时main包导入了其他的包,那么这些包将被依次导入。
当一个包被导入时,如果该包还导入了其它的包,那么先将其他的包导入进来,然后再对该包的包级常量和变量进行初始化,最后执行init函数(如果存在)。包的导入如上图所示,是一个递归地过程,等所有被导入的包加载完毕,就会对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在),最后执行main函数。
如果一个包被多个包同时导入,那么它只会被导入一次。
• import修饰操作
• 点(.)操作
点(.)操作的含义是:点(.)标识的包导入后,调用该包中函数时可以省略前缀包名。点(.)操作的语法为:
import . "package1" import . "package2" import . "package3" ...
import ( . "package1" . "package2" . "package3" ... )
下面的示例中,fmt包将使用点操作省略前缀包名,os包用法保持不变:
package main import ( . "fmt" "os" ) func main() { for _, value := range os.Args { Println(value) } }
• 别名操作
别名操作的含义是:将导入的包命名为另一个容易记忆的别名。别名操作的语法为:
import p1 "package1" import p2 "package2" import p3 "package3" ...
import ( p1 "package1" p2 "package2" p3 "package3" ... )
下面的示例中,fmt包将使用别名操作重新命名为f,os包用法保持不变:
package main import ( f "fmt" "os" ) func main() { for _, value := range os.Args { f.Println(value) } }
• 下划线(_)操作
下划线(_)操作的含义是:导入该包,但不导入整个包,而是执行该包中的init函数,因此无法通过包名来调用包中的其他函数。使用下划线(_)操作往往是为了注册包里的引擎,让外部可以方便地使用。下划线(_)操作的语法为:
import _ "package1" import _ "package2" import _ "package3" ...
import ( _ "package1" _ "package2" _ "package3" ... )
相关推荐
标题中的“golang package”指的是Go语言中的包(package),它是Go语言的基本组织单元。包允许程序员将相关的函数、类型、常量和变量组织在一起,以便于重用和模块化。在Go语言中,每个源文件都属于一个包,通过`...
Golang 扩展package golang 扩展package 列表 https://github.com/golang/arch.git https://github.com/golang/playground.git https://github.com/golang/debug.git https://github.com/golang/term.git ...
首先,`package` 是 Golang 中的基本组织单元,它允许我们将相关的函数、类型、变量等代码片段封装在一起。每个 Go 源代码文件都属于一个特定的包,通过在文件顶部定义 `package` 关键字来指定。例如,`package main...
标题 "hello-golang-package" 暗示我们讨论的是一个使用 Go 语言编写的软件包或项目,可能是用于教学或示例目的。描述中的 "hello-golang-package" 与标题一致,表明这是一个简单的入门级 Go 包,可能包含了 "Hello,...
在`pycharm2018.3之golang插件`这个主题中,我们将探讨如何在PyCharm 2018.3版本上安装和配置Golang插件,以便在这款强大的Python IDE中编写和调试Go代码。 首先,我们需要了解为什么在PyCharm 2018.3这个特定版本...
"Go-Faker"就是这样一个工具,它能够根据你的Go(Golang)结构体生成随机的假数据,极大地简化了这个过程。 Go-Faker库是Go语言中的一个强大的工具,它的核心功能是生成各种类型的模拟数据,包括但不限于字符串、...
4. **模块化开发**:Go语言鼓励使用包(Package)来进行模块化开发。百度APP中可能包含很多独立开发的服务,使用Go语言的包机制可以使得不同服务之间的依赖关系清晰、代码的组织结构更加合理。 5. **容器化和微服务...
在终端中输入`go run hello.go`,其中`hello.go`是包含`package main`和`fmt.Println("Hello, World!")`的Go源代码文件。如果一切就绪,程序应该能正确打印出"Hello, World!"。 离线安装Go 1.18.9的过程就是这样。...
package main import ( "time" "github.com/go-robotstxt/robotstxt" ) func main() { for { // 模拟鼠标点击 robotstxt.ClickMouse(100, 100) // 在(100,100)坐标点击 time.Sleep(1 * time.Second) // ...
在Golang中,如果你想要实现音频播放功能,特别是在处理MP3文件时,可以利用外部库,比如BASS库。BASS是一个广泛使用的音频处理库,它提供了强大的音频播放、流处理和格式转换功能。在Golang中使用BASS库通常需要...
Go语言(也称为Golang)凭借其简洁高效的设计,成为了构建高性能网络应用的理想选择之一。在Go语言中,`context` 包提供了强大的工具来处理诸如超时、取消请求等场景,这对于编写健壮的网络服务至关重要。 #### ...
package main import ( "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" ) func main() { // 创建一个新会话,使用默认配置 ...
Golang开发培训知识图谱覆盖了Golang语言的基础知识点和高级应用技能。Golang(通常称为Go)是由Google开发的静态类型、...随着Golang语言在业界的广泛应用,掌握这些知识点对于一个专业IT工程师来说是必备的技能之一。
https://golang.org/x/下的相关的包国内无法下载,这个可以直接将解压后的golang.org-master/x目录下到包放到GOPATH目录下的golang.org/x路径下面,执行go install 包名称就行了
在IT行业中,Go语言(Golang)以其简洁的语法、高效的性能和强大的并发能力受到了许多开发者,特别是后端开发者的青睐。"golang支付合集(包括微信支付,支付宝,)"是一个专为Go语言开发者设计的支付集成库,旨在...
标签中提到了“package-manager”和“dependency-manager”,这表明脚本与软件包管理和依赖管理有关。在Go语言中,`go mod`就是这样的一个工具,负责管理项目依赖的版本、下载和验证。`PackagemanagerShell`可能指的...
Golang 的基本语法包括 package、import、func 等。 * package:在 Golang 中,每个文件都必须归属于一个包。例如:package main * import:引入一个包,例如:import "fmt" * func:定义一个函数,例如:func main...
go语言 下载依赖 package golang.org/x/net/http2/hpack: unrecognized import path "golang.org/x/net/http2/hpack" ... or established connection failed because connected host has failed to respond.)
使用Go的包(package)和结构体(struct)可以将相关的功能模块化。 9. **并发处理**:如果文件夹很大,包含很多文件,可以考虑使用Golang的goroutines和channels进行并发处理,提高搜索速度。 10. **日志记录**:...
Go语言,也被称为Golang,是由Google开发的一种静态类型的、编译型的、并发型且具有垃圾回收功能的强类型语言。它设计的目标是提高开发效率,同时保持系统的高效运行。Go语言的设计受到了C语言的影响,但又引入了...