我刚刚开始掌握Go(两天前开始写的不到1000行),我仍然想知道一些习语。
我需要通过降序来对一段字符串进行排序。我确实喜欢这样:
func ... {
... do business ...
sort.Sort(stringsLongestFirst(severalThousandStrings))
... carry on and be happy, because it works ...
}
type stringsLongestFirst []string
func (b stringsLongestFirst) Len() int { return len(b) }
func (b stringsLongestFirst) Less(i, j int) bool { return len(b[i]) > len(b[j]) }
func (b stringsLongestFirst) Swap(i, j int) { b[j], b[i] = b[i], b[j] }
首先,我想知道这是否是最常用的方式。
然后,最重要的是,当我写stringsLongestFirst(severalThousandStrings)
时,我想知道幕后发生了什么。字符串切片是否以某种方式被巧妙地重新解释为stringsLongestFirst
类型,或者我是否需要计算一些复制开销?
(编辑:删除了规范的摘录,不适合手头的情况)
答案 0 :(得分:3)
您要转换的类型既不是数字类型也不是字符串:[]string
和stringsLongestFirst
是切片类型。
因此转换应该不会产生比复制切片头(12或24个字节,取决于字大小)更多的开销,当将其打包为interface{}
变量以便调用时,无论如何都会发生转换。 Sort
。不会复制支持数组,这就是调用后severalThousandStrings
似乎已排序的原因。