zoukankan      html  css  js  c++  java
  • Golang结构体struct的使用(结构体嵌套, 匿名结构体等)

    转自: https://studygolang.com/articles/11313

    golang中是没有class的,但是有一个结构体struct,有点类似,他没有像java,c++中继承的概念,但是他有一个类似功能的结构嵌入

    简单的结构体声明和使用

    type User struct{
        name string
        age int
        address string
    }
    
    user:= User{name:"测试",age:10} 
    user.address="广州市"
    f.Println(user)
    
    

    匿名结构体

    person:= struct {//匿名结构
            name string
            age int
        }{name:"匿名",age:1}
        f.Println("person:",person)
    
    

    函数中结构体作为参数,如果不是用结构指针,函数内参数属性的改变不影响原来对象的属性的改变

    //值拷贝,不改变原来的User对象值
    func us(user User){ 
        user.name="值拷贝";
        user.age=12
        user.address="珠海市"
        f.Println("user in us:",user)
    }
    
    //声明调用
    user:=User{}
    us(user)
    
    
    //指针,改变原来的User对象值
    func use(user *User){ 
        user.name="指针"
        user.age=15
        user.address="深圳市"
        f.Println("user in use:",*user)
    }
    
    //声明调用
    user:=User{}
    use(&user)
    
    

    go语言中虽然没有继承,但是可以结构内嵌,达到类似继承的效果

    type Info struct {
        sex int
        name string
        age int
        address string
    }
    
    type User struct{
        like string
        Info
    }
    
    type Admin struct {
        unlike string
        Info
    }
    
    user:= User{}
    user.sex=0
    user.address="广州市"
    user.like="游戏"
    f.Println(user)
        
        
    admin:= Admin{Info:Info{sex:1}}//还可以这样声明一些属性值,因为Info是结构体,匿名,所以需要这样声明
    admin.address="广州市"
    admin.unlike="游戏"
    f.Println(admin)
    
    

    如果嵌入结构的字段和外部结构的字段相同,那么,想要修改嵌入结构的字段值需要加上外部结构中声明的嵌入结构名称

    type Info struct {
        sex int
        name string
        age int
        address string
    }
    
    type User struct{
        like string
        sex int
        Info
    }
    
    user:=User{}
    user.sex=1//这里修改的外部结构User里面的sex字段值
    user.Info.sex=2//这里修改的是嵌入结构Info的sex字段值
    
    
  • 相关阅读:
    commons
    Dozer数据对象转换神器
    xstream
    javassist
    JAVA设计模式之单例模式
    单例模式
    OC_自动引用计数器_0x04
    OC_自动引用计数器_0x03
    OC_自动引用计数器_0x02
    OC_自动引用计数器_0x01
  • 原文地址:https://www.cnblogs.com/nyist-xsk/p/11226844.html
Copyright © 2011-2022 走看看