原因
自己入门的语言是java语言,最近在用golang,有个不习惯的golang的string,在java开发中,String做为一个对象,它里面封装了许多方法,用面向的对象的思想来考虑的话,确实如此。比如我们想看这个字符串中包不包含某个字符,这个行为明显的需要问该字符串本身。而golang 的strings.Contains()更像是面向过程的写法。
扩展string的功能
直接给string扩展功能是不行的。
func (s string) Contains(substr string) bool{
return strings.Contains(s,substr)
}
如何扩展
我们可以自己定义一个类型包装string即可:
package main
import (
"fmt"
"strings"
)
type String string
func main() {
var mystr String = "这是自己的定义的String类型"
all := mystr.ReplaceAll("S", "s")
fmt.Println(all.Contains("i"))
fmt.Println(all)
}
func (s String) ReplaceAll(old String,new String) String {
replaceStr := strings.ReplaceAll(string(s), string(old), string(new))
return String(replaceStr)
}
func (s String) Contains(substr String) bool {
return strings.Contains(string(s),string(substr))
}
可以看到,我们的String用法已经和java中的用法无异了,这确实是面向对象的一种写法。