本文是「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. VR中的Redirection

    在虚拟现实(Virtual Reality,VR)中,很重要的一点就是用户的在虚拟环境中的漫游(navigation).除了固定视点的VR电影,一般的VR应用,特别是游戏或者其他交互式的应用,都会依赖 ...

  2. Kotlin编译时注解,简单实现ButterKnife

    ButterKnife在之前的Android开发中还是比较热门的工具,帮助Android开发者减少代码编写,而且看起来更加的舒适,于是简单实现一下ButterKnife,相信把下面的代码都搞懂,看Bu ...

  3. Python 爬虫(四):Selenium 框架

    Selenium 是一个用于测试 Web 应用程序的框架,该框架测试直接在浏览器中运行,就像真实用户操作一样.它支持多种平台:Windows.Linux.Mac,支持多种语言:Python.Perl. ...

  4. Linux配置python

    文章出处  https://www.cnblogs.com/yhongji/p/9383857.html 我这里使用的时centos7-mini,centos系统本身默认安装有python2.x,版本 ...

  5. C语言函数名以及取地址的区别和联系

    有时看到如下的代码: /*****************************/ #include <stdio.h> #include <string.h> #inclu ...

  6. 致所有.Net者和有梦想的朋友们 - 共勉

    这篇文章很早就想写的了,主要是人到了一定的年纪,就想唠叨一些看法,认不认可不重要,重要的是生活给予你的酸甜苦辣,你都想一吐为快. 这里主要基于多年来自己的一个行业感受和以及生活感想,唠叨一下工作以及生 ...

  7. Flutter 的setState与FutureBuilder及EasyRefresh示例

    用setState改变状态 class CpwsList extends StatefulWidget { _CpwsListState createState() => _CpwsListSt ...

  8. hihoCode 1075 : 开锁魔法III

    时间限制:6000ms 单点时限:1000ms 内存限制:256MB 描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅 ...

  9. 【POJ2001】Shortest Prefixes

    Shortest Prefixes Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 18724   Accepted: 810 ...

  10. .netCore+Vue 搭建的简捷开发框架 (5)

    文章目录:.netCore+Vue 搭建的简捷开发框架--目录 上两节的内容介绍了一些关于.netCore 相关的一些基础知识.介绍这些的目的,最主要的还是为了我们的架构搭建服务. 上一节中,我们介绍 ...