日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Golang——Tag、自定义类型、未命名类型

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Golang——Tag、自定义类型、未命名类型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Tag:

  • tag并不是注釋,而是用來對字段進行描述的元數據。盡管它不屬于數據成員, 但卻是類型的組成部分。
  • 在運行期,可用反射獲取標簽信息。常被用作格式校驗,數據庫關系映射等
    Tag是一個字符串,以key、value形式存在,用于標記字段說明,可以配合反射使用,以及Json解析
  • key:不能為空,不能包含、空格、引號、冒號
  • value:使用雙引號
type User struct {name string `name:"userName"`age int `age:"userAge"` }

獲取結構體Tag內容:

type User struct {name string `name:"userName"`age int `age:"userAge"` }func main() {u := User{}user := reflect.TypeOf(u)field := user.Field(0)fmt.Println(field.Tag.Get("name"))field2 := user.Field(1)fmt.Println(field2.Tag.Get("age")) }

容易忽視的就是struct tag是類型的組成部分,并非數據注釋那么簡單

func main() {var a struct { x int `x`s string `s`}var b struct {x ints string}b = a // err:cannot use a type// struct { x int "x"; s string "s" } as type// struct { x int; s string } in assignment }

自定義類型:

使用關鍵字type定義用戶自定義類型,包括基于現有類型創建,或結構體、有數類型等

func main() {fmt.Println(read, exit) }type myByte byte // 從書上看到有這個操作,但是不太理解存在的意義,其實myByte最終指向的還是byte,何必多此一舉const (read myByte = iotaexit )

多個type定義可合并成組,可在函數或代碼塊內定義局部類型

func main() {type (user struct { // 結構體name stringage uint}event func(string) // 函數類型)u := user{"itzhuzhu", 24}fmt.Println(u)var f event = func(s string) {fmt.Println(s)}f("haha") }

但須注意,即便指定了基礎類型,也只是表明它們擁有相同的數據結構,兩者間不存在任何關系,屬完全不同的兩種類型。除操作符外,自定義類型不會繼承基礎類型的任何信息 (包括方法),不能視作別名,不能隱式轉換或直接用于比較表達式。

func main() {type data intvar d data = 10var x int = d // err: cannot use d (type data) as type int in assignmentprintln(x)println(d == x) // err: invalid operation: d == x (mismatched types data and int) }

未命名類型:

與有明確標識符的bool、int、string等類型相比array、slice、map、channel等類型與具體的元素類型或長度等屬性有關,故稱作未命名類型(unnamedtype)。當然,可用type為其提供具體名稱以變為命名類型(namedtype)。

具有相同聲明的未命名類型被視作同一類型

  • 具有相同基類型的指針
  • 具有相同元素類型和長度的array
  • 具有相同元素類型的slice
  • 具有相同鍵值類型的map
  • 具有相同數據類型及操作方向的channel
  • 具有相同字段序列(字段名、字段類型、標簽以及字段順序)的struct
  • 具有相同簽名(參數和返回值列表,不包括參數名)的function
  • 具有相同方法集(方法名、方法簽名,不包括順序)的interface

函數的參數順序也屬于簽名組成部分

func main() {var a func(int, string)var b func(string, int)b = a // err: cannot use a (type func(int, string)) as type// func(string, int) in assignmentb("s", 1) }

未命名類型轉換規則:

  • 類型相同
  • 基礎類型相同,且其中一個是未命名類型
  • 數據類型相同,將雙向channe 1賦值給單向類型,且其中一個為未命名類型
  • 將 nil 賦值給 s1ice、map、channel、pointer、function 以及 interface
  • 實現了目標interface
func main() {type data [2]intvar d data = [2]int{1, 2} //基礎類型相同,右值為未命名類型。fmt.Println(d)a := make(chan int, 2)var b chan<- int = a // chan轉換為chan<-,其中b為未命名類型。b <- 2 }

總結

以上是生活随笔為你收集整理的Golang——Tag、自定义类型、未命名类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: www毛片com| v888av| 中文在线观看免费高清 | 91亚洲国产成人久久精品麻豆 | 色姐| 国产青草视频 | 自拍偷拍一区二区三区 | 国产资源久久 | 亚洲天堂资源在线 | 国产四区 | 91av观看| 香蕉视频亚洲一级 | 男男啪啪无遮挡 | 青青草视频在线免费观看 | 久久曰视频 | 亚洲综合黄色 | 成人久久久精品乱码一区二区三区 | 精品欧美一区二区久久久 | 日本一二三区在线视频 | 国产一级大片在线观看 | 日韩欧美理论 | 色爽影院| 日韩精品在线网站 | 日韩极品在线 | 在线观看亚洲一区 | 色婷婷一区二区三区四区 | www.国产视频.com | 免费99精品国产自在在线 | 亚洲一道本 | 欧美最猛黑人xxxx黑人猛交 | 国产三级av在线播放 | 国产97超碰 | 天堂在线1 | 精品无码人妻一区二区三区品 | 在线播放小视频 | 国产女优在线播放 | www.99视频| 超薄肉色丝袜一区二区 | 中文字幕无人区二 | 欧美激情va永久在线播放 | 末路1997全集免费观看完整版 | 少妇系列在线观看 | 美女扒开腿让男人操 | 久久成人a | 欲涩漫入口免费网站 | 欧美日韩一区二区电影 | 国产一级理论 | 福利在线一区二区三区 | 国产超碰在线 | 欧美12--15处交性娇小 | 超碰在线色 | 亚洲精品字幕 | 这里只有精品久久 | 天天天天躁天天爱天天碰2018 | 麻豆av一区二区三区在线观看 | 亚州视频在线 | 91免费国产视频 | 国产一区二区啪啪啪 | japanese强行粗暴 | av男人的天堂网 | 天堂av在线电影 | 大奶子在线观看 | 欧美性猛交bbbbb精品 | a级片视频网站 | 激情欧美一区二区三区精品 | 性色在线| 天堂在线一区 | 久久久久久久久久网 | 久久久香蕉视频 | 日韩欧美在线观看一区二区 | 欧美 日韩 国产 精品 | 欧美在线一级片 | 开心六月婷婷 | 亚洲国产精品免费在线观看 | 性a视频| 古装做爰无遮挡三级聊斋艳谭 | 在线观看国产一级片 | 欧美成人午夜77777 | 小明天天看 | 色超碰 | 欧美专区视频 | 初音未来打屁股 | 欧美午夜久久久 | 色综合五月 | 亚洲va中文字幕 | 日本人妻一区 | 国产高清sp | 国产超碰91 | 日韩视频一区二区在线观看 | www.亚洲人 | 97视频在线免费观看 | 日韩精品一区二区亚洲av观看 | 国产精品免费看 | 性活交片大全免费看 | 麻豆伊甸园 | ass亚洲肉体欣赏pics | 在线观看成人一区 | av看片资源 | 91麻豆免费视频 |