每一种编程语言都有自己的语法、结构以及自己的风格,这也是每种语言展现各自魅力及众不同的地方。Go也不例外,它简单而优雅,与此同时使用起来也很有趣。在本文中,我们将讨论以下几点:

  • Go程序结构

  • 如何运行Go程序

  • Go中的注释

  • 分号

  • 代码回顾

Go程序结构

要理解Go程序的结构,首先需要有一个Go程序,让我们重温一下最受欢迎的Hello, World!程序。

package main

import "fmt"

func main() {

fmt.Println("Hello,World!")

}

每个源文件(扩展名为.go的文件)必须有一个包声明。在上面的helloworld.go文件中,第一行声明了包main,其含义是告诉编译器这个源文件将包含go的入口点,是主函数。main包的声明和main函数的组合使其成为独立的、可执行的Go程序。

在我们的代码中,我们将信息写入控制台,这是一个标准输出。为此,要使用import关键字导入fmt包。fmt包是format单词的缩写,它与Go标准库一起提供给开发人员。fmt包提供了许多写入到标准输出的方式(类似fmt.Println的一系列变种)。此外,稍后可以看到导入多个包场景。

如何运行Go程序

我们可以使用go run或go build命令运行任何Go程序。使用这些命令可以指示Go编译器编译和运行Go代码。要运行上面的Hello World程序,可以在程序文件当前目录中使用go run helloworld.go命令。

go run helloworld.go

我们还可以使用go build命令,该命令将生成一个名为helloworld的可执行文件,该文件可以像任何其他exe可执行文件一样执行。命令如下:

go build

如果出于某种原因,我们想要更改可执行文件的名称,那么可以使用go build -o 命令来更改。这将创建一个具有指定的名称的可执行二进制文件。例如:

$ go build -o exe  #being in thehello-world directory

$ ./exe            # running theexecutable

Hello, World!

根据需要,我们可能想要安装应用程序。为此,可以使用go install <package-name> 命令。这将创建一个二进制可执行文件,并将其存储在$GOPATH/bin目录中。因此,确保设置了GOBIN并将其添加到PATH环境变量中。此外,如果设置了PATH环境变量,可以在系统的任何地方运行该二进制文件。如下所示:

go install helloworld

Go中的注释

在合适的位置向代码中添加注释与编写高质量的、可维护的代码同样重要。在Go中,注释不仅仅是在代码中添加内联解释的一种方式,它也是将api文档化的一种方式,我们在讨论函数时将看到这一点。

有两种方法可以在代码中添加注释:行注释或块注释。要添加行注释,只需以//开头,后面跟着注释掉的文本。要添加块注释,我们在/*和*/符号之间换行文本。以下是例子:

// package main defines the entry point

package main

// import the 'fmt' package from standard library

import "fmt"

/*

The main function is the entrypoint in a Go program.

The main function does not havea return type.

Also, it does not accept anyparameters.

*/

func main() {

fmt.Println("Hello,World!")

}

分号

正如在上面的代码中所看到的,我们的代码中没有使用任何分号。那是因为Go会在幕后实现这些。与C语言一样,Go的语法也使用分号来终止语句,但它们不必出现在源代码中。

Go的文档是这样说的:

与C语言一样,Go的正式语法使用分号来终止语句,但与C语言不同的是,这些分号不会出现在源代码中。相反,词法分析程序使用一个简单的规则在扫描时自动插入分号,因此输入文本基本上不需要分号。

大致规则如下:如果换行符之前的最后一个标记是一个标识符(包括int和float64这样的单词),一个基本的文字(如数字或字符串常量),或一个特殊指令(如break/continue/fallthrough/return/++/--)。词法分析程序总是在以上指令后面插入分号。可以总结为:“如果换行符出现在可以结束语句的标记之后,那么插入一个分号”。分号也可以在右大括号前省略,因此诸如break/continue/fallthrough/return/++/--等不需要分号。

要阅读更多关于内部的内容,请继续阅读go官方文档。

代码回顾

