【背景】
折腾:
期间,下载和安装go,运行了hello world后,就是去参考官网:
去学习,如何写go代码了。
【折腾过程】
1.go语言中,用来获取,编译,安装go语言包的标准工具,是:go命令
2.关于go命令,去看看go help的输出:
D:\tmp\tmp_dev_root\go\helloworld>go help
Go is a tool for managing Go source code.
Usage:
go command [arguments]
The commands are:
build compile packages and dependencies
clean remove object files
doc run godoc on package sources
env print Go environment information
fix run go tool fix on packages
fmt run gofmt on package sources
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet run go tool vet on packages
Use "go help [command]" for more information about a command.
Additional help topics:
gopath GOPATH environment variable
packages description of package lists
remote remote import path syntax
testflag description of testing flags
testfunc description of testing functions
Use "go help [topic]" for more information about that topic.
D:\tmp\tmp_dev_root\go\helloworld>3.用go命令的话,需要你按照特定的方式去安排组织你的代码。
4.感兴趣的,可以看官网录制的视频教程:
[Video] Writing, building, installing, and testing Go code
5.go代码必须是在一个workspace内。
workspace是一个文件夹(目录),其包含三个子文件夹:
- src:包含go的源码
- pkg:包含package的目标文件
- bin:包含可执行的命令
go命令,就是去编译(src内的)源码包,并且安装生成二进制到pkg和bin中。
一个典型目录结果是这样的:
bin/
streak # command executable
todo # command executable
pkg/
linux_amd64/
code.google.com/p/goauth2/
oauth.a # package object
github.com/nf/todo/
task.a # package object
src/
code.google.com/p/goauth2/
.hg/ # mercurial repository metadata
oauth/
oauth.go # package source
oauth_test.go # test source
github.com/nf/
streak/
.git/ # git repository metadata
oauth.go # command source
streak.go # command source
todo/
.git/ # git repository metadata
task/
task.go # package source
todo.go # command source6.开发go的话,需要设置,唯一一个环境变量:GOPATH
去把此处我的go的目录:
D:\tmp\tmp_dev_root\go
如图:
设置到此变量中:
GOPATH = D:\tmp\tmp_dev_root\go
如图:
再把
D:\tmp\tmp_dev_root\go\bin
也加到PATH中去。
7.开发自己的go语言的模块的话,要尽量避免名字和go语言系统内置的模块名所冲突。
8.安装提示,去建立好了文件夹和文件:
D:\tmp\tmp_dev_root\go\src\github.com\user\hello\hello.go
然后去:
go install github.com/user/hello
如图:
执行了,但是没有任何输出。
9.果然,安装了后,任何地方,都可以调用我的hello了:
D:\tmp\tmp_dev_root\go\src>go install github.com/user/hello
D:\tmp\tmp_dev_root\go\src>hello
hello, world
D:\tmp\tmp_dev_root\go\src>dir
Volume in drive D has no label.
Volume Serial Number is CECE-859F
Directory of D:\tmp\tmp_dev_root\go\src
09/18/2013 10:34 AM <DIR> .
09/18/2013 10:34 AM <DIR> ..
09/18/2013 10:34 AM <DIR> github.com
0 File(s) 0 bytes
3 Dir(s) 139,561,541,632 bytes free
D:\tmp\tmp_dev_root\go\src>10.然后,可以看到,bin下面有hello.exe:
D:\tmp\tmp_dev_root\go\src>dir
Volume in drive D has no label.
Volume Serial Number is CECE-859F
Directory of D:\tmp\tmp_dev_root\go\src
09/18/2013 10:34 AM <DIR> .
09/18/2013 10:34 AM <DIR> ..
09/18/2013 10:34 AM <DIR> github.com
0 File(s) 0 bytes
3 Dir(s) 139,561,541,632 bytes free
D:\tmp\tmp_dev_root\go\src>cd github.com
D:\tmp\tmp_dev_root\go\src\github.com>cd user
D:\tmp\tmp_dev_root\go\src\github.com\user>cd hello
D:\tmp\tmp_dev_root\go\src\github.com\user\hello>dir
Volume in drive D has no label.
Volume Serial Number is CECE-859F
Directory of D:\tmp\tmp_dev_root\go\src\github.com\user\hello
09/18/2013 10:34 AM <DIR> .
09/18/2013 10:34 AM <DIR> ..
09/18/2013 10:11 AM 82 hello.go
1 File(s) 82 bytes
2 Dir(s) 139,561,541,632 bytes free
D:\tmp\tmp_dev_root\go\src\github.com\user\hello>cd ../../../
D:\tmp\tmp_dev_root\go\src>dir
Volume in drive D has no label.
Volume Serial Number is CECE-859F
Directory of D:\tmp\tmp_dev_root\go\src
09/18/2013 10:34 AM <DIR> .
09/18/2013 10:34 AM <DIR> ..
09/18/2013 10:34 AM <DIR> github.com
0 File(s) 0 bytes
3 Dir(s) 139,561,541,632 bytes free
D:\tmp\tmp_dev_root\go\src>cd ../bin
D:\tmp\tmp_dev_root\go\bin>dir
Volume in drive D has no label.
Volume Serial Number is CECE-859F
Directory of D:\tmp\tmp_dev_root\go\bin
09/18/2013 10:36 AM <DIR> .
09/18/2013 10:36 AM <DIR> ..
09/18/2013 10:36 AM 1,558,016 hello.exe
1 File(s) 1,558,016 bytes
2 Dir(s) 139,561,541,632 bytes free
D:\tmp\tmp_dev_root\go\bin>cd ..
D:\tmp\tmp_dev_root\go>dir
Volume in drive D has no label.
Volume Serial Number is CECE-859F
Directory of D:\tmp\tmp_dev_root\go
09/18/2013 10:29 AM <DIR> .
09/18/2013 10:29 AM <DIR> ..
09/18/2013 10:36 AM <DIR> bin
09/18/2013 10:29 AM <DIR> pkg
09/18/2013 10:34 AM <DIR> src
0 File(s) 0 bytes
5 Dir(s) 139,561,541,632 bytes free
D:\tmp\tmp_dev_root\go>cd pkg
D:\tmp\tmp_dev_root\go\pkg>dir
Volume in drive D has no label.
Volume Serial Number is CECE-859F
Directory of D:\tmp\tmp_dev_root\go\pkg
09/18/2013 10:29 AM <DIR> .
09/18/2013 10:29 AM <DIR> ..
0 File(s) 0 bytes
2 Dir(s) 139,561,541,632 bytes free
D:\tmp\tmp_dev_root\go\pkg>11.此处暂且不用git或svn去管理代码了。
所以,暂且不去理会那些提交代码的事情了。
12.不过,倒是可以继续参考教程,去建立我自己的crifanLib.go的库的:
D:\tmp\tmp_dev_root\go\pkg>pwd
/cygdrive/d/tmp/tmp_dev_root/go/pkg
D:\tmp\tmp_dev_root\go\pkg>cd ../src/
D:\tmp\tmp_dev_root\go\src>cd github.com
D:\tmp\tmp_dev_root\go\src\github.com>cd user
D:\tmp\tmp_dev_root\go\src\github.com\user>mkdir crifanLib
D:\tmp\tmp_dev_root\go\src\github.com\user>cd crifanLib
D:\tmp\tmp_dev_root\go\src\github.com\user\crifanLib>ls
D:\tmp\tmp_dev_root\go\src\github.com\user\crifanLib>dir
Volume in drive D has no label.
Volume Serial Number is CECE-859F
Directory of D:\tmp\tmp_dev_root\go\src\github.com\user\crifanLib
09/18/2013 10:42 AM <DIR> .
09/18/2013 10:42 AM <DIR> ..
0 File(s) 0 bytes
2 Dir(s) 139,561,541,632 bytes free
D:\tmp\tmp_dev_root\go\src\github.com\user\crifanLib>再去建立文件:
D:\tmp\tmp_dev_root\go\src\github.com\user\crifanLib>ls crifanLib.go D:\tmp\tmp_dev_root\go\src\github.com\user\crifanLib>ls -lha ls: invalid option -- h Try `ls --help' for more information. D:\tmp\tmp_dev_root\go\src\github.com\user\crifanLib>ls -la total 1 drwxr-xr-x 2 CLi Administ 0 Sep 18 10:43 . drwxr-xr-x 4 CLi Administ 0 Sep 18 10:42 .. -rw-r--r-- 1 CLi Administ 82 Sep 18 10:11 crifanLib.go D:\tmp\tmp_dev_root\go\src\github.com\user\crifanLib>
13.然后,就是继续去编写库函数了。尤其是网络相关的。
但是算了,还是先从最基本的,把所有代码都放在单个文件:EmulateLoginBaidu.go中吧:
D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu\EmulateLoginBaidu.go
然后,就是去编译确定是可以工作的:
D:\tmp\tmp_dev_root\go\src\github.com\user>cd EmulateLoginBaidu D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>ls EmulateLoginBaidu.go EmulateLoginBaidu.go.bak D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>go install EmulateLoginBaidu.go go install: no install location for directory D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu outside GOPATH D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>cd ../../../ D:\tmp\tmp_dev_root\go\src>go install github.com/user/EmulateLoginBaidu D:\tmp\tmp_dev_root\go\src>EmulateLoginBaidu this is EmulateLoginBaidu.go D:\tmp\tmp_dev_root\go\src>
不去编译,直接运行,也是可以的:
D:\tmp\tmp_dev_root\go\src>cd github.com/user/EmulateLoginBaidu D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>go run EmulateLoginBaidu.go this is EmulateLoginBaidu.go D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>
如图:
【总结】
好了,基本的go的目录结构搞好了,余下的,就是去一点点学习对应的模块,去写代码了。
转载请注明:在路上 » 【记录】学习如何写go语言代码