Goで文字の省略処理(Ellipsis)しようとしたら、初歩的なことで躓いたのでメモ程度に。
結論
ellipsis.go
package main
// Ellipsis a text
func Ellipsis(length int, text string) string {
r := []rune(text)
if len(r) > length {
return string(r[0:length]) + "..."
}
return text
}
要点
-
len(string)
は鬼門- バイト数返す。考えてみたら当然だよね☆
-
string[n:m]
は鬼門- バイト位置で切る。考えてみたら当z
蛇足
string
系の関数作るときは、func(params..., string)
の形に作るとちょっとだけ便利。
text/template
のFuncMap
にそのまま放り込めたりする。些細だなー!
sample.go
package main
import (
"bytes"
"fmt"
"text/template"
)
func main() {
var buf bytes.Buffer
template.New("text").
Funcs(template.FuncMap{"ellipsis": Ellipse}).
Parse(`{{.value | ellipsis 5}}`).
Execute(buf, map[string]string{"value": "みんみんみらくる☆"})
fmt.Println(buf.String())
}