iT邦幫忙

2024 iThome 鐵人賽

DAY 22
1
Software Development

可以Go一輩子嗎?系列 第 22

Day22. 內建套件介紹(二):sort, io、os、net/http

  • 分享至 

  • xImage
  •  

Day22. 內建套件介紹(二):sort, io、os、net/http

今天我們要來介紹Go語言中的內建套件,這次主要會介紹ioosnet/http這三個套件,這三個套件在Go語言中是非常常用的,也是我們在開發時會經常使用到的套件。

sort

對於基本型別的slice,Go語言的sort套件提供了對slice的排序,例如對int, float64, string等等進行排序。下面是一些常用的sort套件的方法

sort.(type)s(x []T)

intSlice := []int{3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5}
sort.Ints(intSlice)
fmt.Println(intSlice) // [1 1 2 3 3 4 5 5 5 6 9]

sort.(type)sAreSorted(x []T) bool

fmt.Println(sort.IntsAreSorted(intSlice)) // true

如果要對自訂的型別進行排序的話,可以使用sort.Slice配合自訂Sort function來進行排序
其中Sort Function回傳值為bool,當true時表示i小於jfalse時表示i大於j,不過當less(i, j) == less(j, i)時視為ij相等,因此只有當i小於j時才會進行排序

type Person struct {
    Name string
    Age  int
}
people := []Person{
    {"John", 30},
    {"Alice", 25},
    {"Bob", 35},
}
sort.Slice(people, func(i, j int) bool {
    return people[i].Age < people[j].Age
})
fmt.Println(people) // [{Alice 25} {John 30} {Bob 35}]

io

io套件提供了一個ReaderWriter的介面,這兩個介面是Go語言中最基本的介面之一,幾乎所有的I/O操作都是基於這兩個介面進行的。io套件中還提供了一些實現了ReaderWriter介面的結構體,例如FileBuffer等等。
本來還有一個ioutil套件,不過在Go 1.16之後已經被移除,所以現在我們只能使用io套件來進行I/O操作。

常用方法

  • io.Copy(dst Writer, src Reader) (written int64, err error): 將src的內容複製到dst中,並返回複製的字節數。
  • io.ReadAll(r Reader) ([]byte, error): 從r中讀取所有的內容,並返回一個byte切片。
  • io.WriteString(w Writer, s string) (n int, err error): 將string寫入到w中,並返回寫入的字節數。
  • io.ReadAll(r Reader) ([]byte, error): 從r中讀取所有的內容,並返回一個byte切片。
  • io.ReadFull(r Reader, buf []byte) (n int, err error): 從r中讀取buf的長度的內容,如果r中的內容不夠長,則返回一個錯誤。
  • io.Pipe() (*PipeReader, *PipeWriter): 創建一個PipeReader和一個PipeWriter,這兩個對象可以用來在兩個goroutine之間進行通信。

os

os套件提供了一個File結構體,這個結構體實現了io.Readerio.Writer介面,所以我們可以通過os套件來進行文件的讀寫操作。os套件中還提供了一些其他的功能,例如文件操作、進程操作、環境變數操作等等。

常用方法

  • os.Open(name string) (*File, error): 打開一個文件,並返回一個File對象。
  • os.Create(name string) (*File, error): 創建一個文件,如果文件已經存在,則會被覆蓋。
  • os.Mkdir(name string, perm FileMode) error: 創建一個目錄。
  • os.RemoveAll(path string) error: 刪除一個目錄,包括目錄中的所有文件和子目錄。
  • os.Getwd() (dir string, err error): 獲取當前工作目錄。
  • os.Chdir(dir string) error: 改變當前工作目錄。
  • os.Exit(code int): 結束當前進程。
  • os.Getenv(key string) string: 獲取環境變數的值。
  • os.Setenv(key, value string) error: 設置環境變數的值。
  • os.LookupEnv(key string) (string, bool): 查找環境變數的值,如果不存在則返回false
  • os.Environ() []string: 獲取所有的環境變數。

常用變數

  • os.Stdin: 標準輸入。
  • os.Stdout: 標準輸出。
  • os.Stderr: 標準錯誤輸出。
  • os.Args: 命令行參數。
  • os.Hostname() (name string, err error): 獲取主機名。
  • os.Getpid() int: 獲取進程ID。
  • os.Getppid() int: 獲取父進程ID。
  • os.ForkExec(argv0 string, argv []string, attr *ProcAttr) (pid int, err error): 創建一個新的進程。

那麼今天的文章就到這告一段落,如果我的文章有任何地方有錯誤請在留言區反應
後面4天將會介紹Go語言的Gin框架與Gorm套件,這兩個套件是Go語言中非常流行的Web框架與ORM套件
time

REF


上一篇
Day21 內建套件介紹(一):time、strings, encoding
下一篇
Day23. Gin套件介紹與基礎使用
系列文
可以Go一輩子嗎?31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言