zoukankan      html  css  js  c++  java
  • 结构体

    结构体定义

        type 结构体名 struct{
            字段1 字段1的类型
            字段2 字段2的类型
        }
    

    结构体初始化

    先声明再赋值

    var p person // 声明一个person类型的变量P
    p.name = "名字"
    p.age = 18
    fmt.Println(p)
    

    声明同时初始化

    键值对初始化

    var p2 = person{
        "理想",
        100,
    }
    fmt.Println(p2)
    

    注意事项

    1. 两者不能混用
    2. 没有赋值的字段会使用对应类型的零值

    结构体指针

    结构体是值类型,赋值的时候都是拷贝
    当结构体字段较多的时候,为了减少内存消耗可以传递结构体指针

    构造函数

    返回一个结构体变量的函数,为了实例化结构体的到时候更省事

    func newPerson(name string,age int)person{
        return person{
            name: name,
            age: age,
        }
    }
    

    方法

    方法是作用于特定类型的函数
    方法的定义:

    func (接受者变量 接受者类型) 方法名(参数)返回值{
        // 方法体
    }
    

    接受者

    接受者通常使用类型首字母的小写,不建议使用this和self这样的

    值接受者和指针接受者的区别

    使用值接受者的方法不能修改结构体变量
    使用指针接收者的方法可以修改结构体的变量

    标识符

    // 标识符:变量名 函数名 类型名 方法名

    匿名字段

    没有名字的字段

    嵌套结构体

    type address struct{
        province string
        city string
    }
    type company struct{
        name string
        addr address // 嵌套
    }
    

    匿名嵌套结构体

    type address struct{
        provice string
        city string
    }
    type company struct{
        name string
        address // 嵌套匿名结构体
    }
    

    匿名嵌套结构体的字段冲突

    先在自己结构体找到这个字段,找不到就去匿名嵌套的结构体中查找该字段

    type address struct{
        province string
        city string
    }
    type workPlace struct{
        province string
        city string
    }
    type person struct{
        name string
        age int
        address
        workPlace
    }
    

    结构体与json

    json:一种跨语言的数据格式,多用于不同语言之间传递数据

    // 1. 序列化:把go语言中的结构体变量 --> json格式的字符串
    // 2. 反序列化: json格式的字符串 --> go语言中能够识别的结构体变量
    type person struct{
        Name string `json:"name" db:"name" ini:"name"`
        Age int `json:"age"`
    }
    func main(){
        p1 := person{
            Name :"名称",
            Age : 18
        }
        // 序列化
        b, err := json.Marsha1(p1)
        if err!=nil{
            return
        }
        // 反序列化
        str := `{"name":"a","age":18}`
        var p2 person
        json.Unmarsha1([]byte(str),&p2)
        // 传指针是为了能够在json.Unmarsha1内部修改p2的值
    }
    
    
  • 相关阅读:
    php判断值是否为空
    MyQQ
    java动态定义二维数组问题
    回归CSDN
    字体工具栏
    传说中的服务器
    sql server 2000 出现不能执行查询,因为一些文件丢失或未注册
    chm文件打不开
    Cmd不能运行,窗口闪一下就消失
    isql病毒
  • 原文地址:https://www.cnblogs.com/csp813/p/15266597.html
Copyright © 2011-2022 走看看