欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang中interface{}轉(zhuǎn)為數(shù)組的操作

 更新時間:2021年04月30日 14:24:38   作者:月落烏啼silence  
這篇文章主要介紹了Golang中interface{}轉(zhuǎn)為數(shù)組的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

interface{} 轉(zhuǎn)為普通類型

我們都知道在golang中interface{}可以代表任何類型,對于像int64、bool、string等這些簡單類型,interface{}類型轉(zhuǎn)為這些簡單類型時,直接使用

p, ok := t.(bool)
p, ok := t.(int64)

如果ok==true的話,就已經(jīng)類型轉(zhuǎn)換成功。

假設(shè)有這樣一個場景,我們有一個函數(shù)有返回值,但是返回值的類型不定,所以我們的返回值類型只能以接口來代替了。

返回接口類型之后,我們就要對其類型進行判斷然后進行類型轉(zhuǎn)換。如果返回的是數(shù)組的話,我們就不能像上面那樣直接進行轉(zhuǎn)換了。

那有什么辦法呢?

可以考慮使用reflect.Typeof(mm).Kind()。

func generate() (interface{}, bool) {
	//s := []string{"123", "345", "abc"}
	//s := 123
	s := "mmm"
	return s, true
}
func test() {
	origin, ok := generate()
	if ok {
		switch reflect.TypeOf(origin).Kind() {
		case reflect.Slice, reflect.Array:
			s := reflect.ValueOf(origin)
			for i := 0; i < s.Len(); i++ {
				fmt.Println(s.Index(i))
			}
		case reflect.String:
			s := reflect.ValueOf(origin)
			fmt.Println(s.String(), "I am a string type variable.")
		case reflect.Int:
			s := reflect.ValueOf(origin)
			t := s.Int()
			fmt.Println(t, " I am a int type variable.")
		}
	}
}

generate()函數(shù)有兩個返回值,一個是接口類型,一個是bool類型。

我們只對第一個參數(shù)進行處理,首先使用reflect.TypeOf(mm).Kind()獲得mm的類型,然后采用switch語句來判斷mm的類型,類型判斷完之后進入相應(yīng)的case,然后通過reflect.ValueOf(mm)來mm的值取出來,如果mm本身是個數(shù)組的話,那么s也是一個數(shù)組,就可以進行遍歷操作了。

總結(jié)

1、對于我們已知返回值是哪種類型的情況下,可以直接將返回值進行類型轉(zhuǎn)換,像上面那種轉(zhuǎn)為普通類型的方法一樣。

2、對于返回值類型不是已知的情況下,可以考慮使用reflect.TypeOf()的方式。

補充:golang interface{}轉(zhuǎn)換成struct結(jié)構(gòu)體的兩種方法

1.使用斷言,強制轉(zhuǎn)換

 p, ok := (Value).(user)
     if ok {
         fmt.Println("id:" + p.Id)
         fmt.Println("name:" + p.Name)
     } else {
         fmt.Println("can not convert")
     }

2.json序列化

resByre,resByteErr:=json.Marshal(ResponseData)
 if resByteErr != nil {
  c.Data(utils.ErrorResult("讀取信息失敗" + resByteErr.Error()))
  return
 }
 var newData MnConfig
 jsonRes:=json.Unmarshal(resByre,&newData)
 if jsonRes != nil {
  c.Data(utils.ErrorResult("讀取信息失敗" + jsonRes.Error()))
  return
 }

實例:

package main 
import (
 "encoding/json"
 "fmt"
)
 
type user struct {
 Id int `json:"id"`
 Name string `json:"name"`
} 
 
func main() { 
 newUser:=user{
  Id:   1,
  Name: "杉杉",
 }
 
 var newInterface1 interface{}
 
 //第一種使用interface
 newInterface1=newUser
 fmt.Printf("使用interface: %v",newInterface1.(user))
 
 //第二種使用json
 var newInterface2 interface{}
 newInterface2=newUser
 resByre, resByteErr := json.Marshal(newInterface2)
 if resByteErr != nil {
  fmt.Printf("%v",resByteErr)
  return
 }
 var newData user
 jsonRes := json.Unmarshal(resByre, &newData)
 if jsonRes != nil {
  fmt.Printf("%v",jsonRes)
  return
 }
 fmt.Printf("使用 json: %v",newData)
 
}

結(jié)果:

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • golang接口的正確用法分享

    golang接口的正確用法分享

    這篇文章主要介紹了golang接口的正確用法分享的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • Go代碼格式化gofmt的使用方法實例

    Go代碼格式化gofmt的使用方法實例

    Golang制定了統(tǒng)一的官方代碼風(fēng)格,并推出gofmt工具(go fmt)來幫助開發(fā)人員格式化代碼到統(tǒng)一的風(fēng)格,下面這篇文章主要給大家介紹了關(guān)于Go代碼格式化gofmt的使用方法,需要的朋友可以參考下
    2023-04-04
  • 深入剖析Go語言編程中switch語句的使用

    深入剖析Go語言編程中switch語句的使用

    這篇文章主要介紹了Go語言編程中switch語句的使用,是Go語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • golang實現(xiàn)簡單rpc調(diào)用過程解析

    golang實現(xiàn)簡單rpc調(diào)用過程解析

    這篇文章主要介紹了golang實現(xiàn)簡單rpc調(diào)用,包括RPC具體實現(xiàn)結(jié)合實例代碼給大家講解的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05
  • Go語言異常處理案例解析

    Go語言異常處理案例解析

    這篇文章主要介紹了Go語言異常處理案例解析,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • golang?channel管道使用示例解析

    golang?channel管道使用示例解析

    這篇文章主要介紹了golang?channel管道使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • Go如何優(yōu)雅的關(guān)閉goroutine協(xié)程

    Go如何優(yōu)雅的關(guān)閉goroutine協(xié)程

    本文將介紹首先為什么需要主動關(guān)閉goroutine,并介紹如何在Go語言中關(guān)閉goroutine的常見套路,包括傳遞終止信號和協(xié)程內(nèi)部捕捉終止信號,之后,文章列舉了需要主動關(guān)閉協(xié)程運行的常見場景,希望通過本文的介紹,讀者能夠掌握如何在適當?shù)臅r候關(guān)閉goroutine
    2023-05-05
  • Go測試之.golden文件使用示例詳解

    Go測試之.golden文件使用示例詳解

    這篇文章主要為大家介紹了Go測試之.golden文件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • golang字符串拼接實現(xiàn)方式和區(qū)別對比

    golang字符串拼接實現(xiàn)方式和區(qū)別對比

    本文介紹了Go語言中字符串拼接的多種方法及其優(yōu)缺點,推薦使用strings.Builder進行頻繁拼接以優(yōu)化內(nèi)存分配和性能,同時,還討論了通過sync.Pool優(yōu)化高頻創(chuàng)建的對象,以減少垃圾回收壓力,感興趣的朋友一起看看吧
    2025-02-02
  • golang常用庫之gorilla/mux-http路由庫使用詳解

    golang常用庫之gorilla/mux-http路由庫使用詳解

    這篇文章主要介紹了golang常用庫之gorilla/mux-http路由庫使用,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10

最新評論