go 修改结构体方法_go结构体方法

Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,而不仅仅是struct。

定义格式

func (var *Struct_Name) FuncName( var0, var1... ) return type {}

package main

import (

"fmt"

)

type test struct {

name string

age int

}

func (v *test) getList() {

fmt.Println("getList")

}

func main() {

var s = new(test)

s.getList()

}

golang中结构体方法没有构造函数,可以自己定义并执行构造函数

package main

import (

"fmt"

)

type test struct {

name string

age int

}

func (this *test) init(name string, age int) {

this.name = name

this.age = age

}

func (this *test) getName() string {

return this.name

}

func (this *test) getAge() int {

return this.age

}

func main() {

var s = new(test)

s.init("zhangsan", 20)

fmt.Println(s.getName())

fmt.Println(s.getAge())

}

自行调用初始化方法来实现构造函数的作用

给一个类型取别名

package main

import "fmt"

type integer int

func (this integer) test() {

fmt.Println("print integer")

}

type test struct {

name string

age int

}

func main() {

var i = new(integer)

i.test()

}

结构体是用户单独定义的类型,不能和其他类型进行强制转换

package main

type integer int

func main() {

var i integer

i = 100

var n = 10

n = i

}

结构体是值类型的,改变的是内部的副本。

package main

import (

"fmt"

)

type integer int

func (this integer) get() {

fmt.Println(this)

}

func (this integer) set(num integer) {

this = num

}

func main() {

var i integer

i = 100

i.set(1999)

fmt.Print(i)

}

package main

import (

"fmt"

)

type integer int

func (this integer) get() {

fmt.Println(this)

}

func (this *integer) set(num integer) {

*this = num

}

func main() {

var i integer

i = 100

(&i).set(1999) //= i.set(1999)

fmt.Print(i)

}

方法的访问控制也是通过控制的

结构体继承

如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问 匿名结构体的方法,从而实现了继承。

结构体方法的继承

package main

import (

"fmt"

)

type test struct {

Name int

Age int

}

func (this test) getName() int {

return this.Name

}

type test1 struct {

test

}

func main() {

var t test1

t.Name = 123

var name = t.getName()

fmt.Println(name)

}

如果一个struct嵌套了另一个匿名结构体,那么这个结构可以直接访问 匿名结构体的方法,从而实现了继承。

如果一个struct嵌套了另一个有名结构体,那么这个模式就叫组合。

package main

import (

"fmt"

)

type test struct {

Name int

Age int

}

func (this test) getName() int {

return this.Name

}

type test1 struct {

t test

}

func main() {

var t test1

t.t.Name = 123

var name = t.t.getName()

fmt.Println(name)

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值