正如所述,每个独立应用程序都必须有一个package main的声明,而带有这种声明的.go文件必须有一个main函数。这个main函数是应用程序的入口点,就像在其他编程语言(如C、Java、c#等)中一样。

区别在于,在Java或c#中,main函数可以接受参数,如(string[]args);而在Go中,main函数不接受任何参数,而且main函数不返回任何数据。

注意以下代码是如何导入fmt包的:import “fmt”。此语法仅在导入单个包时有效。如果想导入多个包,那么需要在import()中将包分组。下面是一个例子:

// importing multiple packages in Go

import (

"context"

"database/sql"

"fmt"

"log"

)

注意上面代码中在任何导入包的末尾没有分号,这将由词法分析器来完成。

总结

Go有一个非常简单的程序结构,感觉读起来更像c。遵循相同的模式,将main函数作为应用程序的入口点。Go提供了一种方便的方法来编写简洁的代码,自动且巧妙地在合适位置插入分号。Go提供了不同的注释类型在代码中作描述(与多种主流语言一致),并且能基于注释快速构建文档。

为了更好地理解幕后的技术细节以及如何在Go中编写高质量的代码,强烈建议阅读Go文档中Effective Go页面。

原文作者:Gaurav Gahlot  译者:江玮

原文链接:https://dzone.com/articles/structure-of-a-go-program?fromrel=true

版权声明:本文版权归作者(译者)及公众号所有,欢迎转载,但未经作者(译者)同意必须保留此段声明,且在文章页面明显位置给出,本文链接如有问题,可留言咨询。

Go语言程序结构分析初探的更多相关文章

  1. Android 虚拟机Dalvik、Android各种java包功能、Android相关文件类型、应用程序结构分析、ADB

    Android虚拟机Dalvik Dalvik冲击 随着Google 的AndroidSDK 的发布,关于它的API 以及在移动电话领域所带来的预期影响这些方面的讨论不胜枚举.不过,其中的一个话题在J ...

  2. 第一个C语言程序

    从第一个C语言程序了解C语言 了解关键字 了解函数 注释 C语言的执行流程 标识符 C语言的学习重难点 从第一个C语言程序了解C语言 上图是一个在控制台上显示“Hello, World!”的C语言源代 ...

  3. Linux环境下使用gcc编译,gdb反汇编C语言程序

    使用虚拟机 VMware Workstation 10 Linux环境:Ubuntu 14.04 LTS Server amd64   我把过程截图如下. 首先是hello world程序: 备注: ...

  4. 最短的可通过编译的C语言程序

    要求:写一个最短的,能通过编译的C语言程序,但不要求能正确运行. 一般人首先想到的是除0.即 int main() { /; } 除0会引发SIGFPE信号(浮点异常). 我们也可以删掉return, ...

  5. VisualStudio基本使用(2)-使用VS2013来编译C语言程序

    切换到C语言程序所有目录,执行cl test.c

  6. 03-第一个C语言程序的分析

    本文目录 一.代码分析 二.开发和运行C程序的步骤 三.总结 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语 ...

  7. C语言学习-01第一个C语言程序

    一 C语言的历史 C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供 ...

  8. linux终端下 编译c语言程序

    linux终端下,编译C语言程序步骤为: 采用vi进行源代码编写,编写完成后,:wq存盘退出,如: vi test.c 在命令行下,运行gcc编译程序,生成执行码,如: gcc  -o test te ...

  9. 李洪强漫谈iOS开发[C语言-004]-开发概述程序设计语言程序编译过程

    汇编语言 指令用特定的名字来标记,这就是汇编语言 人比较容易看懂汇编语言 汇编直接和程序一一对应的 有汇编器把程序翻译成机器码 把高级语言编译成计算机识别的语言 程序编译过程 命令行 UNIX 系统中 ...

随机推荐

  1. ABP .NET corej 版本 第一篇

    ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP使用以下技术: 服务器端: l ASP.NET MVC 5.Web API 2.C# 5. ...

  2. AX_Currency

    Currency::curAmount(9.23,"HKD");  Currency::curAmount2CurAmount(9.23,"RMB"," ...

  3. PHP-自定义数组-预定义数组-自定义函数-预定义函数

    (1)自定义数组 —— 项目中的重点 (2)PHP预定义数组 —— 重点&难点 (3)自定义函数 —— 了解 (4)PHP预定义函数 —— 项目中的重点 1.自定义数组 数组:array,一个 ...

  4. Pycharm配置

    平台:win10 x64 Pycharm的下载,安装,破解,编辑字体+配置IDE 详见博客:https://blog.csdn.net/yctjin/article/details/70307933? ...

  5. Hibernate 映射及查询

    实体类和实体之间的关系:一对多,多对多 数据库设计:e_r 一个实体对象就是一个表格,  如果是1对多的关系,将多方的主键拿到1方做外键.  多对多:重新建立一张新的表格,将双方的主键拿到这里做外键 ...

  6. you-get 安装和用法

    以windows为例 安装 从https://github.com/soimort/you-get/releases/latest下载*-full.7z,解压后在cmd中切换至目录下执行you-get ...

  7. 06-jQuery的文档操作

    之前js中咱们学习了js的DOM操作,也就是所谓的增删改查DOM操作.通过js的DOM的操作,大家也能发现,大量的繁琐代码实现我们想要的效果.那么jQuery的文档操作的API提供了便利的方法供我们操 ...

  8. AI for VS ,美团创新之处分析

    微软在2017中发布了VS Tools for AI,旨在提升用户对于深度学习的需求体验.AI组件可以让我们迅速构建和训练深度学习的Project,其功能主要有开发,调试和部署深度学习和人工智能的解决 ...

  9. 文件描述符fd、文件指针fp和vfork()

    1. fd:在形式上是一个非负整数.实际上他是一个索引值.指向kernal为每一个进程所维护的该进程打开文件的记录表. 当程序打开一个文件或者创建一个新文件的时候kernal向进程返回一个文件描述符. ...

  10. ubuntu16.04下idea、webstorm等开发工具不能输入中文问题

    问题: ubuntu16.04下idea.webstorm开发工具不能输入中文,就算切换到中文输入法输入的也是英文字母. 解决方案: 1.vim打开开发工具的启动文件(idea下就是idea.sh) ...