Go從入門到精通——結構體——為型別新增方法
阿新 • • 發佈:2022-05-30
為型別新增方法
Go 語言可以對任何型別新增方法。給一種型別新增方法就像給結構體新增方法一樣,因為結構體也是一種型別。
一、為基本型別新增方法
在 Go 語言中,使用 type 關鍵字可以定義出新的自定義型別。之後就可以為自定義型別新增各種方法。我們習慣於使用面向過程的方式判斷一個值是否為0,例如:
if v == 0{
// v 等於0
}
如果將 v 當作整型物件,那麼判斷 v 值就可以增加一個 IsZero() 方法,通過這個方法就可以判斷 v 值是否為 0,例如:
if v.IsZero(){
// v 等於0
}
詳細程式碼參考如下:
package main import "fmt" //將 int 定義為 MyInt 型別 type MyInt int func (m MyInt) IsZero() bool { return m == 0 } func (m MyInt) Add(other int) int { return other + int(m) } func main() { var b MyInt fmt.Print(b.IsZero()) b = 1 fmt.Println("\n", b.Add(2)) }
二、http 包中的型別方法
Go 語言提供的 http 包裡也大量使用了型別方法。Go 語言使用 http 包進行 HTTP 的請求,使用 http 包的 NewRequest()方法可以建立一個 HTTP 請求,填充請求中的 http 頭(req.Header),再呼叫 http.Client 的 Do 包方法,將傳入的 HTTP 請求傳送出去。
package main import ( "fmt" "io/ioutil" "net/http" "os" "strings" ) func main() { client := &http.Client{} //建立一個 HTTP 請求 req, err := http.NewRequest("POST", "http://www.baidu.com", strings.NewReader("key=value")) //發現錯誤就列印並退出 if err != nil { fmt.Println(err) os.Exit(1) return } //為標頭新增資訊 req.Header.Add("User-Agent", "my-client") //開始請求 resp, err := client.Do(req) //處理請求的錯誤 if err != nil { fmt.Println(err) os.Exit(1) return } //讀取伺服器返回的內容 data, err := ioutil.ReadAll(resp.Body) fmt.Println(string(data)) defer resp.Body.Close() }
三、time包中的型別方法
Go 語言提供的 time 包主要用於是愛你的獲取和計算等。在這個包中,也使用了型別方法,例如:
package main
import (
"fmt"
"time"
)
func main(){
fmt.Println(time.Second.String())
}