我试图从The Go Programming Language Phrasebook运行一个例子 - 这本书是在2012年写的,基于Go 1.0。该示例使用exp/utf8string
包,现在已成为unicode/utf8
。我目前正在使用Go 1.2.1,下面列出的代码不会按原样编译,因为exp/utf8string
包现在已经不存在了:
package main
import "strings"
import "unicode"
import "exp/utf8string"
import "fmt"
func main()
{
str := "\tthe important rôles of utf8 text\n"
str = strings.TrimFunc(str, unicode.IsSpace)
// The wrong way
fmt.Printf("%s\n", str[0:len(str)/2])
// The right way
u8 := utf8string.NewString(str)
FirstHalf := u8.Slice(0, u8.RuneCount()/2)
fmt.Printf("%s\n", FirstHalf)
}
我仍然是GoLang的新手,所以我不确定旧的实验包是如何集成到标准库中的。我做了一些研究,发现utf8string.NewString(str)
现在是expvar.NewString(str)
,所以我将导入更改为
expvar
unicode
并相应地修改了代码以调用expvar.NewString(str)
,但我仍然遇到两个错误:
u8.Slice undefined (type *expvar.String has no field or method Slice)
u8.RuneCount undefined (type *expvar.String has no field or method RuneCount)
我尝试了几种不同的方法,但似乎无法让它发挥作用。
如何为GoLang 1.2.1编写此示例代码?
答案 0 :(得分:4)
安装包utf8string
:
$ go get -v code.google.com/p/go.exp/utf8string
code.google.com/p/go.exp (download)
code.google.com/p/go.exp/utf8string
$
修正程序:
package main
import (
"fmt"
"strings"
"unicode"
"code.google.com/p/go.exp/utf8string"
)
func main() {
str := "\tthe important rôles of utf8 text\n"
str = strings.TrimFunc(str, unicode.IsSpace)
// The wrong way
fmt.Printf("%s\n", str[0:len(str)/2])
// The right way
u8 := utf8string.NewString(str)
FirstHalf := u8.Slice(0, u8.RuneCount()/2)
fmt.Printf("%s\n", FirstHalf)
}
输出:
the important r
the important rô
修改程序仅使用Go 1.2.1标准包:
package main
import (
"fmt"
"strings"
)
func main() {
str := "\tthe important rôles of utf8 text\n"
str = strings.TrimSpace(str)
// The wrong way
fmt.Printf("%s\n", str[0:len(str)/2])
// The right way
r := []rune(str)
FirstHalf := string(r[:len(r)/2])
fmt.Printf("%s\n", FirstHalf)
}
输出:
the important r
the important rô
答案 1 :(得分:0)
只需使用UTF8包(http://golang.org/pkg/unicode/utf8/)
即可这个例子非常奇怪,因为没有必要调用“NewString”来创建UTF8字符串 - 默认情况下,Go中的所有字符串都是UTF8。
我建议寻找另一种资源,因为短语手册似乎已经过时了,所以会产生误导。
尝试“Go By Example”和“Way To Go”。