zoukankan      html  css  js  c++  java
  • 关于Go语言,自己定义结构体标签的一个妙用.

    在Go中首字母大写和小写,决定着这此变量能否被外部调用,

    比如:在使用标准库的json编码自定一的结构的时候:

    <pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" font-weight:600; color:#000080;">package</span><span style=" color:#c0c0c0;"> </span>main

    
    
    import (
        "encoding/json"
        "fmt"
    )
    
    
    type T struct {
        name string
        Age  int
    }
    
    
    func main() {
        var info T = T{"fyxichen", 24}
        fmt.Println("编码前:",info)
        b, _ := json.Marshal(info)
        fmt.Println("编码后:",string(b))
    }

    
    执行结果是:
    

    编码前: {fyxichen 24}

    编码后: {"Age":24} 在这里name的值并未被编码,原因接收首字母是小写,外部不能调用导致的.


    当我们用json和外部API进行交互的时候,别的程序语言不像Go这样用大写和小写来控制变量的作用域.所以以下这个标签的使用,会用起来更舒服.

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    )
    
    type T1 struct {
    	Name string
    	Age  int
    }
    type T2 struct {
    	Name string `json:"name"`
    	Age  int    `json:"age"`
    }
    
    func main() {
    	var info1 T1 = T1{"fyxichen", 24}
    	var info2 T2 = T2{"fyxichen", 24}
    	b, _ := json.Marshal(info1)
    	fmt.Println("Struct1:", string(b))
    	b, _ = json.Marshal(info2)
    	fmt.Println("Struct2:", string(b))
    }

    执行结果:

    Struct1 :{"Name":"fyxichen","Age":24}

    Struct2 :{"name":"fyxichen","age":24}


  • 相关阅读:
    interpolator-动画执行方式
    获得手机屏幕的宽度
    theme-windowAnimationStyle 动画四个方法的意义
    viewPager-基本实现示例
    ontouch、dispatchtouchevent、interceptouchevent-相关事件
    eclipse- log 打印跟输出到文件
    item-设置可见性
    touch、touchevent-事件总结
    005-磁盘读写原理
    004-双向链表
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5373853.html
Copyright © 2011-2022 走看看