美文网首页一个程序猿的奋斗史php开发
Go语言学习笔记14.复合类型-结构体struct

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

作者: 快乐的提千万 | 来源:发表于2019-11-06 09:15 被阅读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}
    }
    

    相关文章

      网友评论

        本文标题:Go语言学习笔记14.复合类型-结构体struct

        本文链接:https://www.haomeiwen.com/subject/ldkebctx.html