發表文章

目前顯示的是 9月, 2022的文章

怎麼樣做一個可以被Import的Go包

圖片
在這裡我將嘗試怎麼做一個最小的Go,放在github給別人引用 結論&要點 go.mod 中 module 應該為你的github路徑,這樣可以避免引用名稱不同的問題 小版本更新使用 tag 來上傳,破壞性更新再modle 最後方加上/v2, v3等字樣 檔名不要使用main.go 其餘應該都可以 package會是別人取用工具包的名稱 已完成的github包 github.com/limiu82214/GoHellowWorldForImport 過程 初始化 go mod init GoHellowWorldForImport 並上傳至github 寫main.go,並在另一個地方使用 go get ... 看到錯誤訊息 import "github.com/limiu82214/GoHellowWorldForImport" is a program, not an importable package (compile) ,因此猜測不能用main.go 更名為 GoHellowWorldForImport 在試一次 (包含package與函式) 由於快取的關係,新增tag代表新的版本號並上傳再試一次 拿到錯誤訊息,推測module名必須是 github.com/limiu82214/GoHellowWorldForImport 以符合import格式 go : github.com/limiu82214/GoHellowWorldForImport @v0 . 0.2 : parsing go. mod : module declares its path as : GoHellowWorldForImport but was required as : github.com/limiu82215/GoHellowWorldForImport" 測試成功,更改參數並記錄要點

FangChannel的GoLang學習筆記

圖片
繼[[深入淺出 Gp - O'REILLY]]之後依照 FangChannelGolang學習記 來復習 ,會再次記錄我認為需要記下的地方。 ![[Pasted image 20220904185635.png]] Q:為什麼 import要使用 "gonote/note" 而不是 "note" 才能使用到note.go的內容? A:因為go.mod裡面寫著 moudle gonote 意思是這整個模組是gonote Go大項目標準架構 api: API相關 assets: 圖片等資源 build: 建置好的文件 cmd: 子項目 configs: 配置文件 pkg: 存放編譯過的套件程式碼 慣例 // 單行註釋 -> 一般用來描述函數的目的與結構 一般多行註釋也建議使用 // ... // 用 [...] 自動讓GO判斷陣列長度 var a = [...] int { 1 , 2 , 3 , } range // 簡易歷遍陣列的方式 for index, value := range a { } // 若是不想要其中一個值可以用_代替 for _, value := range a { } 切片 // 切片是對陣列的引用,所以會改變陣列的值 arr := [ 5 ] int { 1 , 2 , 3 , 4 , 5 } // 這是一個[1,2,3,4,5]的陣列 x := arr[ 1 : 4 ] // 這是一個[2,3,4]的切片(Slices) (引用自arr) x[ 0 ] = 0 // 改片切片第0個值 fmt.Println( "arr=" , arr) // arr= [1 0 3 4 5] fmt.Println( "x=" , x) // arr= [0 3 4] // PS 切片也可以引用自切片,但最終都會指向原始的陣列 // PS 切片不引用的話,初值是nil fmt.Printf( "len(x)=%v" , len (x)) // 3 fmt.Printf( "cap(x)=%v\...

深入淺出 Gp - O'REILLY 心得

圖片
繼Introducing Go - O'REILLY之後的第二本Go的學習書藉,會再次記錄我認為需要記下的地方。 Package package main :特殊的套件,使用這個套件的目地通常代表程式碼需要被直接執行。 import "reflect" -> 其中有TypeOf可以用。 指令 gofmt file :gofmt可以自動排版Golang的程式碼。 go build :編譯成執行檔 go run :編譯加執行 go fmt :格式化程式碼成為Go標準格式 go version :顯示Go版本 規則 大寫起頭=> public 小寫起頭=> private 習慣 三段落的程式排列方式 (像Python) 套件子句 任何 import 陳述句 主要的程式碼 自訂套件註解必須是以Package開頭 自訂套件函式的註解必須以函數名開頭 套件名稱應該都是小寫,理想上只有一個單字組成 變數名稱小寫駝峰 定義型別的方法時接收器參數通常以型別的第一個小寫英文字來命名 ex: func (m MyType) sayHi() {...} 因為型別是MyType所以參數是m 在為type struct設計getter與setter的時候有個命名慣例,假如參數是year,那寫入值會是SetYear,讀取值會是Year (省略Get) 用法 型態轉換 float64(var) => 把變數轉成float64這個型態 套件 log 日誌 log.Fatal(...) => 在console報錯並印出... strconv 轉換字串類型 strings 字串處理 os 讀寫系統資料 file , err := os. Open ( "filePath" ) //讀文件 scanner := bufio.NewScanner( file ) // 建立Buff暫存 for scanner.Scan() { // 讀一行 ... } err = file . Close () // 關閉檔案釋放資源 nte/http response, err := http. Get ( "url" ) // Get請求, response是含有Body結構,表示內容 ...