在golang的std包中,“func decodeRuneInternal”和“func decodeRuneInStringInternal”除了args之外是相同的,即:
func decodeRuneInternal(p []byte) (r rune, size int, short bool)
func decodeRuneInStringInternal(s string) (r rune, size int, short bool)
为什么不将decodeRuneInStringInternal定义为:
func decodeRuneInStringInternal(s string) (r rune, size int, short bool) {
return decodeRuneInternal([]byte(s)) (r rune, size int, short bool)
}
在utf8.go中,decodeRuneInStringInternal的实现与decodeRuneInternal相同。
为什么?
答案 0 :(得分:2)
在字符串函数包装[]字节函数或转换[]byte(s)
中的内存分配的情况下,两个函数避免转换string(p)
中的内存分配。 byte函数包装字符串函数。