本文是「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. 阿里云服务器CentOS6.9安装SVN

    1.安装SVN yum -y install subversion 出现Complete表明安装成功 2.创建SVN仓库目录 mkdir -p /data/svn/repositories/yyksv ...

  2. Flask基础(01)-->Flask框架介绍

    什么是Flask? 说白了,Flask就是一种web框架 在python中常用的框架有 flask django tornado 什么又是web框架呢?  为什么要使用web框架呢? 增强扩展性和稳定 ...

  3. 深入Dapper.NET源码 (文长)

    目录 前言.目录.安装环境 Dynamic Query 原理 Part1 Dynamic Query 原理 Part2 Strongly Typed Mapping 原理 Part1 : ADO.NE ...

  4. 让视频丝滑流畅——N/A通用补帧傻瓜解决方案

    补帧就是字面意思,把24帧的视频通过算法即时补偿到更高的帧数,获得更优秀的观感体验 索尼大法brivia电视的中高端产品线中的motionflow技术,都可以实现硬件补帧,只需要把动态打开,相应的画面 ...

  5. display:none和visibility:hidden的区别?

    css控制元素不可见的方法 { display: none; /* 不占据空间,无法点击 */ } /************************************************* ...

  6. HTML5存储--离线存储

    离线存储技术 HTML5提出了两大离线存储技术:localstorage与Application Cache,两者各有应用场景:传统还有离线存储技术为Cookie. 经过实践我们认为localstor ...

  7. Java的IO操作之关闭流

    我们知道,当结束对一个流的操作时,需要调用流的close()方法对其进行释放,这将释放掉与这个流有关的所有资源,包括文件句柄.端口等.如果不关闭流,垃圾回收机制将无法识别你是否已使用完这个文件,读取的 ...

  8. SystemVerilog Assertion 设计、调试、测试总结(2)

    上一篇博客主要写了SVA的基本语法(详细),这一篇主要写SVA语法总结,以及如何查看SVA波形等. 断言assertion被放在verilog设计中,方便在仿真时查看异常情况.当异常出现时,断言会报警 ...

  9. 网关服务自定义路由规则(springcloud+nacos)

    1. 场景描述 需要给各个网关服务类提供自定义配置路由规则,实时生效,不用重启网关(重启风险大),目前已实现,动态加载自定义路由文件,动态加载路由文件中的路由规则,只需在规则文件中配置下规则就可以了 ...

  10. Windows 批处理入门

    Windows 批处理入门   目录 本教程概述 用到的工具 标签 简介 1.命令简介 2.符号简介 3.语句结构 4.实例讲解 本教程概述 本课我们学习windows批处理 用到的工具 cmd.ex ...