文档结构  
可译网翻译有奖活动正在进行中,查看详情 现在前往 注册?
原作者:Joshua Chamberlain    来源:zephyri.co [英文]
CY2    计算机    2016-10-27    0评/3678阅
翻译进度:77%   参与翻译: 厄洛斯 (10)

想学习如何编程吗?我在十多岁的时候开始从图书馆借Java书籍来看,我还发现一本书里面提到的巨大优势:网上学习。也就是说,我从来没有系统的学过Java基础,当时的我厌烦了在终端打印结果,并且往后翻100页左右也没有看到用其他方式打印结果的知识。所以我最后选择了JavaScript和PHP,这样我就可以边学习理论知识边开始做一些有趣的事情了。

我想帮助你避免我所遇到的这种情况,给你自己选择的权利,而不是先教你所有编程的理论,让你等待一两个月再来做事情。快让我们来建立一个GIF动画生成器吧!

第 1 段(可获 1.68 积分)
  • 在第一部分,你将会学习到Go语言中最基本的语法和结构,并创建一个最简单的命令行程序。
  • 在第二部分,你将会了解Go语言的变量和类型系统,并修改你的程序,用来接收用户输入的内容。
  • 在第三部分,你将用户输入的一个文件夹里面的图片变成一个GIF动画,后面会一直围绕着这个来学习Go语言的基本类型和其他的方法。

在开始编程之前,我假设你知道如何使用你的电脑,包括使用terminal终端。如果你有一些不明白的问题,可以在下面的评论区留言。

 

 

第 2 段(可获 1.35 积分)

通过学习这个让自己有能上天的动力,然后读一两本进阶的书籍。学习理论知识并应用,不要忘了编程是一件有趣的事情!

安装Go

第一步是安装Go。你会得到一个命令行工具,可以让你运行像go install来编译你的代码,以及使用内置的标准库。

先从http://golang.org/dl 下载相应的安装包。如果你的Mac已经安装了Homebrew,你可以运行brew install go安装它。按照提示,完成以后打开命令行,运行go version来确认是否正确安装。你应该看到类似这样的东西:

第 3 段(可获 1.51 积分)
$ go version
go version go1.7 darwin/amd64

接下来你需要设置一个 "工作区"  -- 一个用来保存你写的代码和下载的代码的文件夹,并且编译的二进制文件也会保存在这个文件夹中。

Mac 工作区

在你的HOME目录下创建一个文件夹,这里我称它为"go",但是你也可以使用任何你喜欢的名字。

$ mkdir ~/go

在你的HOME目录里打开(如果存在这个文件)或创建 “.bash_profile” 文件,并添加以下的二行内容(把“go”改为你之前使用的名字):

export GOPATH=~/go
export PATH=$GOPATH/bin:$PATH

第一行输出一个环境变量告诉Go去使用这个文件夹作为你的工作区,第二行更新了你的 $PATH 环境变量,所以你的shell知道去工作区寻找需要运行的文件,让你更方便地运行你要编译的代码。

第 4 段(可获 1.48 积分)

Windows (10) 工作区

在Windows系统中你需要做的事情和在Mac上相同,只是方法不同。在你的用户目录下创建一个文件夹,这里我称它为“go”,但是你可以使用任何你喜欢的名字。

C:\Users\IEUser> mkdir go

 

下一步打开你的控制面板,然后点击“系统和安全”,最后点击“系统”。在左面的菜单中,你应该能看到一个“高级系统设置”的链接,点击它。

在下一个窗体的底部,你将会看到一个“环境变量”的按钮,点击它,然后你就能看到一个变量列表。添加一个新的系统变量叫GOPATH,并把它的值设置为%USERPROFILE%\go(或者是你使用的工作区)。将%USERPROFILE%\go\bin;加入到PATH系统变量中,并保存。

第 5 段(可获 1.48 积分)

注意:不要使用记事本进行编程。

它不明白其他操作系统的行末尾结束符,一般会很难用。你可以使用像Notepad++或者Atom之类的编辑器来进行编程。

因为我自己使用的是Mac,下面的所举的例子也是在Mac上进行操作的。但是无论如何,你也应该能很轻松的在Windows上操作。Go语言自带的工具在任何操作系统上操作是相同的。

输出测试

你所添加的环境变量将适用于以后打开的shell,但是并不会影响当前打开的shell。所以请关闭当前shell并重新打开。

第 6 段(可获 1.29 积分)

在你的terminal终端里,运行 go env。在输出中,你就能看到一个“GOPATH”变量指向你所创建的目录:

...
GOOS="darwin"
GOPATH="/Users/joshuachamberlain/go"
GORACE=""
...

