本文是「vangoleo的Go语言学习笔记」系列文章之一。

官网: http://www.vangoleo.com/go/go-hello-world/

在上一篇文章你好,Go语言中,我们对Go语言的历史和特点有了认识。接下来,我们就正式进入Go的学习了。

按照大部分编程语言的惯例,我们以经典的“Hello World”开始Go语言的学习之旅。

经典的“Hello World”案例来自于1978年出版的C语言圣经。很巧合的是该书的作者Brian W. Kernighan也是《Go语言圣经》一书的作者。

本教程中,我会使用最方便的方式Golang Playground来体验Go语言。在浏览器中打开https://play.golang.org,在页面直接编写Go代码,并运行。使用Golang Playground无需安装Go,无需配置Golang的开发环境(比如环境变量),无需安装文本编辑器或IDE。

大部分的Hello World教程都会从如何安装Go,配置环境变量等开始。但是Go语言的安装和开发环境配置其实是一个比较复杂的话题。我希望在大家刚接触Go语言时,能对go语言有一个快速,直观的认识。而不要陷入如何配置Go的开发环境。配置Go的开发环境涉及到Go语言的另外两个概念:GOPATH和Go module。而这又会牵扯到Go语言混乱、悠久的依赖管理发展史。后续会有专门的章节来进行介绍。

使用Go Playground

第一步:打开https://play.golang.org,在编辑框中输入Hello World程序:

package main

import "fmt"

func main() {
fmt.Println("Hello world")
}

如下图所示:



第二步:点击“Run”按钮,可以看到程序的输出结果“Hello,world”。

恭喜你,已经编写了第一个Go程序,并正确地输出了结果。

Go语言特性

虽然Hello World程序很简单,但是依然包含了Go语言的一些核心概念。接下来,我们就一行一行地解读Hello World程序。

第一行package main

程序的第一行声明了名为main的package。Go语言的代码是通过package来组织的,package的概念和其他语言里的package,module概念类似,是一个逻辑的,包含了相同功能代码的集合。一个package会包含一个或多个.go源代码文件。每一个源文件都是以package开头。比如我们的例子里是package main。这行声明语句表示该文件是属于哪一个package。

需要注意,package main是一个比较特殊的package。main package是Go程序的入口。准确说,Go程序的入口是名为main的package中的main方法(即例子中的main方法)。

第二行: import

package声明语句后紧跟着是import语句。import语句会引入其他package到当前文件中,这样就可以在当前文件使用其他package中的变量,常量,类型,方法等。Go的import和Java的import,C++的include类似。

Go标准库已经提供了100多个package,fmt这个package包含接受输入,格式化输出的各种函数。Println是其中的一个常用函数,可以格式化地输出一段文本。

第三行: func main

第三行声明了一个函数,函数名为main。在Go语言中使用func关键字来声明一个函数。格式为:

func 函数名(参数名1 参数类型1, 参数名2 参数类型2, ... ) 返回类型1, 返回类型2, ...

比如下面的方法:

func sayHello(name string, age int) string

声明了一个sayHello方法。接收两个参数:string类型的name和int类型的age。并返回一个string类型的值。

前面也提到了,在main这个package里,main函数也是一个特殊的函数,这是整个程序的入口(其实C系语言差不多都是这样)。

第四行: fmt.Println

第四行是程序真正执行的逻辑,会输出“Hello world”。fmt是通过import引入的包,是go标准库提供的包。Println是fmt包中定义的一个方法,作用是将文本输出到标准输出。

Go语言特点

通过Hello world,我们可以发现Go语言的一些特点:

  • 语句的结尾不需要分号。这和C系语言,Java等语言不同。
  • Go语言不需要显示声明方法或变量的作用范围。即不用显式声明public或private。其实Go语言是通过变量或方法名的首字母是大写还是小写来确定作用范围的。大写字母开头的为public,小写字母开头的为private。

还有一些Go的特点,由于Hello world程序比较简单,没有体现出来。这里也顺带说一下:

  • Go语言声明变量和方法参数时,名字在前,类型在后。比如var name string。这和C系语言,Java语言都不同。
  • Go语言在代码格式上采取了很强硬的态度。go提供的gofmt工具会将你的代码格式化为标准格式(这个格式化工具没有任何可以调整代码格式的参数,Go语言就是这么任性),规定一种标准的代码格式可以规避掉无尽的无意义的圣战(撕逼)(也导致了Go语言的TIOBE排名较低,因为缺少撕逼的话题)。Go的这种哲学可以保证当一个大团队一起开发和维护一个项目时,团队间的协作更加地标准,高效。

本文由 www.vangoleo.com 发布

