[奔跑的 Go] 教程二、编写简单的 Go 程序

Golang

go 程序是一段简单的 UTF-8 编码的以 .go 结尾的文件。

什么是 Go 程序?

go 程序是一段简单的 UTF-8 编码的以 .go 结尾的文件。因此你可以编辑 Go 程序使用简单的文本编辑器比如 notepadsublime text 还有 IDEs 像 VSCode 或 WebStorm。你也可以使用命令行编辑器像 vim 或者 nano 等等。

如果你正在使用 VSCode,请安装 vscode-go 扩展。这会帮助你更好地写代码并且格式化和调试代码更容易。

Go 程序结构

每个 Go 程序都必须存在与一个包中。 一个 可独立执行的 Go 程序必须包含一个 main 函数,而且必须存在于 main 包中。 main 函数是程序执行的入口函数。

执行 go build 命令或者 go run 命令,都可以创建一个可独立执行的 Go 程序。

package main

import "fmt"

func main() {
    fmt.Println("Hello World!")
}

在上面的代码中,我们创建了 main 包,以及程序执行的入口函数 main 函数。从 Go 标准库( Go 安装时自带的 )中引入了 fmt 包。使用 import 关键字来引入包。

在这里引入 fmt 包,是为了标准化输出信息。这个包提供了很多函数,以支持不同形式的标准化输出。上面例子中使用的 Printf 函数,可以标准化输出( 或在终端打印)它接收到的所有参数。

运行 Go 程序

要想运行 Go 程序 (这里以你已经在系统中安装了 Go 为前提),你需要指导  Go 编译器 去编译并运行指定路径的程序。如果我们把前面的代码放在 hello.go 文件中,然后在这个文件所在的文件夹中执行

$ go run hello.go

就会看到如下输出:

Hello World!

如果你想同时运行多个 Go 文件,你可以通过命令模板的形式,或者在一行命令中指定所有要执行的文件。

$ go run dir/*.go
$ go run dir/**/*.go
$ go run file-a.go file-b.go file-c.go

使用 build 命令创建二进制文件。

$ go build hello.go

通过上面的命令,可以在当前文件夹中,创建二进制可执行文件 hello,之后可以在终端 / 命令行执行这个这个文件。

$ ./hello

使用下面的命令,可以将二进制文件部署到 bin 目录。

$ go install hello.go

这样,就会在当前 Go 工作区的 bin 目录下生成名为 hello 的二进制文件。由于 bin 目录是在 PATH 中,所以之后就可以全局执行这个二进制文件。

$ hello
Hello World!

注释

Go 的注释规则跟 JavaScriptc++ 一样。单行注释用 //comment,多行注释用 /*comment*/

// 单行注释
// 有一条单行注释

/*
    这里是多行注释。
    GoLang 棒极了。
    爱我别走,GoLang 棒极了。
*/

分号

你可能已经发现了,到目前为止,我们还没有用过分号,这个在 c, c++JavaScript 中非常常用的符号。

C 一样,Go 的语法也是用分号来标记一个语句的结局,但与 C 不同的是,分号不需要写在源码里。因为 Go 的 Lexer 程序会在扫描程序的时候,根据一定的规则自动插入分号。

插入分号的规则是,如果换行符之前的最后一个标记是标识符( 包括像 *int**float64* ),普通的字符像 数字字符串,或者下面标记中的任意一个

break continue fallthrough return ++ -- ) }

Lexer 就会在标记后面插入分号。一句话总结, “如果换行符在可能结束语句的标记之后,则插入分号”.

所以,Go 是不需要写分号的。如果你不小心写了分号,VSCode 插件也会在保存时把分号去掉。你也可以使用 [**gofmt**](https://golang.org/cmd/gofmt/) 命令来格式化代码。唯一需要用到分号的地方就是 switch 语句和 for 循环。因为必须用分号来明确指出在哪里结束语句。

理论上,你可以随意使用分号,但只是不符合 Go 的代码规范。比如,像下面这样的代码,程序也能正常执行。

package main

import("fmt"; "math";);

func main() {
    fmt.Println(math.Sqrt(16));
};

但是我还是推荐像下面这样,按照 Go 的代码规范来写

package main

import(
    "fmt"                           // ;
    "math"                          // ;
)                                   // ;

func main() {
    fmt.Println(math.Sqrt(16))      // ;
}                                   // ;

最佳实践

Go 是一门非常注重简洁和系统性的语言。所以你的代码必须遵守社区准则和 Go 的规则。 gofmt 是一个可以自动格式化代码的工具,可以帮助你书写更加规范的 Go 代码。

高效的 Go

参考 Effective Go 文档,有助于更好地理解这些标准做法。 https://golang.org/doc/effective_go.html

Go 乐园

Go 团队创建了一个 在线 IDE, 用来运行简单的 Go 程序。功能类似于 JSFiddleCodePen,但是它仅用于 Go 语言。我建议大家视情况使用这个 IDE。根据我个人的经验,在测试并发相关的程序时,我本地运行的结果与在这个 IDE 上运行的结果完全不同,因为它的服务器太强大了。但是对于其他的简单程序,用就对了。


Practice makes perfect.

原文地址:https://medium.com/rungo/how-to-write-a-...

译文地址:https://learnku.com/golang/t/27552

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

短小精湛的 Golang 入门教程,是 The Little Go Book 的中文翻译
Github 上《The Way to Go》中文译本的镜像,优化了排版
@无闻 出品的一套面向新手级别学习者 Go 语言的视频教程
一步步带你进入 Go Web 编程的世界,让我们开始探索吧!
号称宇宙最快的 Iris Web 框架的中文文档翻译
Gin 是一个用 Go 语言编写的 WEB 框架,本文档为其中文版本
GORM 是优秀的 Golang ORM 类库,本文档是其官方文档的中文翻译,每年更新