QQ怎么激活腾讯王卡激活

Go入门:怎样编写Go代码 - 博客频道 - CSDN.NET
MoaKap的专栏
我思,故我在!
Go入门:怎样编写Go代码
本文将描述如何开发一个简单的go包,并简单介绍,以及获取、生成、安装go包和命令的标准方法。
将所有Go代码放在一个工作空间(workspace)下。
一个工作空间包含多个代码仓库。
每个仓库有一个或多个包(packages)。
每个包又包含一个或多个Go代码源文件。
包的路径在import中体现。
工作空间(workspace)
每个工作空间根目录下包括:
- src Go源代码
- src文件夹下放置多个版本控制的仓库(项目)。
- pkg 包对象
- bin 生成的可执行文件
go命令编译源文件,并生产对应的结果文件到pkg和bin目录。
一个典型的go工作空间是这样子的:
上边的例子包括两个仓库、项目(example和image)。其中项目example包括两个命令(hello和outyet)和一个二进制库(stringutil);项目image包含bmp包和。
一个典型的go工作空间包括多个代码库(由包和命令组成)。大多数程序员会把所有源代码和依赖放到一个工作空间。
各种不同的代码包编译生成命令和类库。这个我们以后单独讨论。
GOPATH环境变量
GOPATH环境变量又来标明你的工作空间的位置。大多数情况下也是开发Go代码唯一要设置的一个环境变量。
开始所有工作之前,你需要创建一个总的目录来当做工作空间,并且设置GOPATH变量指向这个目录。工作空间可以在任何目录下,在接下来的文档中我们使用home目录下的work目录HOME/work来做例子。(一般也会直接把个人home目录HOME设为工作空间)
注意:工作目录不能跟Go的安装目录一样。
$ mkdir $HOME/work
$ export GOPATH=$HOME/work
方便起见,也会直接把工作空间下的bin目录添加到PATH路径(这样就可以在任意目录下直接执行生成的Go命令)。
$ export PATH=$PATH:$GOPATH/bin
点击获取更多关于GOPAT环境变量的设置帮助。
包路径用来唯一标记一个包,包路径反映了包在本地工作空间或远程代码库(接下来会详细说明)中的位置。
标准库中的包直接使用短包路径,比如“fmp”或“net/http”。但是对于自己编写的包,基础路径的名字不能与标准库和其它一些外部库冲突。
如果你的代码直接保存在一些版本控制的代码库里,应该直接使用代码库的根目录作为基本路径。比如,如果你的代码都存放在github的user用户下(/user),那/user就应该是基本路径。
即使你现在还没有打算把代码发布带远程代码仓库,最好还是按照以后准备提交代码仓库的方式组织代码结构。实际中可以使用任何组合来标记路径名称,只要对应的路径名称不与基本库冲突。
我们接下来将使用/user作为基本路径。在工作空间下创建对应的目录来保存代码:
$ mkdir -p $GOPATH//user
第一个Go程序
为了编译和运行一个简单的Go程序,需要在工作空间下创建包路径(我们接下来将使用/user/hello)和对应的包目录。
$ mkdir $GOPATH//user/hello
接下来,在目录下新建一个hello.go文件,包含以下内容:
package main
import "fmt"
func main() {
fmt.Printf("Hello, world.\n")
现在可以使用下边的go工具生成和安装这个程序:
$ go /user/hello
你可以在任何目录下执行上边的命令。go工具会根据GOPATH在对应工作空间下查找/user/hello包。
你也可以忽略包路径而直接在对应代码包文件夹下执行go install命令:
$ cd $GOPATH//user/hello
$ go install
以上命令会生成hello命令,同时产生可执行二进制文件。然后将对应的二进制命令安装到工作空间的bin目录下。在我们的这个例子中,会直接安装到GOPATH/bin/hello,也就是HOME/work/bin/hello。
go命令执行成功时不会有任何输出,只有发生错误的时候才会打印对应的错误信息。
现在你可以在命令行中使用完整路径来执行这个程序:
$ $GOPATH/bin/hello
Hello, world.
或者,如果已经添加$GOPATH/bin到PATH,可以直接输入二进制名称来执行程序:
Hello, world.
如果你正要使用版本控制系统,现在可以初始化代码仓库、添加文件,做第一次提交。再次强调,使用版本控制系统不是必须的。
$ cd $GOPATH//user/hello
$ git init
Initialized empty Git repository in /home/user/work//user/hello/.git/
$ git add hello.go
$ git commit -m "initial commit"
[master (root-commit) 0b4507d] initial commit
1 file changed, 1 insertion(+)
create mode 100644 hello.go
接下来我们来写一个库给hello程序使用。
跟可执行程序一样,第一步还是创建包路径和对应的包文件夹。
$ mkdir $GOPATH//user/stringutil
然后在包文件夹下新建reverse.go文件,内容如下:
// Package stringutil contains utility functions for working with strings.
package stringutil
// Reverse returns its argument string reversed rune-wise left to right.
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i & len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
return string(r)
使用go build编译整个包:
$ go /user/stringutil
或者在包目录下直接执行go build:
$ go build
到这里还不会产生任何文件。你必须执行go insall命令生成输出库文件。
确认库文件已经产生后,就可以在之前的hello.go中使用这个库了:
package main
"/user/stringutil"
func main() {
fmt.Printf(stringutil.Reverse("!oG ,olleH"))
无论使用go安装包还是二进制文件,所有相关的依赖都会自动安装。所以当你安装hello程序时:
$ go /user/hello
对应的stringutil包也会自动被安装。
执行新的hello程序,你可以看到一个新的、已经被反转的消息:
Hello, Go!
所有这些以后,你的工作空间应该是这样的:
# command executable
linux_amd64/
# this will reflect your OS and architecture
stringutil.a
# package object
# command source
stringutil/
reverse.go
# package source
注意:go install会把库文件stringutil.a放到pkg/linux_amd64下边(目录结构跟源代码结构一样)。这样可以go命令可以直接找到对应的包对象,避免不必要的重复编译。linux_amd64是为了根据操作系统和你的系统架构交叉编译。
所有Go可执行程序都通过静态方式链接在一起,所以在运行时是不需要相关的包对象(库)。
所有Go源代码都以下边的语句开始:
package name
其中name就是包引用是默认的名称。一个包中的所有文件必须使用同一个包名。
可执行命令的包名必须是main。
一个二进制文件下所有的包名不需要唯一,但是引用路径必须唯一。
了解更多关于Go的命名规范,可以参考。
Go自带了一个轻量级的测试框架,由go test命令和testing包组成。
你可以通过新建xx_test.go写一个测试,其中包含若干个TestXXX函数。测试框架会自动执行这些函数;如果函数中包含tError或t.Fail, 对应的测试会被判为失败。
添加一个针对stringutil的测试文件$GOPATH//user/stringutil/reverse_test.go,包含以下内容:
package stringutil
import "testing"
func TestReverse(t *testing.T) {
cases := []struct {
in, want string
{"Hello, world", "dlrow ,olleH"},
{"Hello, 世界", "界世 ,olleH"},
for _, c := range cases {
got := Reverse(c.in)
if got != c.want {
t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)
然后通过go test执行测试:
$ go /user/stringutil
/user/stringutil 0.165s
同样,在包文件夹下可以忽略包路径而直接执行go test命令:
/user/stringutil 0.165s
包的引用路径用来描述如何通过版本控制系统获取包的源代码。go工具通过引用路径自动从远程代码仓库获取包文件。比如本文中用的例子也对应的保存在/golang/example下。go可以通过包的代码仓库的url直接获取、生成、安装对应的包。
$ go /golang/example/hello
$ $GOPATH/bin/hello
Hello, Go examples!
如果工作空间中不存在对应的包,go会将对应的包放到GOPATH环境变量指明的工作空间下。(如果包已经存在,go跳过代码拉去而直接执行go install)。
执行上边的go get命令后,工作空间文件夹下是这样的结果:
# command executable
linux_amd64/
/golang/example/
stringutil.a
# package object
stringutil.a
# package object
/golang/example/
# Git repository metadata
# command source
stringutil/
reverse.go
# package source
reverse_test.go
# test source
# command source
stringutil/
reverse.go
# package source
reverse_test.go
# test source
github上的hello命令依赖于同个仓库下的stringutil库。hello.go使用同样的路径进行导入,所以go get命令能够直接找到并安装对应的依赖包。
import "/golang/example/stringutil"
这也是你共享Go包的最好方式。
关于go工具远程包的更多信息,可以参考。
接下来的事情
你可以订阅收取Go新版本的发布信息通知。
阅读来学习如何编写清晰、优雅的Go代码。
到学习Go编程语言。
访问深入了解Go以及基本库和工具。
到这里就结束了,参考原文.
排名:第10438名
(21)(1)(1)(2)(5)(6)(2)(1)(1)(1)go语言检测文件是否存在的方法
作者:work24
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了go语言检测文件是否存在的方法,实例分析了Go语言文件操作的相关技巧,需要的朋友可以参考下
本文实例讲述了go语言检测文件是否存在的方法。分享给大家供大家参考。具体分析如下:
go语言检测文件是否存在,首先创建一个FileInfo,如果不报错,再通过 IsDir()检查是否是目录
代码如下:finfo, err := os.Stat("filename.txt")
if err != nil {
&&& // no such file or dir
&&& return
if finfo.IsDir() {
&&& // it's a file
&&& // it's a directory
希望本文所述对大家的Go语言程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具你们有我惨????
来看下GO的封号(不知道有没有半封一说)
ingress 上海绿军 Siconfic 人在杭州出差(坐标PO 戛纳国际) 在办公楼里定位直接飘到上海金桥那边
但是打开ingress一切正常
有时候飘回来
来回几次 在杭州脚底下工PO戛纳国际
还hack了几次
现在抓任何pokemon都是100%逃跑成功 hack 任何pokestop都是不出东西 卧槽 怪我咯??[s:ac:喷][s:ac:喷][s:ac:喷][s:ac:喷][s:ac:喷][s:ac:喷][s:ac:喷][s:ac:喷][s:ac:喷][s:ac:喷][s:ac:喷]之前ingress的lv7的时候也曾经被频繁半封过一阵子,每次持续七天整,封了两个月,后来就好了。 我真是日了猩猩了[s:ac:怒][s:ac:怒][s:ac:怒][s:ac:怒][s:ac:怒][s:ac:怒]警告! 在定位漂移严重的时候不要频繁打开游戏!!!!不要做任何操作!!!!警告! 在定位漂移严重的时候不要频繁打开游戏!!!!不要做任何操作!!!!警告! 在定位漂移严重的时候不要频繁打开游戏!!!!不要做任何操作!!!!
ingress 并没有受到影响
要重新去注册一个googleplay账号玩pokemongo了
重新注册了一个google账号 用来玩这个
ingress玩了一个月愣是没玩懂……
国内为了所谓的“保密”对GPS数据进行了随机漂移 。。。太蛋疼了
我今天为了帮同学看下一个破解定位包好不好用也被封号了,我想请教下这个会解封吗?
喷了,服务器问题意淫自己被封号
[b]Reply to [pid=48369,1]Reply[/pid] Post by [uid=3639816]antiwzy[/uid] ( 18:16)[/b]真的吗('???)?,我抓了20次精灵全都失败了
[b]Reply to [pid=48369,1]Reply[/pid] Post by [uid=3639816]antiwzy[/uid] ( 18:16)[/b]那确实是临时封禁,目前观察飞机封禁时间大概在2-3内,过了这个时间爱你再在上一次模拟的位置上就可以正常游戏了。另外我是安卓xpose有google地图纠偏插件 ,我记得ios越狱也是有的
不过不知道是不是跟安卓一样
[b]Reply to [pid=48369,1]Reply[/pid] Post by [uid=2101299]狩v夜[/uid] ( 19:34)[/b]是的,我继续用模拟定位包上线,一点问题都没了。然而手贱换了原版包立马又被封了[什么鬼?(????)??????]
期待后续发展~话说lz你被封了大概几个小时?
楼主解封了吗 还是放弃游戏了[s:ac:花痴]
我昨天晚上开始这样的。然后今天版本更新完就好了。
[b]Reply to [pid=48369,1]Reply[/pid] Post by [uid=]MADAO_Mu[/uid] ( 20:48)[/b]那估计是soft ban 游戏bug太多 估计没空开始永封
服务器卡而已。。
[b]Reply to [pid=48369,1]Reply[/pid] Post by [uid=]lifangzheng12[/uid] ( 14:39)[/b]被封了一到两个小时 后来好了 再后来就GPS锁了
[b]Reply to [pid=48369,1]Reply[/pid] Post by [uid=363308]myth007[/uid] ( 21:06)[/b]并不是=。=
你不知道ingress有半封一说么。。估计pokemon也是这样
飘一两个楼,一两条街没事的,飘了7,8个街区好几公里了,那就会被标记疑似飞机,然后就ban了
漂移封号大概是3消失的时间,就是让你补给站拿不到任何东西,然后抓精灵的时候百分百逃跑。。。。
[img]./mon_/-7_af50b.png[/img]应该是半封了go是不是必须规定同一目录下只能有一个package
现在我在Test目录下 写Test1.go 和Test2.go 发现不能导入
如果一个目录只能有一个package的话 感觉很麻烦啊
如果每新建一个包 得去新建一个目录 - Golang中国
13:42 发布 3570 次点击
go是不是必须规定同一目录下只能有一个package
现在我在Test目录下 写Test1.go 和Test2.go 发现不能导入
如果一个目录只能有一个package的话 感觉很麻烦啊
如果每新建一个包 得去新建一个目录
是的,一般很少一个 package 里只有一个文件,一个 package 是类似功能的集合,为了更好的区分代码,会把不同的代码放到不同的文件里面,这样放在一个目录里面就方面管理。
不过看你的情况似乎是 main 包,是写些练习代码用的,直接用 go run Test1.go 好了。正式项目中我们都会建个目录的,很少同时写多个 main 包。
两go文件的包名都叫成test就好了。go里面,包名一般就是文件夹所在的目录名,除了main包。
同一个目录下所有go文件,和把这些go文件内容全复制粘贴到一个go文件里的效果是一样的
后方可回复, 如果你还没有账号你可以
一个帐号。

我要回帖

更多关于 腾讯王卡怎么激活 的文章

 

随机推荐