这系列文章会用 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 mainimport "fmt"func main() { fmt.Println("Hello World !")}
以上的程式码,我们可以分为几个部分来理解:
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 的名字也不一定要跟资料夹的名字一样喔!
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 上的开源专案
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
提供的函式来印印看文字!
有任何问题或指正都欢迎留言给我,谢谢各位!