go在方法中修改结构体的值_go语言中的结构体与方法详解

结构体用来定义复杂的数据结构,存储很多相同的字段属性

1、结构体的定义以及简单实用package main

import (

"fmt"

)

func main() {

type Student struct { //定义结构体

name string

age int

}

s1 := new(Student) // 定义指向结构体的指针

s1.name = "xiaomu"

s1.age = 10

fmt.Printf("name:%s\nage:%d\n", s1.name, s1.age)

}

结构体定义的三种方式,例如上面的Student类型,有如下方式定义①var s1 Student 在内存中直接定义一个结构体变量

②s1 := new(Student) 在内存中定义一个指向结构体的指针

③s1 := &Student{} 同上

通过以下方式获取存储的值①s1.name

②s1.name或者(*s1).name

③同上

2、struct中的“构造函数”,称之为工厂模式,见代码package main

import (

"fmt"

)

type Student struct { //声明结构体

Name string

Age int

}

func NewStudent(name string, age int) *Student { // 返回值指向Student结构体的指针

return &Student{

Name: name,

Age: age,

}

}

func main() {

s1 := NewStudent("xiaomu", 123) // 声明并且赋值指向Student结构体的指针

fmt.Printf("name: %s\nage: %d", s1.Name, s1.Age)

}

3、特意声明注意事项!!!

结构体是值类型,需要使用new分配内存

4、匿名字段,直接看下面代码package main

import (

"fmt"

)

func main() {

type Class struct {

ClassName string

}

type Student struct { //定义结构体

name string

age int

Class // 定义匿名字段,继承了该结构体的所有字段

}

s1 := new(Student) // 定义指向结构体的指针

s1.ClassName = "xiaomu"

fmt.Printf("ClassName:%s\n", s1.ClassName)

}

struct的方法

1、在struct中定义方法并且使用package main

import (

"fmt"

)

type Student struct { //定义结构体

name string

age int

}

func (stu *Student) OutName() { // 定义Student方法

fmt.Println(stu.name)

}

func main() {

s1 := new(Student) // 定义指向结构体的指针

s1.name = "xaiomu"

s1.OutName()

}

2、结构体继承结构体,其中被继承结构体的方法全部为继承结构体吸收package main

import (

"fmt"

)

type ClassName struct {

className string

}

func (cla *ClassName) OutClassName() {

fmt.Println(cla.className)

}

type Student struct { //定义结构体

name string

age int

ClassName // 继承ClassName结构体的所有

}

func (stu *Student) OutName() { // 定义Student方法

fmt.Println(stu.name)

}

func main() {

s1 := new(Student) // 定义指向结构体的指针

s1.className = "xiaomu"

s1.OutClassName()

}

更多相关知识请关注栏目

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值