Go语言入门:Hello world的更多相关文章

  1. 踢爆IT劣书出版黑幕——由清华大学出版社之《C语言入门很简单》想到的(1)

    1.前言与作者 首先声明,我是由于非常偶然的机会获得<C语言入门很简单>这本书的,绝对不是买的.买这种书实在丢不起那人. 去年这书刚出版时,在CU论坛举行试读推广,我当时随口说了几句(没说 ...

  2. 我为什么反对推荐新人编程C/C++语言入门?

    虽然我接触编程以及计算机时间比较早,但是正式打算转入程序员这个行当差不多是大学第四年的事情 从03年接触计算机,07年开始接触计算机编程, 期间接触过的技术包括 缓冲区溢出(看高手写的shellcod ...

  3. 《C语言入门1.2.3—一个老鸟的C语言学习心得》—清华大学出版社炮制的又一本劣书及伪书

    <C语言入门1.2.3—一个老鸟的C语言学习心得>—清华大学出版社炮制的又一本劣书及伪书 [薛非评] 区区15页,有80多个错误. 最严重的有: 通篇完全是C++代码,根本不是C语言代码. ...

  4. c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码初级:C语言入门必备(以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言的数 ...

  5. 【转】c语言入门教程 / c语言入门经典书籍

    用C语言开始编写代码 初级:C语言入门必备 (以下两本书任选一本即可) C语言是作为从事实际编程工作的程序员的一种工具而出现的,本阶段的学习最主要的目的就是尽快掌握如何用c语言编写程序的技能.对c语言 ...

  6. Swift语言入门之旅

    Swift语言入门之旅  学习一门新的计算机语言,传统来说都是从编写一个在屏幕上打印"Hello world"的程序開始的.那在 Swift,我们使用一句话来实现它: printl ...

  7. 《Ruby语言入门教程v1.0》学习笔记-01

    <Ruby语言入门教程v1.0> 编著:张开川 邮箱:kaichuan_zhang@126.com 想要学习ruby是因为公司的自动化测试使用到了ruby语言,但是公司关于ruby只给了一 ...

  8. 【南阳OJ分类之语言入门】80题题目+AC代码汇总

    小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...

  9. C语言入门(21)——使用DBG对C语言进行调试

    C语言入门(21)--使用DBG对C语言进行调试 程序中除了一目了然的Bug之外都需要一定的调试手段来分析到底错在哪.到目前为止我们的调试手段只有一种:根据程序执行时的出错现象假设错误原因,然后在代码 ...

  10. C语言入门(7)——自定义函数

    C源程序是由函数组成的.虽然在C语言入门系列前面几篇的程序中大都只有一个主函数main(),但实用程序往往由多个函数组成.函数是C源程序的基本模块,通过对函数模块的调用实现特定的功能.C语言中的函数相 ...

随机推荐

  1. CNN之yolo目标检测算法笔记

    本文并不是详细介绍yolo工作原理以及改进发展的文章,只用做作者本人回想与提纲. 1.yolo是什么 输入一张图片,输出图片中检测到的目标和位置(目标的边框) yolo名字含义:you only lo ...

  2. Java中的static(1)【持续更新】——关于Eclipse的No enclosing instance of type ... 错误的理解和改正

    No enclosing instance of type SomeClass is accessible. Must qualify the allocation with an enclosing ...

  3. 确认自己所用的python版本

    总结: 目前有两个版本的python处于活跃状态:python2,python3 有多种流行的python运行环境:cpython(应用最广泛的python解释器,如无对解释器有要求,一般用这个,默认 ...

  4. 5G 时代,云计算迎来新风口

    云计算是对传统IT模式从底层硬件到业务模式的颠覆,传统IT市场具备万亿级市场空间,目前云计算收入占IT支出占比尚小,渗透率较低,未来空间较大. 短期受到宏观经济等因素影响,云巨头资本开支增速有所波动, ...

  5. LitePal的修改和删除操作

    转载出处:http://blog.csdn.net/guolin_blog/article/details/40083685 传统的修改和删除数据方式   上篇文章中我们已经得知,SQLiteData ...

  6. ASP.NET Web API 2系列(三):查看WebAPI接口的详细说明及测试接口

    引言 前边两篇博客介绍了Web API的基本框架以及路由配置,这篇博客主要解决在前后端分离项目中,为前端人员提供详细接口说明的问题,主要是通过修改WebApi HelpPage相关代码和添加WebAp ...

  7. php企业微信获取员工userid以及打卡信息

    企业微信可以通过部门列表获取部门下的员工信息,从而获取到员工的userid //首先获取需要的access_token $access_token = json_decode($this->ge ...

  8. Java11月9日的动手动脑

    Java动手动脑 请自行编写代码测试以下特性(动手动脑): 在子类中,若要调用父类中被覆盖的方法,可以使用super关键字. 程序源代码: package yanzhengjicheng; class ...

  9. 货物运输 51Nod - 1671

    公元2222年,l国发生了一场战争. 小Y负责领导工人运输物资. 其中有m种物资的运输方案,每种运输方案形如li,ri.表示存在一种货物从li运到ri. 这里有n个城市,第i个城市与第i+1个城市相连 ...

  10. Linux 命令之 chmod

    命令格式 chmod有以下三种格式 chmod [-cfvR] MODE[,MODE]... FILE... chmod [-cfvR] OCTAL-MODE FILE... chmod [-cfvR ...