当我有字符串“hogemogehogemogehogemoge世界世界世界”时,哪个代码更适合通过避免内存分配来获得最后一个符文?
关于获取 Golang String 的最后一个 X 字符也有类似的问题。
如果我只想获得最后一个符文,我想确定哪个是首选,而不需要任何额外的操作。
package main
import (
"fmt"
"unicode/utf8"
)
func main() {
// which is more better for memory allocation?
s := "hogemogehogemogehogemoge世界世界世界a"
getLastRune(s, 3)
getLastRune2(s, 3)
}
func getLastRune(s string, c int) {
// DecodeLastRuneInString
j := len(s)
for i := 0; i < c && j > 0; i++ {
_, size := utf8.DecodeLastRuneInString(s[:j])
j -= size
}
lastByRune := s[j:]
fmt.Println(lastByRune)
}
func getLastRune2(s string, c int) {
// string -> []rune
r := []rune(s)
lastByRune := string(r[len(r)-c:])
fmt.Println(lastByRune)
}
世界a
世界a