学习笔记,写到哪是哪。
可以对自定义结构体或者内置类型结构体,添加方法,方法可接收结构体指针。这种写法让我思考了一下项目结构问题,如果是这样的话,是不是把结构体都先放到一个gofile里面,要使用的时候引入就好了。如果结构体缺什么方法,可以直接加就行了。
样例代码如下
package main import "fmt" type Person struct { name string age int } func (p *Person) print(a string) { fmt.Printf("person name=%s,age=%d -> %s\n", p.name, p.age, a) } func (p Person) print1(a string) { p.name = "小黄" fmt.Printf("person name=%s,age=%d -> %s\n", p.name, p.age, a) } type MyString string func (myString MyString) isLarge() bool { return len(myString) > 10 } func main() { var xm Person = Person{name: "小红", age: 10} xm.print("come on") xm.print1("come on now") fmt.Println(xm) var ms MyString = MyString("haha111122222") fmt.Printf("ms=%s,isLarge=%v\n", ms, ms.isLarge()) }
执行结果
person name=小红,age=10 -> come on
person name=小黄,age=10 -> come on now
{小红 10}
ms=haha111122222,isLarge=true
注意
1、可以看出结构体接收器如果是非指针处理的话,并不会修改原结构体对象的属性。在print1方法中,对属性name做了修改,但是在执行完print1后,可以看到对象的name属性还是小红。
2、可以对内置结构体进行别名定义MyString,就可以在使用原内置结构体方法的同时,加上自定义的方法,这个功能还是很好用的。
小结
还是要结合项目才能对结构体的使用有更多的体会,后面注意回顾。