Golang中的strings.TrimLeft不太好用
虽然也尝试过发推特,但我还是担心,所以我打算逐渐写一些诗歌来表达我的想法。
字符串.TrimLeft有点难懂,是吧?
我不喜欢 golang 中 strings.TrimLeft(Right) 与 strings.TrimPrefix(Suffix) 之间的关系。
在概念上,TrimLeft应该是TrimLeft(s string, cutset set)的形式,但实际却是TrimLeft(s string, cutset string)。
因此,作为类型,TrimLeft(string, string)和TrimPrefix(string, string)无法区分。
如果不了解Prefix的存在,在看到TrimLeft(“abc-back”, “abc-“)这样的代码时,会有两种不同的结果想象。正确答案是”k”,但可能会误以为是”back”。事实上,就算我这个已经用golang两年的人也会这样想。
所有的函数都应该用类型来推测内部逻辑!虽然我一点也没考虑过这种事情,但这真的太难理解了,对吧?
那么怎么办呢? ne?)
golang中没有set(或者说没有泛型),那么要用什么来代替呢?
形式上,使用map[T]struct{}这种方式是一种常见做法,但是。
strings.TrimLeft("abcback", map[rune]struct{}{
'a':struct{}{},
'b':struct{}{},
'c':struct{}{}
})
太讨厌了,不想写。
最后,其实就是个数组吧?所以我希望它作为 `strings.TrimLeft(string, []rune)` 来使用。
总的来说,它和字符串很相似,但是数组既是顺序的,也有一种集合的含义(相较于字符串而言)。
对第二个期待
我暗自希望golang 2会对strings.TrimLeft(string, []rune)进行改变。
我想写一个RFC,但讨论可能会混乱,我没有勇气以英语参与那样的场合。