有的時候我們希望排序不是僅僅按照自然順序排序。例如,我們希望按照字串的長度來對乙個字串陣列排序而不是按照字母順序來排序。這裡我們介紹一下go的自定義排序。
// an highlighted block
package main
import
"sort"
import
"fmt"
// 為了能夠使用自定義函式來排序,我們需要乙個
// 對應的排序型別,比如這裡我們為內建的字串
// 陣列定義了乙個別名bylength
type bylength [
]string
// 我們實現了sort介面的len,less和swap方法
// 這樣我們就可以使用sort包的通用方法sort
// len和swap方法的實現在不同的型別之間大致
// 都是相同的,只有less方法包含了自定義的排序
// 邏輯,這裡我們希望以字串長度公升序排序
func
(s bylength)
len(
) int
func
(s bylength)
swap
(i, j int)
func
(s bylength)
less
(i, j int) bool
// 一切就緒之後,我們就可以把需要進行自定義排序
// 的字串型別fruits轉換為bylength型別,然後使用
// sort包的sort方法來排序
func main()
sort.
sort
(bylength
(fruits)
) fmt.
println
(fruits)
}
輸出結果
[kiwi peach banana]
同樣的,對於其他的型別,使用這種方法,我們可以為go的切片提供任意的排序方法。歸納一下就是:
1.建立自定義排序型別
2.實現sort包的介面方法len,swap和less
3.使用sort.sort方法來排序
Go 自定義排序
go語言包中包含了排序包 sort,其中針對一般的strings int型別已經有了排序方法 sort.ints a int sort.strings a string 1 分別實現三個函式 func p myslice len int func p myslice less i,j int boo...
Go語言自定義包
半天匯入不了,自己寫的包在main.go或者其他go檔案匯入不進去。一直報錯,網上有很多解決辦法,但是大多不是很全面。首先自定義包匯入的時候,包名為包所在的資料夾名。為啥是資料夾名嘞,因為go在build的時候,預設以資料夾名為編譯後的檔名。舉例說明 檔案結構如下 aa main.go,go.mod...
Go 自定義error錯誤
go的error比較靈活.但是自身對error處理的機制有不太好用,我們可以自定義錯誤輸出 只要所有實現了 error 方法的物件都可以,這裡給個比較簡單的demo,後續整理乙個error的優化封裝 package main import fmt type nameemtpyerror struct...