Rumah > pembangunan bahagian belakang > Golang > go语言中的结构体与方法详解

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

Lepaskan: 2020-06-19 17:44:19
ke hadapan
3832 orang telah melayarinya

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

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

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)

}

Salin selepas log masuk

结构体定义的三种方式,例如上面的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)

}

Salin selepas log masuk

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)

}

Salin selepas log masuk

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

}

Salin selepas log masuk

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

}

Salin selepas log masuk

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

Atas ialah kandungan terperinci go语言中的结构体与方法详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan