日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame類型轉(zhuǎn)換-Map轉(zhuǎn)換

?gconv.Map?支持將任意的?map?或?struct/*struct?類型轉(zhuǎn)換為常用的 ?map[string]interface{}? 類型。當(dāng)轉(zhuǎn)換參數(shù)為?struct/*struct?類型時,支持自動識別?struct?的 ?c/gconv/json? 標(biāo)簽,并且可以通過?Map?方法的第二個參數(shù)?tags?指定自定義的轉(zhuǎn)換標(biāo)簽,以及多個標(biāo)簽解析的優(yōu)先級。如果轉(zhuǎn)換失敗,返回?nil?。

在十堰等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站設(shè)計、做網(wǎng)站 網(wǎng)站設(shè)計制作定制設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營銷型網(wǎng)站,成都外貿(mào)網(wǎng)站建設(shè),十堰網(wǎng)站建設(shè)費(fèi)用合理。

屬性標(biāo)簽:當(dāng)轉(zhuǎn)換?struct/*struct?類型時,支持 ?c/gconv/jso?n 屬性標(biāo)簽,也支持 ?-?及?omitempty標(biāo)簽屬性。當(dāng)使用 ?-? 標(biāo)簽屬性時,表示該屬性不執(zhí)行轉(zhuǎn)換;當(dāng)使用 ?omitempty標(biāo)簽屬性時,表示當(dāng)屬性為空時(空指針?nil?, 數(shù)字?0?, 字符串?""?, 空數(shù)組?[]?等)不執(zhí)行轉(zhuǎn)換。

常用轉(zhuǎn)換方法:

func Map(value interface{}, tags ...string) map[string]interface{}
func MapDeep(value interface{}, tags ...string) map[string]interface{}

其中,?MapDeep?支持遞歸轉(zhuǎn)換,即會遞歸轉(zhuǎn)換屬性中的?struct/*struct?對象。

更多的map相關(guān)轉(zhuǎn)換方法請參考接口文檔:https://pkg.GO.dev/github.com/gogf/gf/v2/util/gconv

基本示例

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/util/gconv"
)

func main() {
	type User struct {
		Uid  int    `c:"uid"`
		Name string `c:"name"`
	}
	// 對象
	g.Dump(gconv.Map(User{
		Uid:  1,
		Name: "john",
	}))
	// 對象指針
	g.Dump(gconv.Map(&User{
		Uid:  1,
		Name: "john",
	}))

	// 任意map類型
	g.Dump(gconv.Map(map[int]int{
		100: 10000,
	}))
}

執(zhí)行后,終端輸出:

{
    "name": "john",
    "uid": 1
}

{
    "name": "john",
    "uid": 1
}

{
    "100": 10000
}

屬性標(biāo)簽

我們可以通過?c/gconv/json標(biāo)簽來自定義轉(zhuǎn)換后的?map?鍵名,當(dāng)多個標(biāo)簽存在時,按照?gconv/c/json?的標(biāo)簽順序進(jìn)行優(yōu)先級識別。

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/util/gconv"
)

func main() {
	type User struct {
		Uid      int
		Name     string `c:"-"`
		NickName string `c:"nickname, omitempty"`
		Pass1    string `c:"password1"`
		Pass2    string `c:"password2"`
	}
	user := User{
		Uid:   100,
		Name:  "john",
		Pass1: "123",
		Pass2: "456",
	}
	g.Dump(gconv.Map(user))
}

執(zhí)行后,終端輸出:

{
    "Uid": 100,
    "password1": "123",
    "password2": "456"
}

自定義標(biāo)簽

此外,我們也可以給?struct?的屬性自定義自己的標(biāo)簽名稱,并在?map?轉(zhuǎn)換時通過第二個參數(shù)指定標(biāo)簽優(yōu)先級。

package main

import (
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/util/gconv"
)

func main() {
	type User struct {
		Id   int    `c:"uid"`
		Name string `my-tag:"nick-name" c:"name"`
	}
	user := &User{
		Id:   1,
		Name: "john",
	}
	g.Dump(gconv.Map(user, "my-tag"))
}

執(zhí)行后,輸出結(jié)果為:

{
	"nick-name": "john",
	"uid": 1
}

遞歸轉(zhuǎn)換

當(dāng)參數(shù)為?map/struct/*struct?類型時,如果鍵值/屬性為一個對象(或者對象指針)時,并且不是?embedded?結(jié)構(gòu)體且沒有任何的別名標(biāo)簽綁定,?Map?方法將會將對象轉(zhuǎn)換為結(jié)果的一個鍵值。我們可以使用?MapDeep?方法遞歸轉(zhuǎn)換參數(shù)的子對象,即把屬性也轉(zhuǎn)換為?map?類型。我們來看個例子。

package main

import (
	"fmt"
	"github.com/gogf/gf/v2/frame/g"
	"github.com/gogf/gf/v2/util/gconv"
	"reflect"
)

func main() {
	type Base struct {
		Id   int    `c:"id"`
		Date string `c:"date"`
	}
	type User struct {
		UserBase Base   `c:"base"`
		Passport string `c:"passport"`
		Password string `c:"password"`
		Nickname string `c:"nickname"`
	}
	user := &User{
		UserBase: Base{
			Id:   1,
			Date: "2019-10-01",
		},
		Passport: "john",
		Password: "123456",
		Nickname: "JohnGuo",
	}
	m1 := gconv.Map(user)
	m2 := gconv.MapDeep(user)
	g.Dump(m1, m2)
	fmt.Println(reflect.TypeOf(m1["base"]))
	fmt.Println(reflect.TypeOf(m2["base"]))
}

執(zhí)行后,終端輸出結(jié)果為:

{
    "base": {
            "Id": 1,
            "Date": "2019-10-01"
    },
    "nickname": "JohnGuo",
    "passport": "john",
    "password": "123456"
}
{
    "base": {
            "date": "2019-10-01",
            "id": 1
    },
    "nickname": "JohnGuo",
    "passport": "john",
    "password": "123456"
}
main.Base
map[string]interface {}

網(wǎng)站題目:創(chuàng)新互聯(lián)GoFrame教程:GoFrame類型轉(zhuǎn)換-Map轉(zhuǎn)換
文章源于:http://www.dlmjj.cn/article/djghogp.html