文档结构  
翻译进度:已翻译     翻译赏金:0 元     ¥ 我要打赏

想学习如何编程吗?我在十多岁的时候开始从图书馆借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为我们调用main(),但我们也调用了一个函数:println(),由fmt包提供。

要使用由导入的包发布的函数,类型或变量,请键入包名称,句点,然后键入函数/类型/变量。

让我们一起来看看:

package main

import (
    "fmt"
    "strings"
)

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

将此文件在你的包文件夹中保存为main.go。

编译和运行Go代码

现在我们可以编译我们的代码。 Go编译器将把我们的代码连同我们使用的库/包,请确保使用的包都是有效的,转换为可执行的二进制。 二进制将自动被放入$ GOPATH / bin,如果你记得,我们添加到了我们的$ PATH,那么我们可以像任何其他程序在命令行上运行它。

第 11 段(可获 1.59 积分)

如果你还没有,在终端中进入到你项目的目录。 然后运行go install。

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

糟糕! 如果您完全遵循了我的说明,您会看到一个编译器错误:

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

Go拒绝编译我们的代码,因为我们多余地包含了strings包。 Go的编译器在某些方面是一个很好的挑剔者。 即使这个错误本身不是一个错误,这是一种误解,将使我们的代码更难以维持长期运行。 编译器会告诉你很多其他错误,你会喜欢阅读它们,并开始看到你自己的编码改进,因为你犯的同样的错误会越来越少。

第 12 段(可获 1.5 积分)

“./main.go:5”表示错误在我们当前目录中的“main.go”的第5行。

让我们从导入块中删除“字符串”。 我们的代码现在应该如下所示:

package main

import (
    "fmt"
)

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

现在我们运行go install不会再有任何错误,然后尝试运行我们的程序:$ go install $ go-gif-generator 这将是一个GIF生成器!

恭喜! 你已经成功地进入了编程世界。 我们在第二部分将开始教你一些有用的东西。

如果它不工作,或者如果您有问题,请在下面留下评论。

准备继续? 继续在第二部分

第 13 段(可获 1.09 积分)

文章评论