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.
结构体的比较:

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

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

///纵有疾风起,人生不言弃///
原文地址:https://www.cnblogs.com/skzxc/p/11244377.html