国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Go語(yǔ)言實(shí)現(xiàn)結(jié)構(gòu)體初始化設(shè)置默認(rèn)值

在Go語(yǔ)言中結(jié)構(gòu)體原生語(yǔ)法是不支持設(shè)置默認(rèn)值的,這就在很多場(chǎng)景中需要增加額外的步驟,去設(shè)置一些默認(rèn)值。

自從 Go 1.18支持泛型后,再通過(guò)反射功能即可實(shí)現(xiàn)為結(jié)構(gòu)體設(shè)置默認(rèn)值。

原理也非常簡(jiǎn)單,只要將結(jié)構(gòu)體的標(biāo)簽中設(shè)置一個(gè)Key,即可通過(guò)Key的值賦予對(duì)象的指定字段。

package main

import (
    "fmt"
    "reflect"
    "strconv"
)

type Person struct {
    Name string `df:"無(wú)名氏"`
    Age  int    `df:"18"`
}

func main() {
  // 實(shí)例化類并指定標(biāo)簽
    p := NewClass(Person{}, "df")
  // 結(jié)果:{無(wú)名氏 18}
    fmt.Println(p)
}

// 實(shí)例化結(jié)構(gòu)體
// 目前只能實(shí)現(xiàn)基本數(shù)據(jù)類型
func NewClass[T any](cls T, dfKey string) T {

    rt := reflect.ValueOf(&cls).Elem()
    vt := rt.Type()

    for i := 0; i < rt.NumField(); i++ {

        f := rt.Field(i)
        tag, ok := vt.Field(i).Tag.Lookup(dfKey)
        if ok {
            switch f.Kind() {

            case reflect.Bool:
                i, _ := strconv.ParseBool(tag)
                f.SetBool(i)

            case reflect.String:
                f.SetString(tag)

            case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
                i, _ := strconv.ParseInt(tag, 10, 64)
                f.SetInt(i)

            case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
                i, _ := strconv.ParseUint(tag, 10, 64)
                f.SetUint(i)

            case reflect.Float32, reflect.Float64:
                i, _ := strconv.ParseFloat(tag, 64)
                f.SetFloat(i)

      // 更多數(shù)據(jù)類型支持需要自己定義規(guī)則
            }
        }
    }

    return cls
}


文章來(lái)源地址http://www.zghlxwxcb.cn/article/269.html


到此這篇關(guān)于Go語(yǔ)言實(shí)現(xiàn)結(jié)構(gòu)體初始化設(shè)置默認(rèn)值的文章就介紹到這了,更多相關(guān)內(nèi)容可以在右上角搜索或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

原文地址:http://www.zghlxwxcb.cn/article/269.html

