我正在对golang.org/x/text包进行一些测试,特别是feature/plural对子包及其MatchDigits方法。这就是我正在做的事情:
package main
import (
"fmt"
"golang.org/x/text/feature/plural"
"golang.org/x/text/language"
)
func main() {
fmt.Println(plural.Cardinal.MatchDigits(language.French, []byte{1}, 1, 0)) // "1" -> should print 2 (One) but prints 0 (Other)
fmt.Println(plural.Cardinal.MatchDigits(language.French, []byte{2}, 1, 0)) // "2" -> prints 0 (Other) the correct value
fmt.Println(plural.Cardinal.MatchDigits(language.French, []byte{1, 0}, 2, 0)) // "10" -> prints 0 (Other) the correct value
}
Run Code Online (Sandbox Code Playgroud)
这是我从以下位置获得预期结果的地方:http://www.unicode.org/cldr/charts/latest/supplemental/language_plural_rules.html#fr
我还尝试了另一种具有更复杂复数规则的语言,例如捷克语,但输出不正确。
我错过了什么吗?我在这个包上找不到很多例子。
谢谢 !
编辑:
经过更多测试,我发现“1”的结果很好,使用 0 作为exp和scale参数:
fmt.Println(plural.Cardinal.MatchDigits(language.French, []byte{1}, 0, 0)) // …Run Code Online (Sandbox Code Playgroud) 我正在使用github.com/pressly/chi构建这个简单的程序,我尝试从以下位置解码一些 JSON http.Request.Body:
package main
import (
"encoding/json"
"fmt"
"net/http"
"github.com/pressly/chi"
"github.com/pressly/chi/render"
)
type Test struct {
Name string `json:"name"`
}
func (p *Test) Bind(r *http.Request) error {
err := json.NewDecoder(r.Body).Decode(p)
if err != nil {
return err
}
return nil
}
func main() {
r := chi.NewRouter()
r.Post("/products", func(w http.ResponseWriter, r *http.Request) {
var p Test
// err := render.Bind(r, &p)
err := json.NewDecoder(r.Body).Decode(&p)
if err != nil {
panic(err)
}
fmt.Println(p)
})
http.ListenAndServe(":8080", r)
} …Run Code Online (Sandbox Code Playgroud)