Skip to content

结构体

  • 结构体可以理解为是一个若干字段的集合

结构体--创建&初始化

package main

import "fmt"

type Human struct {
    Sex  int
    Age  int
    From string
}

func getHumanStruct() {
    // ====== 方式一:使用var ======
    // var personal Human
    // personal.Sex = 1
    // personal.Age = 26
    // personal.From = "China"
    // fmt.Println(personal)

    // ====== 方式二:使用匿名的方式 省略了var关键字 ======
    // personal := Human{Sex: 1, Age: 26, From: "China"}
    // fmt.Println(personal)

    // ====== 方式三:new的方式 ======
    personal := new(Human) // 返回指针
    personal.Sex = 1
    personal.Age = 26
    personal.From = "China"
    fmt.Println(personal)
}

func main() {
    getHumanStruct()
}


// 输出
MacintoshdeMacBook-Pro-139:struct elasticnotes$ go run struct.go 
{1 26 China}
MacintoshdeMacBook-Pro-139:struct elasticnotes$ go run struct.go 
{1 26 China}
MacintoshdeMacBook-Pro-139:struct elasticnotes$ go run struct.go 
&{1 26 China}

结构体--属性及函数

  • 属性和函数定义
  • 两种作用域,通过方法首字母大写小写 控制作用域
    • 大写:类似Public
    • 小写:类似Pravite
      package main
      
      import "fmt"
      
      type Human struct {
          Sex  int // 属性
          Age  int
          From string
      }
      
      // 定义结构体的方法
      func (h *Human) HumanFrom() {
          fmt.Println("结构体方法输出值:", h.From)
      }
      
      func main() {
          // getHumanStruct()
          from := new(Human)
          from.From = "China"
          from.HumanFrom()
      }
      
      
      // 输出
      MacintoshdeMacBook-Pro-139:struct elasticnotes$ go run struct.go 
      结构体方法输出值 China
      

结构体--组合

  • 面向对象特性:继承(扩展子类的属性、方法、功能)
  • 组合实现(Go语言中用结构体和结构体组合完成继承)
    package main
    
    import "fmt"
    
    type Like struct {
        What string // 属性
    }
    
    type Human struct {
        Like
        Sex  int // 属性
        Age  int
        From string
    }
    
    // 定义结构体的方法
    func (h *Human) HumanFrom() {
        fmt.Println("结构体方法输出值:", h.From)
    }
    
    func (h *Human) LikeTo() {
        fmt.Println("继承human结构体方法输出值:", h.Like)
    }
    
    func main() {
        from := new(Human)
        from.From = "China"
        from.What = "Basketball"
        from.HumanFrom()
        from.LikeTo()
    }
    
    
    // 输出
    MacintoshdeMacBook-Pro-139:struct elasticnotes$ go run struct.go 
    结构体方法输出值 China
    继承human结构体方法输出值 {Basketball}
    

小结

  • 怎么定义结构体
    1. 通过var关键字申明结构体
    2. 通过匿名的方式创建一个变量
    3. 通过new (指向指针)
  • 作用域如何控制
    1. 方法 和 属性的 大小写来控制
      1. 小写只能在包内引用
      2. 大写可以在包外引用
  • 面向对象有哪些特性
    1. 封装
    2. 继承:结构体的组合
    3. 多态