一个程序猿的奋斗史php开发

Go语言学习笔记14.复合类型-结构体struct

2019-11-06  本文已影响0人  快乐的提千万

结构体

和C一样, 将多种不同类型的变量组合到一起则是结构体。

package main //必须有个main包

import "fmt"

//定义一个结构体类型
type Student struct {
    id   int
    name string
    sex  byte //字符类型
    age  int
    addr string
}

func main() {
    //顺序初始化,每个成员必须初始化
    var s1 Student = Student{1, "teemo", 'm', 18, "jz"}
    fmt.Println("s1 = ", s1)

    //指定成员初始化,没有初始化的成员,自动赋值为0
    s2 := Student{name: "teemo2", addr: "hb"}
    fmt.Println("s2 = ", s2)

    //操作和获取用.
    s1.id = 2
    fmt.Println("s1 = ", s1)

    //////////////////////////结构体指针////////////////////////

    //顺序初始化,每个成员必须初始化, 别忘了&
    var p1 *Student = &Student{1, "mike", 'm', 18, "bj"}
    fmt.Println("p1 = ", p1)

    //指定成员初始化,没有初始化的成员,自动赋值为0
    p2 := &Student{name: "mike", addr: "bj"}
    fmt.Printf("p2 type is %T\n", p2)
    fmt.Println("p2 = ", p2)

    //通过指针操作成员  p1.id 和(*p1).id完全等价,只能使用.运算符
    p1.id = 2
    fmt.Println("p1 = ", p1)
}

同类型的2个结构体变量可以相互赋值

结构体做参数

一样,也有值传递和地址传递

package main //必须有个main包

import "fmt"

//定义一个结构体类型
type Student struct {
    id   int
    name string
    sex  byte //字符类型
    age  int
    addr string
}

func test01(s Student) {
    s.id = 666
    fmt.Println("test01: ", s) // {666 teemo 109 18 bj}
}

func test02(p *Student) {
    p.id = 666
}

func main() {
    s := Student{1, "teemo", 'm', 18, "bj"}

    test02(&s) //地址传递(引用传递),形参可以改实参
    fmt.Println("main: ", s) //{666 teemo 109 18 bj}

    s2 := Student{1, "teemo", 'm', 18, "bj"}
    test01(s2) //值传递,形参无法改实参
    fmt.Println("main: ", s2)//{1 teemo 109 18 bj}
}
上一篇 下一篇

猜你喜欢

热点阅读