老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

golang中反射和斷言如何使用-創新互聯

今天就跟大家聊聊有關golang中反射和斷言如何使用,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

成都創新互聯公司服務項目包括五通橋網站建設、五通橋網站制作、五通橋網頁制作以及五通橋網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,五通橋網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到五通橋省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!

1. 反射

反射這個概念絕大多數語言都有,比如Java,PHP之類,golang自然也不例外,反射其實程序能夠自描述和自控制的一類機制。

比如,通過PHP的反射,你可以知道一個類有什么成員,有什么方法。而golang,也能夠通過官方自帶的reflect包來了解各種變量類型及其信息。

下面我們通過一個例子查看反射的基本用法。

話不多說,直接貼代碼:

package main

import (
  "fmt"
  "reflect"
)

type Order struct {
  ordId   int `json:"order_id" validate:"required"`
  customerId string  `json:"customer_id" validate:"required"`
  callback func() `json:"call_back" validate:"required"`
}

func reflectInfo(q interface{}) {
  t := reflect.TypeOf(q)
  v := reflect.ValueOf(q)
  fmt.Println("Type ", t)
  fmt.Println("Value ", v)
  for i := 0; i < v.NumField(); i = i + 1 {
    fv := v.Field(i)
    ft := t.Field(i)
    tag := t.Field(i).Tag.Get("json")
    validate := t.Field(i).Tag.Get("validate")
    switch fv.Kind() {
    case reflect.String:
      fmt.Printf("The %d th %s types: %s, valuing: %s, struct tag: %v\n", i, ft.Name, "string", fv.String(), tag + " " + validate)
    case reflect.Int:
      fmt.Printf("The %d th %s types %s, valuing %d, struct tag: %v\n", i, ft.Name, "int", fv.Int(), tag + " " + validate)
    case reflect.Func:
      fmt.Printf("The %d th %s types %s, valuing %v, struct tag: %v\n", i, ft.Name, "func", fv.String(), tag + " " + validate)
    }
  }

}
func main() {
  o := Order{
    ordId:   456,
    customerId: "39e9e709-dd4f-0512-9488-a67c508b170f",
  }
  reflectInfo(o)
}

首先,我們用reflect.TypeOf(q)和reflect.ValueOf(q)獲取了結構體order的類型和值,然后我們再從循環里對它的成員進行一個遍歷,并將所有成員的名稱和類型打印了出來。這樣,一個結構體的所有信息就都暴露在我們面前。

2.斷言

Go語言里面有一個語法,可以直接判斷是否是該類型的變量: value, ok = element.(T),這里value就是變量的值,ok是一個bool類型,element是interface變量,T是斷言的類型。

如果element里面確實存儲了T類型的數值,那么ok返回true,否則返回false。

package main

import (
  "fmt"
)

type Order struct {
  ordId   int
  customerId int
  callback func()
}

func main() {
  var i interface{}
  i = Order{
    ordId:   456,
    customerId: 56,
  }
  value, ok := i.(Order)
  if !ok {
    fmt.Println("It's not ok for type Order")
    return
  }
  fmt.Println("The value is ", value)
}

輸出:

The value is  {456 56 }

常見的還有用switch來斷言:

package main

import (
  "fmt"
)

type Order struct {
  ordId   int
  customerId int
  callback func()
}

func main() {
  var i interface{}
  i = Order{
    ordId:   456,
    customerId: 56,
  }
  switch value := i.(type) {
    case int:
      fmt.Printf("It is an int and its value is %d\n", value)
    case string:
      fmt.Printf("It is a string and its value is %s\n", value)
    case Order:
      fmt.Printf("It is a Order and its value is %v\n", value)
    default:
      fmt.Println("It is of a different type")
    }
}

輸出:

It is a Order and its value is {456 56 }

看完上述內容,你們對golang中反射和斷言如何使用有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注創新互聯成都網站設計公司行業資訊頻道,感謝大家的支持。

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


新聞名稱:golang中反射和斷言如何使用-創新互聯
文章網址:http://www.xueling.net.cn/article/cesjds.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 3ce奇米四色眼影奇米8888 | AV无码人妻中文字幕 | 久久精品青草 | 伊人久久成综合久久影院 | 一区二区三区香蕉视频 | 污视频在线免费观看一区二区三区 | 在线观看五码 | 日韩精品成人免费观看视频 | 久久高清亚洲 | 欧美成人A猛片在线观看 | 一区二区三区观看视频 | 懂色一区二区三区av片 | 亚洲第一无码精品立川理惠 | 午夜影院a | 中文字幕亚洲乱码熟女在线萌芽 | 另类内射国产在线 | 农村少妇一级毛片 | 亚洲爆乳成AV人在线视菜奈实 | 黄色免费在线观看网址 | 欧美精品在线播放 | 麻豆资源网 | 国内精品久久久久久人妻无码 | 97爱网站| 成人免费视频网站 | 国产第1页| 亚洲成在人线a免费77777 | 国产胸大一区二区三区粉嫩思欲 | 四虎精品影库4HUTV四虎 | 国产成人8x视频网站入口 | 久久久一牛精品99久久精品66 | 最新99热| 精品一区二区中文字幕 | 91动漫在线观看 | 男女性杂交内射妇女BBWXZ | 在线观看免费视频麻豆 | 99精品国产在热久久无毒不卡 | 国产黄色大片在线观看 | 男人午夜 | 亚洲影视一区 | 人人草97 | 美女视频免费是黄的网站高清 |