iT邦幫忙

2022 iThome 鐵人賽

DAY 4
0
DevOps

Golang X DevOps系列 第 4

Day04 - 譜出屬於你自己的module

  • 分享至 

  • xImage
  •  

Modules

  • 接下來嘗試撰寫一個 module
  • 先創建一個資料夾 並在裡面進行go mod init 的動作
mkdir modules_example/greeting
cd greeting
go mod init modules_example/greeting
  • 接著創一個.go檔 把下列這串code貼到你的檔案中
package greetings //宣告一個名為greeting的package

import "fmt" //把fmnt包進來

// 一個回傳型態是 string ,傳入參數名稱是 name 型態是 string 的函數
func Greet(name string) string {
	//下面這一行 會輸入你的字串並輸出
	message := fmt.Sprintf("Hi, %v. Welcome!", name)
	return message
}

  • 不免俗地還是要介紹一下程式架構
    • 在第一行中你宣告了一個名叫greeting package 然後接下來我們要去編寫這個 package

    • 要引入fmt的原因是因為Sprintf屬於fmt這個 package

    • 在下面第六行 function call 的地方 你宣告了一個名為 Greet 的函數

      • 傳入參數 : 名稱是 name 型態是 string
      • 回傳型態 : 字串 string
    • 在第八行中我們使用了:=這個運算元 在 Go 中:= 是來做為初始化和宣告變數的運算元(賦值時仍然用等號)

    • 可能看到這裡你還有些小疑惑 下面一段會在講解一些更詳細的東西

關於變數型態和Exported Name的那件事

變數型態

  • 在 Go 中宣告變數時 會以右邊變數來做為該變數的型態
    • ex: 如果右邊是string 那該變數型態就是string
    • 又因為 GO 是靜態類別的語言 而且為強型別語言 所以在宣告完之後 不能對他的參數類型做變動(所有型別都會在編譯時定義 runtime 時不能做改動)
    • 假如你想要用一個已存在的變數去存回傳值 而且有多個回傳值時 你應該使用:=
//當需要用到已存在的值去接受多個回傳值
response, k := 3 , 4
response, l := 1 , 2
//就算response在第一次已被使用 在第二行我們依然可以使用:=來覆蓋掉以前的值


//賦予不同型別的錯誤
message := fmt.Sprintf("Hi, %v. Welcome!", name)
message = 3 //型別會出錯 因為剛剛已經把他變成字串型別了

Exported Name

  • 換成另一個講法就是 java 的 public 跟 private 概念
  • 我們剛剛在上面的 function 名稱是用大寫開頭
  • 而在 GO 中 以大寫開頭的變數 函數或 const......代表著可以在其他不在同一個 package 底下的檔案裡被使用
  • 在下面範例中 Pi 作為 math 這個 package 的 Exported 變數 代表著我可以透過使用math.Pi來引入他 假如我今天把它變成小寫的 pi 他就不會有用
  • 任何不是以大寫開頭的 都不是 exported 會產生unexported的錯誤
  • ex
package main

import (
	"fmt"
	"math"
)

func main() {
	fmt.Println(math.Pi) //改成小寫會會出unexported
}

https://ithelp.ithome.com.tw/upload/images/20220913/20151327Ir9W3c0fAz.png

接下來嘗試在主函式呼叫自己的函式吧


上一篇
Day03 - 了解你的第一個 GO 程式
下一篇
Day05 - 有Module自遠方來 Import乎
系列文
Golang X DevOps30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言