這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
相關包有strings, strconv
判斷是否以某字串打頭/結尾
strings.HasPrefix(s string, prefix string) bool => 對應python的str.startswith
strings.HasSuffix(s string, suffix string) bool => 對應python的str.endswith
字串分割
strings.Split(s string, sep string) []string => 對應python的str.split
返回子串索引
strings.Index(s string, sub string) int => 對應python的str.index
strings.LastIndex 最後一個匹配索引
字串串連
strings.Join(a []string, sep string) string =>對應python的str.join
字串替換
strings.Replace(s, old, new string, n int) string =>對應python的str.replace
轉為大寫/小寫
strings.ToUpper(s string) string
strings.ToLower
對應python的str.upper,str.lower
子串個數
strings.Count(s string, sep string) int
對應python的 str.count
Partition
python的str.partition在解析包時候很好用,這裡封裝一個
func Partition(s string, sep string) (head string, retSep string, tail string) { // Partition(s, sep) -> (head, sep, tail) index := strings.Index(s, sep) if index == -1 { head = s retSep = "" tail = "" } else { head = s[:index] retSep = sep tail = s[len(head)+len(sep):] } return}
Partition使用
// 包格式 頭(xy) + 資料體 + 尾 (..xy...)// ..._, header, msg := Partition(data, "xy")if header == "" { // 沒有頭(xy)丟包. (也有可能粘包分包導致 "...x", 最後一個(注意是一個)字元變成了x, 這時要把前面的包丟棄,只保留一個x)} else { // do}