go语言的importimport时为什么都从github导入

Go语言_LiteIDE下引用Github上的项目 - 博客频道 - CSDN.NET
热爱技术的IT人
分类:Go语言_Golang
用go语言写项目时,难免会引用到一些Github上的开源项目,下面说说在开发时如何引用。
系统:windows
开发工具:LiteIDE
注意: go get 会将相关的包全部下载下来,
(非常的方便 )
这里我们主要通过go get &指令获取远程的项目
如: go get &/Shopify/sarama&
使用go get 需要确保本机安装了Git,
没有安装 Git 的同学可以参考这篇文章:
示例要引用的项目地址是:/yankai913/go-tools
1. 打开cmd,执行go /yankai913/go-tools,会把项目源代码下载下来,同时控制台输出 /yankai913/go-tools等字样以及下载到本地的地址,我的本地地址是C:\Go\bin\\yankai913\go-tools。
2. 进入go-tools的timetool包,即执行 cd C:\Go\bin\\yankai913\go-tools\timetool,然后,编译,go build,安装,go install。完成后,记得刷新GOPATH,我用的LiteIDE,“package浏览”,“重新加载所有”就行了,此时在编辑器里输入“包名+点”,后面跟着提示信息。
另外,如果你需要go-tools里其他的package,那么你只需要进入相应的包里,执行编译,安装,即可。
排名:第2932名
(0)(1)(17)(2)(0)(11)(5)(0)(17)(24)(16)(20)(3)(9)(6)(0)(12)(36)(12)(10)(12)(0)(5)(0)(2)(23)(1)(1)(0)(60)(32)(83)(12)(24)(19)(8)(5)(1)(34)(31)(0)(2)(50)(3)(1)(0)(4)(10)(3)(0)(2)(3)(17)(16)(0)(0)(0)(9)(29)(9)(0)(1)(1)(1)(2)(1)(2)(1)(7)(2)(1)(1)(1)(1)(2)(3)(0)(13)(3)(11)(1)(1)Go语言的GOPATH与工作目录详解
投稿:junjie
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了Go语言的GOPATH与工作目录详解,本文详细讲解了GOPATH设置、应用目录结构、编译应用等内容,需要的朋友可以参考下
GOPATH设置
go 命令依赖一个重要的环境变量:$GOPATH1
(注:这个不是Go安装目录。下面以笔者的工作目录为说明,请替换自己机器上的工作目录。)
在类似 Unix 环境大概这样设置:
&&& export GOPATH=/home/apple/mygo
为了方便,应该把新建以上文件夹,并且把以上一行加入到 .bashrc 或者 .zshrc 或者自己的 sh 的配置文件中。
Windows 设置如下,新建一个环境变量名称叫做GOPATH:
&&& GOPATH=c:\mygo
GOPATH允许多个目录,当有多个目录时,请注意分隔符,多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下
以上 $GOPATH 目录约定有三个子目录:
1.src 存放源代码(比如:.go .c .h .s等)
2.pkg 编译后生成的文件(比如:.a)
3.bin 编译后生成的可执行文件(为了方便,可以把此目录加入到 $PATH 变量中,如果有多个gopath,那么使用${GOPATH//://bin:}/bin添加所有的bin目录)
以后我所有的例子都是以mygo作为我的gopath目录
应用目录结构
建立包和目录:$GOPATH/src/mymath/sqrt.go(包名:"mymath")
以后自己新建应用或者一个代码包都是在src目录下新建一个文件夹,文件夹名称一般是代码包名称,当然也允许多级目录,例如在src下面新建了目录$GOPATH//astaxie/beedb 那么这个包路径就是“/astaxie/beedb”,包名称是最后一个目录beedb
执行如下代码:
cd $GOPATH/src
&&& mkdir mymath
新建文件sqrt.go,内容如下:
&// $GOPATH/src/mymath/sqrt.go源码如下:
&&& package mymath
&&& func Sqrt(x float64) float64 {
&&&&&&& z := 0.0
&&&&&&& for i := 0; i & 1000; i++ {
&&&&&&&&&&& z -= (z*z - x) / (2 * x)
&&&&&&& return z
这样我的应用包目录和代码已经新建完毕,注意:一般建议package的名称和目录名保持一致
上面我们已经建立了自己的应用包,如何进行编译安装呢?有两种方式可以进行安装
1、只要进入对应的应用包目录,然后执行go install,就可以安装了
2、在任意的目录执行如下代码go install mymath
安装完之后,我们可以进入如下目录:
&cd $GOPATH/pkg/${GOOS}_${GOARCH}
&&& //可以看到如下文件
&&& mymath.a
这个.a文件是应用包,那么我们如何进行调用呢?
接下来我们新建一个应用程序来调用
新建应用包mathapp:
&cd $GOPATH/src
&&& mkdir mathapp
&&& cd mathapp
&&& vim main.go
// $GOPATH/src/mathapp/main.go源码:
&&& package main
&&& import (
&&&&&&&&& "mymath"
&&&&&&&&& "fmt"
&&& func main() {
&&&&&&&&& fmt.Printf("Hello, world.& Sqrt(2) = %v\n", mymath.Sqrt(2))
如何编译程序呢?进入该应用目录,然后执行go build,那么在该目录下面会生成一个mathapp的可执行文件
&&& ./mathapp
输出如下内容
&&& Hello, world.& Sqrt(2) = 1.095
如何安装该应用,进入该目录执行go install,那么在$GOPATH/bin/下增加了一个可执行文件mathapp,这样可以在命令行输入如下命令就可以执行
也是输出如下内容
Hello, world.& Sqrt(2) = 1.095
获取远程包
go语言有一个获取远程包的工具就是go get,目前go get支持多数开源社区(例如:github、googlecode、bitbucket、Launchpad)
go /astaxie/beedb
go get -u 参数可以自动更新包,而且当go get的时候会自动获取该包依赖的其他第三方包
通过这个命令可以获取相应的源码,对应的开源平台采用不同的源码控制工具,例如github采用git、googlecode采用hg,所以要想获取这些源码,必须先安装相应的源码控制工具
通过上面获取的代码在我们本地的源码相应的代码结构如下:
&&&&&&&&& |-astaxie
&&&&&&&&&&&&& |-beedb
&&& |--相应平台
&&&&&&&& |-
&&&&&&&&&&&&&& |--astaxie
&&&&&&&&&&&&&&&&&&& |beedb.a
go get本质上可以理解为首先第一步是通过源码工具clone代码到src下面,然后执行go install
在代码中如何使用远程包,很简单的就是和使用本地包一样,只要在开头import相应的路径就可以
import "/astaxie/beedb"
程序的整体结构
通过上面建立的我本地的mygo的目录结构如下所示
&&& mathapp
&&& 平台名/ 如:darwin_amd64、linux_amd64
&&&&&&&& mymath.a
&&&&&&&& /
&&&&&&&&&&&&& astaxie/
&&&&&&&&&&&&&&&&&& beedb.a
&&& mathapp
&&&&&&&&& main.go
&&&&& mymath/
&&&&&&&&& sqrt.go
&&&&&&&&&& astaxie/
&&&&&&&&&&&&&&& beedb/
&&&&&&&&&&&&&&&&&&& beedb.go
&&&&&&&&&&&&&&&&&&& util.go
从上面的结构我们可以很清晰的看到,bin目录下面存的是编译之后可执行的文件,pkg下面存放的是函数包,src下面保存的是应用源代码。
[1] Windows系统中环境变量的形式为%GOPATH%,本书主要使用Unix形式,Windows用户请自行替换。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Golang- import 导入包的语法
| Go语言中文网 | Golang中文社区 | Golang中国
<meta name="author" content="polaris ">
Golang- import 导入包的语法
Golang- import 导入包的语法
Crazy__Programmer
一 包的导入语法
在写Go代码的时候经常用到import这个命令用来导入包文件,看到的方式参考如下:
&#34;fmt&#34;
然后在代码里面可以通过如下的方式调用
fmt.Println(&#34;hello world&#34;)
上面这个fmt是Go语言的标准库,他其实是去GOROOT下去加载该模块,当然Go的import还支持如下两种方式来加载自己写的模块:
&#34;./model&#34;
//当前文件同一目录的model目录,但是不建议这种方式import
&#34;shorturl/model&#34;
//加载GOPATH/src/shorturl/model模块
上面展示了一些import常用的几种方式,但是还有一些特殊的import,让很多新手很费解,下面是三种导入包的使用方法。
有时候会看到如下的方式导入包
import( . “fmt” )
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println(“hello world”)
可以省略的写成Println(“hello world”)
2. 别名操作
别名操作顾名思义可以把包命名成另一个用起来容易记忆的名字
import( f “fmt” )
别名操作调用包函数时前缀变成了重命名的前缀,即f.Println(“hello world”)
这个操作经常是让很多人费解的一个操作符,请看下面这个import
import ( “database/sql” _ “/ziutek/mymysql/godrv” )
_操作其实只是引入该包。当导入一个包时,它所有的init()函数就会被执行,但有些时候并非真的需要使用这些包,仅仅是希望它的init()函数被执行而已。这个时候就可以使用_操作引用该包了。即使用_操作引用包是无法通过包名来调用包中的导出函数,而是只是为了简单的调用其init函数()。
二 包的导入过程说明
程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。下图详细地解释了整个执行过程:
通过上面的介绍我们了解了import的时候其实是执行了该包里面的init函数,初始化了里面的变量,_操作只是说该包引入了,只初始化里面的init函数和一些变量,不能通过包名来调用其它的函数,这有什么用呢?往往这些init函数里面是注册自己包里面的引擎,让外部可以方便的使用,就很多实现database/sql的引起,在init函数里面都是调用了sql.Register(name
string, driver driver.Driver)注册自己,然后外部就可以使用了。
支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
支持 @ 本站用户;支持表情(输入 : 提示),见
一 包的导入语法
在写Go代码的时候经常用到import这个命令用来导入包文件,看到的方式参考如下:
&#34;fmt&#34;
然后在代码里面可以通过如下的方式调用
fmt.Println(&#34;hello world&#34;)
上面这个fmt是Go语言的标准库,他其实是去GOROOT下去加载该模块,当然Go的import还支持如下两种方式来加载自己写的模块:
&#34;./model&#34;
//当前文件同一目录的model目录,但是不建议这种方式import
&#34;shorturl/model&#34;
//加载GOPATH/src/shorturl/model模块
上面展示了一些import常用的几种方式,但是还有一些特殊的import,让很多新手很费解,下面是三种导入包的使用方法。
有时候会看到如下的方式导入包
import( . “fmt” )
这个点操作的含义就是这个包导入之后在你调用这个包的函数时,你可以省略前缀的包名,也就是前面你调用的fmt.Println(“hello world”)
可以省略的写成Println(“hello world”)
2. 别名操作
别名操作顾名思义可以把包命名成另一个用起来容易记忆的名字
import( f “fmt” )
别名操作调用包函数时前缀变成了重命名的前缀,即f.Println(“hello world”)
这个操作经常是让很多人费解的一个操作符,请看下面这个import
import ( “database/sql” _ “/ziutek/mymysql/godrv” )
_操作其实只是引入该包。当导入一个包时,它所有的init()函数就会被执行,但有些时候并非真的需要使用这些包,仅仅是希望它的init()函数被执行而已。这个时候就可以使用_操作引用该包了。即使用_操作引用包是无法通过包名来调用包中的导出函数,而是只是为了简单的调用其init函数()。
二 包的导入过程说明
程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。下图详细地解释了整个执行过程:
通过上面的介绍我们了解了import的时候其实是执行了该包里面的init函数,初始化了里面的变量,_操作只是说该包引入了,只初始化里面的init函数和一些变量,不能通过包名来调用其它的函数,这有什么用呢?往往这些init函数里面是注册自己包里面的引擎,让外部可以方便的使用,就很多实现database/sql的引起,在init函数里面都是调用了sql.Register(name
string, driver driver.Driver)注册自己,然后外部就可以使用了。
记住登录状态
还不是会员}

我要回帖

更多关于 go语言 github 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信