go语言中的结构体与方法详解


本文摘自php中文网,作者尚,侵删。

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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中的“构造函数”,称之为工厂模式,见代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

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、匿名字段,直接看下面代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

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中定义方法并且使用

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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、结构体继承结构体,其中被继承结构体的方法全部为继承结构体吸收

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

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()

}

更多相关知识请关注go语言教程栏目

以上就是go语言中的结构体与方法详解的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

Go语言常量

Go语言依赖管理介绍

Go语言如何删除链表节点

Go语言和java语言的区别是什么?

Go语言开源么

Go语言中string是什么意思

Go语言用什么开发工具?

Go语言vim怎么设置

如何解决Go语言乱码问题

Go语言向函数传递数组

更多相关阅读请进入《Go语言》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...