Alan's BLOG
  • archives
  • posts
  • tags
  • about
  • quote
  • search
Home » Tags

go

如何用 Go 實作一個簡單的 PTT 爬蟲

👨‍💻 簡介 最近想要透過小實作來撰寫筆記,達到做中學的效果,因此就來實作個小爬蟲順便結合前面學到的package做一個小複習。 建立HTTP Client Go的net/http package 提供了一個HTTP Client,用來發送各種HTTP請求。 http.Get:發送GET請求。 http.Post:發送POST請求。 http.NewRequest:建立一個新的HTTP請求。 語法如下: // 發送GET請求 func http.Get(url string) (resp *http.Response, err error) // 發送POST請求 func http.Post(url, contentType string, body io.Reader) (resp *http.Response, err error) // 建立一個新的HTTP請求 func http.NewRequest(method, url string, body io.Reader) (*http.Request, error) 常見的Response可以使用以下欄位 type Response struct { Status string // e.g. "200 OK" StatusCode int // e.g. 200 Proto string // e.g. "HTTP/1.0" Header Header Body io.ReadCloser ... } 接著看一下io....

2023-10-04 · 2 min · 351 words · Alan

Promptui教學:快速建立 Go 語言的交互式介面

👨‍💻簡介 今天來介紹一個自己開發後端蠻常用的一個 package,promptui,拿來做menu真的很方便,promptui有兩個主要的輸入模式: Prompt:跳出單行使用者輸入。 Select:提供一個選項列表供使用者選擇。 Prompt prompt是一個struct,當執行Run時會返回輸入的結果 type Prompt struct { // Label is the value displayed on the command line prompt. // // The value for Label can be a simple string or a struct that will need to be accessed by dot notation // inside the templates. For example, `{{ .Name }}` will display the name property of a struct. Label interface{} // Default is the initial value for the prompt....

2023-09-27 · 6 min · 1169 words · Alan

如何在Go中使用正則表達式

👨‍💻 簡介 在處理string時,正則表達式是一個非常有用的工具。Go語言的regexp package 可以使用正則表達式,用來執行如檢查string是否匹配某個模式、提取匹配的subString等操作。 匹配功能 regexp.MatchString:檢查一個string是否匹配某個模式。 regexp.Compile:編譯一個正則表達式。 語法如下: // 檢查一個string是否匹配某個模式。 func regexp.MatchString(pattern string, s string) (matched bool, err error) // 編譯一個正則表達式。 func regexp.Compile(expr string) (*Regexp, error) package main import ( "fmt" "regexp" ) func main() { // 檢查string是否匹配模式 matched, err := regexp.MatchString("Go", "Hello, Go!") if err != nil { fmt.Println(err) } fmt.Println("Matched:", matched) // true } 提取功能 regexp.FindString:找到第一個匹配的subString。 regexp.FindAllString:找到所有匹配的subString。 語法如下: // 找到第一個匹配的subString。 func (re *Regexp) FindString(s string) string // 找到所有匹配的subString。 func (re *Regexp) FindAllString(s string, n int) []string package main import ( "fmt" "regexp" ) func main() { re, err := regexp....

2023-09-26 · 2 min · 251 words · Alan

如何在 Go 中處理 String

👨‍💻 簡介 一開始介紹基本資料型別時有稍微提到一點string的處理,今天介紹string的一些操作,像是檢查的功能、修改的功能、比較的功能等等。 檢查功能 strings.Contains:檢查一個string是否包含另一個string。 strings.ContainsAny:檢查一個string是否包含任何指定的Unicode字元。 strings.Count:計算subString在目標string中出現的次數。 strings.ContainsRune:檢查一個string是否包含指定的Unicode字元。 語法如下: // 檢查一個string是否包含另一個string。 func strings.Contains(s, substr string) bool // 檢查一個string是否包含任何指定的Unicode字元。 func strings.ContainsAny(s, chars string) bool // 計算subString在目標string中出現的次數。 func strings.Count(s, substr string) int // 檢查一個string是否包含指定的Unicode字元。 func strings.ContainsRune(s string, r rune) bool package main import ( "fmt" "strings" ) func main() { text := "Hello, world! Hello, universe!" // 檢查string是否包含另一個string containsHello := strings.Contains(text, "Hello") fmt.Println("Contains 'Hello':", containsHello) // true // 檢查string是否包含指定的Unicode字元 containsAny := strings.ContainsAny(text, "aeiou") fmt....

2023-09-22 · 4 min · 675 words · Alan

如何在 Go 中操作系統

👨‍💻 簡介 昨天講到 os package,今天繼續補充 os package底下的 exec package,這個package主要用來執行外部指令和處理指令的輸入和輸出,包括如何設定指令、執行指令以及處理輸出等等。 設定指令 要執行外部指令,首先需要設定要執行的主要指令: exec.Command:接受一個指令名稱和多個參數,並返回一個 Cmd 對象。 語法如下: func exec.Command(name string, arg ...string) *exec.Cmd 第一個參數是放要執行的命令名稱,第二個則是放參數。 接著來看看exec.Cmd是甚麼東西: type Cmd struct { Path string // the path of the command to run Args []string // holds command line arguments Env []string // the environment of the process Dir string // the working directory of the command. Stdin io.Reader // the process's standard input. Stdout io.Writer // the process's standard output and error....

2023-09-21 · 4 min · 758 words · Alan

如何在 Go 中操作檔案

👨‍💻 簡介 今天快速介紹一下對檔案的操作所使用的package os,包括檔案和資料夾操作等。 檔案和資料夾操作 os package 可以執行各種檔案和資料夾操作,如建立、讀取、寫入、刪除檔案,以及取得資料夾內容等。 建立相關操作 os.Create:建立一個新檔案。 os.Mkdir:建立一個新資料夾。 os.MkdirAll:建立資料夾,包括必要的父層資料夾。 語法如下: func os.Create(name string) (*os.File, error) func os.Mkdir(name string, perm fs.FileMode) error func os.MkdirAll(path string, perm fs.FileMode) error package main import ( "fmt" "os" "io" ) func main() { // 建立資料夾,指定權限為755 err := os.Mkdir("mydir", 0755) if err != nil { fmt.Println("Error creating directory:", err) } else { fmt.Println("Directory created successfully.") } // 建立一個新檔案並寫入內容 file, err := os.Create("example.txt") if err !...

2023-09-20 · 3 min · 542 words · Alan

如何在 Go 中處理 JSON

👨‍💻 簡介 今天的encoding/json package是我日常在開發web時很常用到的package之一,主要是用來將Go struct和 JSON 之間進行轉換。主要功能為資料序列化(marshalling)和反序列化(unmarshalling)。 主要功能 encoding/json package 主要用來將 Go struct轉換為 JSON 格式(marshalling)以及將 JSON 資料轉換為 Go struct(unmarshalling)。以下是一些主要功能: 將 Go struct轉換為 JSON 使用 json.Marshal 函數可以將 Go struct轉換為 JSON 格式的資料。 package main import ( "encoding/json" "fmt" ) type Person struct { Name string `json:"name"` Age int `json:"age"` } func main() { person := Person{Name: "Alan", Age: 25} jsonData, err := json.Marshal(person) if err != nil { fmt.Println("JSON 編碼失敗:", err) return } fmt....

2023-09-19 · 3 min · 462 words · Alan

Reflect:Go 語言的鏡子

👨‍💻簡介 在 Go 語言中,reflect package是用來檢查和操作變數的type、value和struct。常見用法有檢察 type、調用方法,以及修改變數的value。今天簡單介紹 reflect package的主要功能、使用方法和常見用法。 主要功能 reflect package 主要用來在運行時檢查和操作變數的type訊息。這對於需要在不確定type的情況下處理資料的情況非常有用。要使用reflect package,首先需要import它: import "reflect" reflect package的主要功能包括: Type reflect reflect 可以讓你取得變數的type訊息,方便我們在運行時進行type比較,檢查變數的type。下面是一些基本的type reflect操作: reflect.TypeOf:取得變數的type。 reflect.ValueOf:取得變數的value。 reflect.Zero:建立一個zero value。 package main import ( "fmt" "reflect" ) func main() { var num int typ := reflect.TypeOf(num) val := reflect.ValueOf(num) zeroVal := reflect.Zero(typ) fmt.Printf("Type: %v\n", typ) // Type: int fmt.Printf("Value: %v\n", val) // Value: 0 fmt.Printf("Zero Value: %v\n", zeroVal) // Zero Value: 0 } Struct reflect reflect 可以讓你取得struct欄位的訊息,訪問struct欄位的value,以及修改struct欄位的value。...

2023-09-15 · 3 min · 602 words · Alan

Time:Go語言的時間處理利器

👨‍💻簡介 要處理日期和時間,就必須知道這個Package -> time,Go提供了內建的timePackage。 今天主要介紹time的功能,包括時間操作、格式化等等,以及常見用法。 主要功能 timePackage的主要功能是處理時間和日期的操作,包括時間的表示、創建、格式化和計算。在Go中,時間通常以time.Time type表示,這個type包含了日期和時間的資訊。 導入Package import "time" 創建時間 使用time.Now()函數來獲取當前的時間。 package main import ( "fmt" "time" ) func main() { currentTime := time.Now() fmt.Println("Current Time:", currentTime) } 你還可以使用time.Date()函數來創建一個特定日期和時間的time.Time 物件。 package main import ( "fmt" "time" ) func main() { specificTime := time.Date(2023, time.September, 15, 12, 0, 0, 0, time.UTC) fmt.Println("Specific Time:", specificTime) } 時間格式化 timePackage有提供許多方法來格式化時間為字串。可以使用Format方法和指定的時間格式來實現。 package main import ( "fmt" "time" ) func main() { currentTime := time....

2023-09-15 · 2 min · 379 words · Alan

Fmt:資料處理的好幫手

👨‍💻簡介 要印出Hello World,就會碰到這個Package -> fmt,今天來簡單整理一下fmt的作用、格式化的控制與常見用法。 主要功能 fmt 套件的主要功能是處理格式化的輸出和輸入,包括資料格式處理、字串解析和數值轉換等功能。通常用來記錄訊息、檔案處理等等。fmt 套件中的函數可以主要分為兩大類:Print 和 Scan。 導入Package import "fmt" Print 函數系列 fmt.Print:將資料印到終端機。 fmt.Println:將資料印到終端機,並換行。 fmt.Printf:根據格式化參數將資料印到終端機。 fmt.Sprintf:格式化成字串,通常用在需要以字串形式處理格式化時會用到 fmt.Fprintf:格式化到文件,通常用來寫檔會用到 Print與Printf相比,差在不能印格式化輸出 Print與Println相比,差在ln多了一個換行 package main import ( "fmt" "os" ) func main() { name := "Alan" age := 30 fmt.Print("Name: ", name, " Age: ", age) // 沒有換行 fmt.Println("Name:", name, "Age:", age) // 有換行 fmt.Printf("Name: %s Age: %d\n", name, age) // 格式化印出 formatted := fmt.Sprintf("Name: %s, Age: %d", name, age) fmt....

2023-09-14 · 3 min · 498 words · Alan
Next  »
© 2024 艾倫的程式之旅 Powered by Hugo & PaperMod