站长资讯网
最全最丰富的资讯网站

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:%snage:%dn", 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: %snage: %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:%sn", 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)

网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号