本文由 资源共享网 – ziyuan 发布,转载请注明出处,如有问题请联系我们!Golang的结构体类型struct
收藏熟悉面向对象语言的话,Golang的struct结构体有点像面向对象编程中的 。但这两者不是完全一样,只能说都有继承、封装、多态的特点。
结构体(struct)
结构体可以将零个或多个任意类型的值聚合在一起,能描述多个数据类型
type Person struct { name string age int value string address string }
成员方法和接收者
func (p *Person) setName(name string) { p.name = name }
struc类型新增成员方法的语法很另类,像是单独给struct做绑定,绑定的时候会有 来指定当前实例类型。
GOlang其实可以给任何类型创建成员方法:
type MyInt int func (i MyInt) IsZero() bool{ return i == 0 }
这里通过声明int的自定义类型MyInt,然后绑定一个成员方法。灵活~
值接收者 指针接收者
方法的修改接收者的字段值,还避免值的拷贝(内部实际上是拷贝的指针)。
可以是 或者 。上面例子的接收者是一个Person类型的指针。指针接收者的一个优点是可以直接声明为值接收者也是可以:
func (p Person) getName() string { return p.name }
getName方法会在调用时复制接收者,就可能会导致性能问题。一般是建议使用指针作为接收者
小结
值接收者或者指针接收者 都能调用结构体或者内嵌结构体的方法或者属性。
给结构体绑定成员方法时,参数最好使用指针,防止值拷贝
func (this *Person) setName(name string) // 申明结构体struct type Person struct { name string age int value string address string } //结构绑定 // 给结构体绑定成员方法。 不推荐使用,内存利用低效(参数会使用值传递,会内存拷贝) //p Person这里p表示值接收者 // func (p Person) getName() string { // 这里的p变量指针和外部调用的mPerson不同,这里属于值拷贝!!! // return p.name // } // 给Person结构体指针绑定成员方法,同上面效果。但是参数属于引用传递 //this为指针接收者 func (this *Person) getName() string { return this.name } // 给Person结构体指针绑定方法 func (this *Person) setName(name string) { this.name = name } func main() { //创建实例 // var mPerson *Person = new(Person)//返回实例指针 // var mPerson Person = *new(Person)//返回实例 // var mPerson Person = Person{}//返回实例 var mPerson *Person = &Person{name: "Hi~"} //获取实例指针 mPerson.setName("") fmt.Println(mPerson.getName()) }
技术文章资源(Golang的结构体类型struct)网址:https://www.08i8.com/course/detail506.html;转载请注明!