13.2 包-使用、管理、安装第三方包

1. 包

1.1 使用第三方包

Go语言标准库提供了很多功能,但也并非包罗万象,一旦标准库无法满足项目的需求,开发人员通常会面临两种选择。

  • 自己编写解决问题代码
  • 寻找能够解决问题的包

大多数程序员会倾向于选择第二种做法,即使用第三方包。

  • 第一方包:程序员自己编写的包
  • 第二方包:Go语言自带的包
  • 第三方包:其它开发者提供的包

在选择第三方包时,下面这些问题需要先考虑清楚:

  • 这些代码是做什么的?
    • 优秀的第三方包都有卓越的文档,通过阅读这些文档,可以了解该包是否提供了所需要的功能。
  • 这些代码值得信任吗?
    • 一旦包被导入程序,它就有能力访问操作系统的底层,因此事先了解包的可信任程度至关重要。
    • 有多少人在使用该包,他们的评价如何,是否有可信赖的同行或者同事推荐该包,阅读源代码。
  • 这些代码有人维护吗?
    • 不要选择几年都没有更新的包,而应选择开发方积极维护的包,随着时间的推移,这样的包会变得越来越稳定。
  • 这些代码值得使用吗?
    • 导入第三方包势必增加程序的复杂性和风险,只为了很小的功能付出这样的代价也许并不值得。

1.2 安装第三方包

要使用第三方包,必须先通过go get命令安装它,例如:

  • go get github.com/golang/example/stringutil
  • 安装成功以后,该包的代码将被保存在[GOPATH]/src/github.com/golang/example/stringutil/目录下
    • reverse.go
    • reverse_test.go
  • 使用该包需要通过import语句指明包路径,并在其导出的标识符前面加上包名和"."
    • import "github.com/golang/example/stringutil"
    • fmt.Println(stringutil.Reverse(s))

第三方包可能还会依赖其它第三方包,go get命令会自动解决这些依赖问题。

// 使用第三方包
// 要使用标准库以外的第三方包,必须先通过go get命令安装它 
// go get github.com/golang/example/stringutil 
// 第三方包可能还会依赖其它第三方包,go get命令会自动解决这些依赖问题
package main

import (
    "fmt"
    "github.com/golang/example/stringutil"
)

func main() {
    s := "ti esrever dna ti pilf nwod gniht ym tup I"
    fmt.Println(stringutil.Reverse(s)) // 逆转字符串
}
// I put my thing down flip it and reverse it 

1.3 管理第三方依赖

go get命令还可用于更新已安装的特定包、所有包或项目所依赖的包。

  • 更新特定包,执行如下命令:
    • go get -u github.com/golang/example/stringutil
  • 更新所有包,执行如下命令:
    • go get -u all
  • 更新项目所依赖的包,在项目文件夹中执行如下命令:
    • go get -u

不同的项目可能会依赖同一个第三方包的不同版本,如果都安装在GOPATH目录下,会因路径相同而发生冲突。为此可在项目目录下创建名为"vendor"的子目录,该目录在包路径的搜索过程中比全局的GOPATH目录享有更高优先级,只要将项目所依赖的特定版本的包放到该目录下即可。

使用私有依赖的项目目录结构类型下面这样:

server/
  ├──vendor/ -- 私有依赖
  │    └──github.com/
  │           └──golang/
  │                └──example/
  │                      └──stringutil/
  │                            ├──reverse.go
  │                            └──reverse_test.go
  ├──dao/
  ├──network/
  ├──main.go
  └──user.go

//使用vendor目录存放第三方包
// 在当前项目下创建vendor目录,将第三方包存放到该目录下,这些包将仅为本项目所用
package main

import (
    "fmt"
    "github.com/golang/example/stringutil"
)

func main() {
    s := "ti esrever dna ti pilf nwod gniht ym tup I"
    fmt.Println(stringutil.Reverse(s))
	// I put my thing down flip it and reverse it 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值