iT邦幫忙

0

小菜雞學程式!用 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 提供的函式來印印看文字!
有任何問題或指正都歡迎留言給我,謝謝各位!


尚未有邦友留言

立即登入留言