今天我們要來介紹Go語言中的內建套件,這次主要會介紹io、os、net/http這三個套件,這三個套件在Go語言中是非常常用的,也是我們在開發時會經常使用到的套件。
對於基本型別的slice,Go語言的sort套件提供了對slice的排序,例如對int, float64, string等等進行排序。下面是一些常用的sort套件的方法
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]
fmt.Println(sort.IntsAreSorted(intSlice)) // true
如果要對自訂的型別進行排序的話,可以使用sort.Slice配合自訂Sort function來進行排序
其中Sort Function回傳值為bool,當true時表示i小於j,false時表示i大於j,不過當less(i, j) == less(j, i)時視為i與j相等,因此只有當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套件提供了一個Reader和Writer的介面,這兩個介面是Go語言中最基本的介面之一,幾乎所有的I/O操作都是基於這兩個介面進行的。io套件中還提供了一些實現了Reader和Writer介面的結構體,例如File、Buffer等等。
本來還有一個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套件提供了一個File結構體,這個結構體實現了io.Reader和io.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套件