需要使用" exp / utf8string"翻译代码进入后来的标准库代码

时间:2014-03-22 07:34:09

标签: utf-8 go

我试图从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编写此示例代码?

2 个答案:

答案 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”。