亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Golang中將interface{}轉換為數組

發布時間:2021-05-03 10:44:43 來源:億速云 閱讀:2377 作者:Leah 欄目:開發技術

怎么在Golang中將interface{}轉換為數組?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

golang適合做什么

golang可以做服務器端開發,但golang很適合做日志處理、數據打包、虛擬機處理、數據庫代理等工作。在網絡編程方面,它還廣泛應用于web應用、API應用等領域。

interface{} 轉為普通類型

golang中interface{}可以代表任何類型,對于像int64、bool、string等這些簡單類型,interface{}類型轉為這些簡單類型時,直接使用

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

如果ok==true的話,就已經類型轉換成功。

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

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

那有什么辦法呢?

可以考慮使用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()函數有兩個返回值,一個是接口類型,一個是bool類型。

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

總結

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

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

補充:golang interface{}轉換成struct結構體的兩種方法

1.使用斷言,強制轉換

 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)
 
}

結果:

怎么在Golang中將interface{}轉換為數組

看完上述內容,你們掌握怎么在Golang中將interface{}轉換為數組的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

保德县| 丹棱县| 祁连县| 禹城市| 长泰县| 东乡族自治县| 乌拉特中旗| 铁岭市| 永和县| 庆云县| 沈丘县| 抚宁县| 台前县| 新晃| 保靖县| 始兴县| 嘉禾县| 盐源县| 丰镇市| 易门县| 古浪县| 额尔古纳市| 文昌市| 浦北县| 三都| 卢龙县| 高雄市| 咸阳市| 新建县| 东丰县| 南涧| 田东县| 宝清县| 泾阳县| 漳州市| 鄂托克前旗| 八宿县| 六安市| 札达县| 和静县| 昌图县|