Utf 8 切断UTF字符串中的最后一个符文

Utf 8 切断UTF字符串中的最后一个符文,utf-8,go,Utf 8,Go,如何切断UTF字符串中的最后一个符文? 这种方法显然是错误的: package main import ("fmt" "unicode/utf8") func main() { string := "你好" length := utf8.RuneCountInString(string) // how to cut off last rune in UTF string? // this method is obviously incorrect:

如何切断UTF字符串中的最后一个符文? 这种方法显然是错误的:

package main

import ("fmt"
 "unicode/utf8")

func main() {
    string := "你好"
    length := utf8.RuneCountInString(string)
    // how to cut off last rune in UTF string? 
    // this method is obviously incorrect:
    withoutLastRune := string[0:length-1]
    fmt.Println(withoutLastRune)
}
几乎

utf8包有一个函数,用于解码字符串中的最后一个符文,该字符串还返回其长度。从结尾处剪下这个字节数,你就是金色的:

str := "你好"
_, lastSize := utf8.DecodeLastRuneInString(str)
withoutLastRune := str[:len(str)-lastSize]
fmt.Println(withoutLastRune)

使用DecodeLastRuneInstalling是最好的答案。我只想指出,如果您看重更简单的代码而不是运行时效率,那么您可以做到

s := []rune(str) fmt.Println(string(s[:len(s)-1])) s:=[]符文(str) fmt.Println(字符串[:len(s)-1]))
查看以了解您的尝试不正确的原因。我将在您的注释中添加一条注释:)这是O(n)并分配和复制,而使用
utf8。decodelastruneinnstring
是O(1)且不分配或复制。后者可以作为您的两行完成。