小菜鸡学程序!用 Golang 来跟世界说 Hello 吧!

这系列文章会用 Golang 来做说明,希望可以用比较简单、直白的方式来说明一些程序的概念,让没有基础的人也可以从头学起,如果有什麽错误的地方,希望各位大神帮忙纠正了!


在这边我们就不说明要怎麽安装 Golang 到你的电脑,因为不同作业系统的步骤也不太一样,有很多其他文章可以参考,还没安装过的人就当作是回家作业啦,参考其他大神们的文章自己摸索看看罗!

你可以在你的终端机下这个指令,看看跑出来的结果是什麽,就知道你有没有把 Golang 安装好罗!

 $ go version

这行指令会显示你所安装的 Golang 的版本,其中会有 Golang 版本号 ( go1.13.5 )、电脑所使用的作业系统 ( darwin )、以及处理器指令集 ( amd64 )。如果用这行指令却有出现错误,那多半是没有安装好或是设定环境变数有问题哦,例如出现了 $ bash: go: command not found 之类的就是不对哦!

正确安装好的话应该会出现像下面这样子的结果:

 $ go version
 go version go1.13.5 darwin/amd64

大家在接触到程序语言的时候,是不是很常听到 Hello World! 这个词呢?

当我们学习一个新的语言的时候,第一个程序就很适合写「Hello World!」,这个程序没有什麽复杂的功能,只是让程序印出一行文字而已,但它不仅可以让我们检测看看是不是真的安装好了、设定也都没问题了,也能知道这门语言要如何显示文字、也就是如何显示你程序执行的结果,最重要的还能知道要如何执行这个语言所写出来的程序码。

接下来我们就来看 Golang 的 Hello World! 的范例吧!

我们开一个档案,档案名称为 main.go,内容如下:


package main

import "fmt"

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

以上的程序码,我们可以分为几个部分来理解:

  1. package main
    现在我们只是写一个 Hello World! 的单一个档案,但大家应该可以想像,当今天我们是要完成一整个专案的话,整个程序的功能通常可以分为几个不同的部分,我们就可以把一群属於同部分功能的档案设定一样的 package 名字,然後在需要使用到该部分的功能时,去呼叫该 package 中提供的功能。
    如果用其他东西来比喻的话,假设我们的专案是一个厨房,厨房会需要可以接受点餐、可以处理食材、要烹饪食物、要清洁等等功能,那我们就可以将程序码按照功能来分类,负责点餐的程序码就分配到package 点餐,处理食材的程序码就分配到package 处理食材,以此类推,整个专案的架构可能就像这样:

    厨房专案
    | - main.go  (厨房的入口)
    | - order/    (负责接受点餐)
      | - order.go
    | - process/   (负责处理食材)
      | - vegetable.go (处理蔬菜食材)
      | - meat.go    (处理肉类食材)
    | - cook/    (负责烹调)
      | - boil.go (水煮)
      | - fry.go  (炸)
    | - clean/  (负责清洁)
      | - floor.go   (清洁地板) 
      | - machine.go  (清洁烤箱等等机器)
      | - dish.go    (清理食物器皿)

    就我自己的习惯,会把专案需要的功能分门别类到不同的资料夹,并且再依据功能的细项分出不同档案,以上我会把他们分成 main、order、process、cook、clean 这几个 package。

    你有注意到吗,package 名称可以不用跟档案名字一样,另外 package 的名字也不一定要跟资料夹的名字一样喔!

  2. import "fmt"
    在很多程序语言里面,有一些语言本身有提供的功能可以去使用,我们可以称这些本身有提供的功能为标准函式库 ( Standard Library ),这里我们所用到的 fmt 也是标准函式库里的一员哦!
    -> Golang 标准函式库

    标准函式库是什麽呢,我们想成是它提供了很多工具,也根据功能为他们分门别类了,比如我们这边使用到的fmt就是一个用来为输入/输出 ( I/O ) 设定格式的 package,像是你想要一行一行的印出文字,或是你想要从输入读取固定格式的字串的这些功能,它都可以帮你达成。

    例如:有一个档案里面的内容是很多行固定的格式
       格式是:学生名字 - 数学成绩 - 国文成绩
       那麽就很适合用 fmt 里面提供的功能来读取档案内容

    除了标准函式库之外,有很多大神们也都开发很多功能并且开源给大家使用,这些工具我们都可以在程序里面使用哦!

    当我们想要使用标准函式库或是其他人提供的功能时,只要在程序里写好要从哪里取得这些工具,就可以使用了,这个import "xxx"就是这个用途,後面接的就是这个工具放在哪里,因为标准函式库是这个语言本身就有提供的,所以就直接写出这个 package 的名字即可。

    import "fmt"    // 标准函式库
    

    但如果像是其他大神们放在 Github 上供大家使用的,就要写出它的路径,这个路径会是该 package 在你的 $GOPATH/pkg/mod 资料夹里的路径,$GOPATH/pkg/mod 这是使用 Go Modules 这种管理套件的工具,将所需要的套件从网路上下载下来之後,套件在你本地端的路径,使用 Github 上的开源专案的写法如下:

    import "github.com/joho/godotenv"    // Github 上的开源专案
    
  3. func main() {}
    这就是整个 main.go 程序码里面的进入点了,这是在宣告有一个型别是func 的东西,它的名字是 main,左右大括号里就是这个函式 (func) 会执行的程序码了。

    在这里我们要印出一行文字,所以在前面 import 的部分把能供这个功能的工具 fmt 给放进来,让我们能使用 fmt 提供的 Println 功能,而 Println Print line 顾名思义就是可以让你印出一行文字,所以我们写 fmt.Println("Hello World !") 就可以印出这行文字罗!


最後的最後,我们要怎麽执行这份档案呢?

只要使用go run的指令,就会去执行後面所给的程序码档案,所以我们要执行main.go这个档案,就像这样下指令:

 $ go run main.go

你就可以看到终端机上显示你传进fmt.Println()中的字串罗,以这份范例程序而言,也就是印出Hello World !

来看图!!的确是印了Hello World !之後有换行哦!!


希望大家都能试着把 Golang 环境架好,然後用 fmt 提供的函式来印印看文字!
有任何问题或指正都欢迎留言给我,谢谢各位!


<<:  Computer Typing

>>:  实战练习 - 使用 RxJS 实作 Flux Pattern

Linux哲学思想

总结: 一切都是文件 在Linux里所有元素的操作(包括硬件)都是以文件表示. 统一的操作介面让程序...

[DAY 16]用bot打出色色柴犬counter牌

最近很夯的色色柴犬大家应该有听过吧 没错就是这一系列牌组 然後某一天晚上不知道我发什麽神经突然有个念...

浏览器物件模型 BOM

音乐请下BOOM BOOM POW BOM 系虾米? Browser Object Model 的缩...

Day21【Dev】物件类型:mutable 与 Immutable

mutable 与 Immutable 比较 Immutable object 不可变物件 物件被创...

[13th][Day14] docker port

dockerfile 中的每一个步骤都会 commit 一次,docker history 可以看 ...