-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46654
- shell命令
-
- 文章:(42)篇
- 阅读:154551
- Git教程
-
- 文章:(36)篇
- 阅读:235267
- leetCode刷题
-
- 文章:(76)篇
- 阅读:132502
-
go语言编程入门教程(二)2017-12-28 23:40 阅读(4829) 评论(0)
距离上次一看go语言,“Go语言编程入门教程”,已经是一年之久了,再次捡起来,发现之前看的都忘了,只好重新来了。
一、入门的hello world
将下面代码保存到test.go文件里
package main //定义当前包名 import "fmt" //引入fmt包 func main() { //main函数为程序的入口,等c或C++类似 fmt.Printf("hello, world\n") //调用fmt包中函数,输入hello world }
运行上面程序的命令如下:
go run test.go
对于go命令还不了解的,可以查看“Go语言编程入门教程”。最后执行效果如下:
在做项目而定时候,我们的程序往往不仅仅一个文件,在php中,我们可以使用include、require等方式来引进其他文件。go里面当然也会涉及到引用其他文件,只是go不这么玩而已,go可以通过package将文件封装成一个包,包名为该文件的目录名称,目录和包是一一对应的,只是限制了作为包的目录名中不能包含特殊字符,然后在需要使用的地方,通过import引入包就可以。比如上面的hello world程序,引入了fmt包。
同时,也说明了一些道理:
1、同一个目录下,所有文件的包名是一样一样的,不同的目录下,包名是不一样的;
2、go是通过包名映射为目录名来查找需要引入的文件;
3、每个 Go 文件都属于且仅属于一个包;
4、一个包可以由多个以 .go 为扩展名的源文件组成。
二、go代码如何组织
go命令工具限制了我们必须按照指定的方式来组织代码。下面是go必须拥有的目录结构:
src 包含Go的源文件,它们被组织成包(每个目录都对应一个包)
pkg 包含包对象
bin 包含可执行命令
go命令工具为什么要这么限制呢?
这样的限制,是便于go能够非常方便地导入引用的包。比如下面代码:
package main import ( "fmt" "stringutil" ) func main() { fmt.Printf(stringutil.Reverse1("!oG ,olleH")) stringutil.Dqtrace() }
引入了包名fmt和stringutil,go是如何查找这些包呢?
首先,在go安装目录下的src目录中查找,如下:
找到了fmt包,但是并没有stringutil包
接着在GOPATH目录下的src目录中查找,如下
于是找到了stringutil包
go在找到这些包后如何处理呢?
go每找到一个包,就会对包里面的包级常量和变量进行初始化,接着执行init函数。当然每个包可能包含多个文件。如下:
go会按照文件的顺序,依次对每个文件里面的包级常量和变量进行初始化、执行init函数等。
三、GOPATH 环境变量设置
在上面,我们讨论了设置gopath的意义,下面来说说如何设置gopath的变量,跟设置其他环境变量一样一样的。查看当前使用的shell类型,若为bash,需打开.bashrc,我当前使用的是zsh,于是打开.zshrc,添加如下代码:
export GOPATH="/home/dequan/project/go"
后面跟着的是,让go在哪目录下的src目录查找要导入的包。