如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)聯(lián)系站長(zhǎng)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • VScode:初始化恢復(fù)默認(rèn)設(shè)置

    VScode:初始化恢復(fù)默認(rèn)設(shè)置

    第一步:在VScode左下角點(diǎn)擊設(shè)置 第二步:點(diǎn)擊這個(gè)按鈕 第三步:將大括號(hào)里的內(nèi)容全部刪除,這些都是你當(dāng)前的用戶設(shè)置 第四步:清空后,VScode的設(shè)置就初始化了,你會(huì)發(fā)現(xiàn)我的背景變了,因?yàn)槲覍⒅黝}的設(shè)置也刪除了,所以就恢復(fù)默認(rèn)主題了【記得ctrl + S(保存)】

    2024年03月21日
    瀏覽(29)
  • Git設(shè)置初始化默認(rèn)分支為main

    github創(chuàng)建項(xiàng)目的默認(rèn)分支為main。本地創(chuàng)建的git分支默認(rèn)為master,每次在本地新建一個(gè)倉(cāng)庫(kù)再關(guān)聯(lián)到remote,分支不統(tǒng)一。 git在2.28版本中提供了一個(gè)配置,指定在執(zhí)行 git init 的時(shí)候生成的默認(rèn)分支 本地git版本不夠的話先升級(jí); 如果使用homebrew安裝的git,直接升級(jí)即可 或者可以

    2024年02月13日
    瀏覽(15)
  • go語(yǔ)言數(shù)據(jù)初始化

    數(shù)據(jù)的聲明: 初始化數(shù)組的初始化有多種形式。 [5] int {1,2,3,4,5} 長(zhǎng)度為5的數(shù)組,其元素值依次為:1,2,3,4,5。 [5] int {1,2} 長(zhǎng)度為 5 的數(shù)組,其元素值依次為:1,2,0,0,0 。 在初始化時(shí)沒(méi)有指定初值的元素將會(huì)賦值為其元素類型 int 的默認(rèn)值0,string 的默認(rèn)值是 “”。

    2024年02月03日
    瀏覽(27)
  • go語(yǔ)言包、變量、init初始化順序

    go語(yǔ)言包、變量、init初始化順序

    一個(gè)完整的 go 語(yǔ)言可運(yùn)行程序,通常會(huì)包含引用的包、變量、init 函數(shù)以及 main 函數(shù)幾個(gè)部分。 包、變量、常量、init 函數(shù)以及 main 函數(shù)初始化順序如下圖所示: 在一個(gè) go 語(yǔ)言程序中,初始化順序規(guī)則如下: 引入的包 當(dāng)前包中的變量、常量 當(dāng)前包的 init 函數(shù) main 函數(shù) 初始

    2023年04月14日
    瀏覽(26)
  • 【Golang入門教程】Go語(yǔ)言變量的初始化

    【Golang入門教程】Go語(yǔ)言變量的初始化

    強(qiáng)烈推薦 前些天發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站: 人工智能 推薦一個(gè)個(gè)人工作,日常中比較常用的人工智能工具,無(wú)需魔法,忍不住分享一下給大家。點(diǎn)擊跳轉(zhuǎn)到網(wǎng)站: 人工智能工具 引言 在Go語(yǔ)言中,變量

    2024年04月17日
    瀏覽(105)
  • 【Go 基礎(chǔ)篇】Go語(yǔ)言 init函數(shù)詳解:包的初始化與應(yīng)用

    在Go語(yǔ)言中, init() 函數(shù)是一種特殊的函數(shù),用于在包被導(dǎo)入時(shí)執(zhí)行一次性的初始化操作。 init() 函數(shù)不需要手動(dòng)調(diào)用,而是在包被導(dǎo)入時(shí)自動(dòng)執(zhí)行。這使得我們可以在包導(dǎo)入時(shí)完成一些必要的初始化工作,確保包的使用具有正確的環(huán)境和狀態(tài)。 本篇博客將深入探討 init() 函數(shù)

    2024年02月11日
    瀏覽(36)
  • 數(shù)據(jù)結(jié)構(gòu)_鏈表_雙向循環(huán)鏈表的初始化、插入、刪除、修改、查詢打印(基于C語(yǔ)言實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)_鏈表_雙向循環(huán)鏈表的初始化、插入、刪除、修改、查詢打?。ɑ贑語(yǔ)言實(shí)現(xiàn))

    版本: 2024年4月26日 V1.0 發(fā)布于博客園 目錄 目錄 雙向循環(huán)鏈表公式 初始化雙向循環(huán)鏈表 構(gòu)建雙向循環(huán)鏈表結(jié)點(diǎn) 創(chuàng)建一個(gè)空鏈表(僅頭結(jié)點(diǎn)) 創(chuàng)建一個(gè)新結(jié)點(diǎn) 插入數(shù)據(jù) 頭插 中插 尾插 刪除數(shù)據(jù) 頭刪 中刪 尾刪 查詢打印數(shù)據(jù) 遍歷打印 測(cè)試 測(cè)試結(jié)果: 完整代碼 DoubleCirLList.h

    2024年04月27日
    瀏覽(36)
  • 數(shù)據(jù)結(jié)構(gòu)_鏈表_單向循環(huán)鏈表的初始化、插入、刪除、修改、查詢打印(基于C語(yǔ)言實(shí)現(xiàn))

    數(shù)據(jù)結(jié)構(gòu)_鏈表_單向循環(huán)鏈表的初始化、插入、刪除、修改、查詢打?。ɑ贑語(yǔ)言實(shí)現(xiàn))

    版本: 2024年4月25日 V1.0 發(fā)布于博客園 目錄 目錄 單向循環(huán)鏈表公式 初始化單向循環(huán)鏈表 構(gòu)建單向循環(huán)鏈表結(jié)點(diǎn) 創(chuàng)建一個(gè)空鏈表(僅頭結(jié)點(diǎn)) 創(chuàng)建一個(gè)新結(jié)點(diǎn) 插入數(shù)據(jù) 頭插 中插 尾插 刪除數(shù)據(jù) 頭刪 中刪 尾刪 查詢打印數(shù)據(jù) 遍歷打印 測(cè)試 測(cè)試結(jié)果: 完整代碼 CircularLinkedLis

    2024年04月25日
    瀏覽(51)
  • C語(yǔ)言結(jié)構(gòu)體的初始化方式

    逐個(gè)初始化字段 :這是最直接的方式,你可以逐個(gè)為結(jié)構(gòu)體的每個(gè)字段進(jìn)行初始化。 2.使用結(jié)構(gòu)體字面值初始化 :這種方式允許你在初始化時(shí)使用一個(gè)字面值來(lái)為結(jié)構(gòu)體提供初始值 3. 全局初始化 :在全局范圍內(nèi),你可以在變量聲明時(shí)就進(jìn)行初始化。 4. 使用? memset ?函數(shù) :

    2024年02月09日
    瀏覽(36)
  • C語(yǔ)言:結(jié)構(gòu)體數(shù)組的使用和初始化:

    前文:在C語(yǔ)言中,結(jié)構(gòu)體是經(jīng)常會(huì)用到的自定義數(shù)據(jù)類型,通常在使用結(jié)構(gòu)體時(shí),我們會(huì)進(jìn)行單一的結(jié)構(gòu)體初始化。但在使用同一個(gè)結(jié)構(gòu)體,初始化不同的數(shù)據(jù)時(shí),則可以用到結(jié)構(gòu)體數(shù)組來(lái)進(jìn)行初始化。 結(jié)構(gòu)體數(shù)組是指在一個(gè)數(shù)組中存儲(chǔ)多個(gè)結(jié)構(gòu)體對(duì)象的集合。結(jié)構(gòu)體是一

    2024年02月04日
    瀏覽(25)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包