• Go语言学习笔记(8)——包和结构体


    —— 每个可执行的应用程序必须包含一个主函数,它是执行的入口点。主函数应该存在main包中。


    结构体: 通过 操作符访问结构体的各个成员!

    1. 定义结构体类型person: 

    type person struct{ 
            name string
            age    int 
    }

    使用结构体类型定义结构体变量:

      P := person{ "星星",  22 }                 //按顺序初始化

      P := person{ age:22,  name:"星星" }   //使用键值对方式,顺序可以任意

      P := new(person);  P.age = 22;  P.name = "星星"    //new方式,未设置初始值时采用默认初始值

     

    2. 结构体指针: 存储结构体变量的地址,也可以通过 . 操作符访问结构体变量的各个成员

      var pointer_name *person

    3. 匿名字段(类似继承): 不仅仅可以是结构体类型哦,所有的内置类型和自定义类型都可以作为匿名字段。

     type Human struct {
          name string
          age int
          weight float32
    }
      ​
    type Student struct {
          Human                    // 匿名字段,代表Student包含Human的所有字段/成员
          special string
    }
    此时对Student实例化: mark := Student{Human{"Mark", 22, 100.0}, "Computer Science"}    
    注意:可以使用.调用所有属性值(包括匿名字段中的属性),
    也可以mark.Human = Huamn{"Mark", 22, 100};    mark.Human.age = 0              

    4. 结构体嵌套

    type Address struct {
            city, state string
    }
    type Person struct {
            name string
            age int
            address Address         //结构体类型变量作另一个结构体的成员
    }  ​
    func main() {
           var p Person
           p.name = "Naveen"
           p.age = 50
           p.address = Address {
                            city: "Chicago",
                            state: "Illinois",
                        }
        fmt.Println("Name: ", p.name)
        fmt.Println("City: ", p.address.city)
    }
    
    

    5. 导出结构体和导出字段:

    如果结构体类型以大写字母开头,那么它就是一个导出类型,可以从其它包中对它进行访问;类似,如果结构体中的字段以大写字母开头,也可以在其它包中访问它们。

    在computer目录下,创建文件spec.go                   

    package computer
    type Spec struct {       //exported struct
         Maker string        //exported field
         model string        //unexported field
         Price int 
    }

    创建main.go 文件

    import "../structs/computer"     //或 import "./computer"或者 import "根目录"
    import "fmt"
    func main() {
        var spec computer.Spec
        spec.Maker = "apple"
        spec.Price = 50000
        fmt.Println("Spec:", spec)
    }

                      目录结构如下:
                                      src
                                            structs
                                                      computer
                                                              spec.go
                                                      main.go
    6.
    结构体的比较:

       结构体是值类型,如果每个字段都具有可比性,则结构体就是可比较的

       如果两个结构体变量对应字段的值都是相等的,则它们就是相等的!

    ///纵有疾风起,人生不言弃///
  • 相关阅读:
    cogs 2507 零食店
    动态规划练习们~
    codevs 访问艺术馆
    搜索练习 (主要练剪枝23333)
    codevs 3119 高精度练习之大整数开根 (各种高精+压位)
    EntityFramework 两个参数连续(中间有空格)问题
    Mysql DELETE 不能使用别名? 是我不会用!
    MySQL 空间数据 简单操作
    C# String 字符拼接测试(“+”、string.Format、StringBuilder 比较)
    EntityFramework 事物引发的问题
  • 原文地址:https://www.cnblogs.com/skzxc/p/11244377.html
Copyright © 2020-2023  润新知