如果你没有看到这个输出,请再次用上面的步骤检查。如果你一直都看不到上面的输出,请在下面的评论区留言。

GO语言程序的结构

现在你已经准备好开始编程了吧!(嗯,差不多)

Packages(包)

让我们来谈谈包以及它们是如何储存的。GO在“包”中组织代码。你所创建的一个包,成千上万的人都可以在线使用。

第 7 段(可获 1.11 积分)

包储存在你的工作区下的目录,也就是$GOPATH/src/,并把每个包所在的文件夹命名为下载该包的网站地址。例如,如果https://github.com/jchamberlain/my-cool-thing这个网址的包是可用的,那么你本地下载之后就会存储在$GOPATH/src/github.com/jchamberlain/my-cool-thing/里面,包里面可以包含子包,所以你可能会有my-cool-thing/thing1/这样的文件夹。

你不必要在线使用你的代码,你可以命名你想使用的任何文件夹,只要它在`$GOPATH/src/`里面,最后一个文件夹默认是你写的程序的名称。

第 8 段(可获 1.01 积分)

因为你要创建一个属于你自己的包,所以你要为你的项目创建一个新的文件夹。在这个教程中,我所使用的文件夹是$GOPATH/src/github.com/jchamberlain/go-gif-generator/,最后写的这个程序叫做go-gif-generator

包的导入和main函数

现在我们打开一个文本编辑器。在代码的顶部,写上下面的代码,告诉Go我这是项目使用的子包:

package main

这个main包在任何项目中使用都会让Go生成一个可执行的程序。

注意,语句结尾没有分号。除非多行语句写在一行,必须使用分号分隔。在Go语言中,一行语句是不需要分号的。

第 9 段(可获 1.18 积分)

下一步,我们隔一行再导入一个名为“fmt”的标准库来帮助我们打印文本:

import "fmt"

import语句也可以写成导入组的形式,同时导入多个包:

import (
    "fmt"
    "strings"
)

但是程序的入口点是从main函数开始的。一个main包必须要有一个main函数让Go程序调用。隔一行,添加下面的代码:

func main() {
    fmt.Println("This will be a GIF generator!")
}

正如你看到的那样,在Go语言中,定义函数使用func关键字,后面紧跟着一对括号。函数的函数体是一个Go语言代码块,被包含在花括号之内。代码块在函数被“调用”的时候运行。通过func doSomething() {}定义一个函数,通过doSomething()来调用定义的函数。

第 10 段(可获 1.7 积分)

Go is calling main() for us, but we’re also calling a function ourselves: Println() as provided by the fmt package.

To use a function, type, or variable published by an imported package, type the package name, a period, and then the function/type/variable.

Let’s look at it all together:

package main

import (
    "fmt"
    "strings"
)

func main() {
    fmt.Println("This will be a GIF generator!")
}

Save this file as main.go in your package’s folder.

Compiling and running Go code

Now at last we can compile our code. The Go compiler will take our code along with whatever libraries/packages we’re using, make sure it’s valid, and convert it into an executable binary. The binary will automatically be put into $GOPATH/bin which, if you recall, we added to our $PATH so we could run it just like any other program on the command line.

第 11 段(可获 1.59 积分)

If you’re not there already, go to your project’s directory in a terminal. Then rungo install.

$ cd $GOPATH/src/github.com/jchamberlain/go-gif-generator/;
$ go install;

Oops! If you’ve followed my instructions exactly, you’ll be seeing a compiler error:

# github.com/jchamberlain/go-gif-generator
./main.go:5: imported and not used: "strings"

Go has refused to compile our code because we included the strings package unnecessarily. Go’s compiler is picky in a really good way. Even though this error isn’t a bug per se, it is the kind of mistake that will make our code harder to maintain in the long run. There are lots of other errors the compiler will tell you about, and you’ll come to enjoy reading them and begin to see your own coding improve as you make the same mistakes less and less.

第 12 段(可获 1.5 积分)

The "./main.go:5" means the error is on line 5 of "main.go" in our current directory.

Let’s remove “strings” from the import block. Our code should now look like this:

package main

import (
    "fmt"
)

func main() {
    fmt.Println("This will be a GIF generator!")
}

Now we can run go install without any errors, and try running our program:  $ go install $ go-gif-generator This will be a GIF generator!

Congratulations! You’ve successfully entered the world of programming. We’ll start putting meat on these bones in Part II.

If it didn’t work, or if you have questions, leave a comment below.

Ready to keep going? Continue at Part II.

第 13 段(可获 1.09 积分)

文章评论