精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go:我有注解,Java:不,你沒有!

開發 后端
作為一位 Go 程序員,你會發現身邊的同事大多都擁有其他語言的編寫經驗。那勢必就會遇到一點,要把新學到的知識和以前的知識建立連接。

[[429036]]

大家好,我是煎魚。

作為一位 Go 程序員,你會發現身邊的同事大多都擁有其他語言的編寫經驗。那勢必就會遇到一點,要把新學到的知識和以前的知識建立連接。

[[429037]]

圖來自網絡

特殊在于,Go 有些特性是其他語言有,他沒有的。最經典的就是 N 位 Java 同學尋找 Go 語言的注解在哪里,總要解釋。

為此,今天煎魚就帶大家了解一下 Go 語言的注解的使用和情況。

什么是注解

了解歷史

注解(Annotation)最早出現自何處,翻了一圈并沒有找到。但可以明確,在注解的使用中,Java 注解最為經典,為了便于理解,因此我們基于 Java 做初步的注解理解。

在 2002 年,JSR-175 提出了 《A Metadata Facility for the Java Programming Language》,也就是為 Java 編程語言提供元數據工具。

這就是現在使用最廣泛地注解(Annotation)的來源。示例如下:

  1. // @annotation1 
  2. // @annotation2 
  3. func Hello() string { 
  4.         return "" 

在格式上均以 “@” 作為注解標識來使用。

注解例子

摘抄自 @wikipedia 的一個注解例子:

  1. //等同于 @Edible(value = true
  2. @Edible(true
  3. Item item = new Carrot(); 
  4.  
  5. public @interface Edible { 
  6.   boolean value() default false
  7.  
  8. @Author(first = "Oompah"last = "Loompah"
  9. Book book = new Book(); 
  10.  
  11. public @interface Author { 
  12.   String first(); 
  13.   String last(); 
  14.  
  15. // 該標注可以在運行時通過反射訪問。 
  16. @Retention(RetentionPolicy.RUNTIME)  
  17. // 該標注只用于類內方法。 
  18. @Target({ElementType.METHOD}) 
  19. public @interface Tweezable { 

在上述例子中,通過注解去做了一系列的定義、聲明、賦值等。若是對語言既有注解不熟,或是做的比較復雜的注解,就會有一定的理解成本。

在業內也常常會說,注解就是 “在源碼上進行編碼”,注解的存在,有著明確的優缺點。你覺得呢?

注解的作用

在注解的的作用上,分為如下幾點:

為編譯器提供信息:注釋可以被編譯器用來檢測錯誤或支持警告。

編譯時和部署時處理:軟件工具可以處理注釋信息以生成代碼、XML文件等。

運行時處理:有些注解可以在運行時檢查,并用于其他用途。

Go 注解在哪里

現狀

Go 語言本身并沒有原生支持強大的注解,僅限于以下兩種:

  • 編譯時生成:go:generate
  • 編譯時約束:go:build

但這先按不足以作為一個函數注解來使用,也無法形成像 Python 那樣的裝飾器行為。

為什么不支持

Go issues 上有人提過類似的提案:

Go Contributor @ianlancetaylor 給出了明確的答復,Go 在設計上更傾向于明確的、顯式的編程風格。

思考的優缺點如下:

  • 優勢:不知道 Go 能從添加裝飾器中得到什么好處,沒能在 issues 上明確論證。
  • 缺點:是明確的,會存在意外設置的情況。

因如下原因,沒有接受注解:

  • 對比現有代碼方法,這種裝飾器的新的方法沒有提供比現有方法更多的優勢,大到足矣推翻原有的設計思路。
  • 社區內的投票,支持的也很少(基于表情符號的投票),用戶反饋不多。

可能有小伙伴會說了,有注解做裝飾器了,代碼會簡潔不少。

對此 Go 團隊的態度很明確:

Go 認為可讀性更重要,如果只是額外多寫一點代碼,在權衡后,還是可以接受的。

用 Go 實現注解

雖然 Go 語言官方沒有原生的完整支持,但開源社區中也有小伙伴已經放出了大招,借助各項周邊工具和庫來實現特定的函數注解功能。

GitHub 項目分別如下:

  • MarcGrol/golangAnnotations
  • u2takey/go-annotation

使用示例如下:

  1. package tourdefrance 
  2.  
  3. //go:generate golangAnnotations -input-dir . 
  4.  
  5. // @RestService( path = "/api/tour" ) 
  6. type TourService struct{} 
  7.  
  8. type EtappeResult struct{ ... } 
  9.  
  10. // @RestOperation( method = "PUT", path = "/{year}/etappe/{etappeUid}" ) 
  11. func (ts *TourService) addEtappeResults(c context.Context, year int, etappeUid string, results EtappeResult) error { 
  12.  return nil 

對 Go 注解的使用感興趣的小伙伴可以自行查閱使用手冊。

我們更多的關心,Go 原生都沒支持,那么開源庫都是如何實現的呢?在此我們借助 MarcGrol/golangAnnotations 項目所提供的思路來講解。

分為三個步驟:

  • 解析代碼。
  • 模板處理。
  • 生成代碼。

解析 AST

首先,我們需要用用 go/ast 標準庫獲取代碼所生成的 AST Tree 中需要的內容和結構。

示例代碼如下:

  1. parsedSources := ParsedSources{ 
  2.     PackageName: "tourdefrance"
  3.     Structs:     []model.Struct{ 
  4.         { 
  5.             DocLines:   []string{"// @RestService( path = "/api/tour" )"}, 
  6.             Name:       "TourService"
  7.             Operations: []model.Operation{ 
  8.                 { 
  9.                    DocLines:   []string{"// @RestOperation( method = "PUT", path = "/{year}/etappe/{etappeUid}"}, 
  10.                    ... 
  11.                 }, 
  12.             }, 
  13.         }, 
  14.     }, 

我們可以看到,在 AST Tree 中能夠獲取到在示例代碼中所定義的注解內容,我們就可以依據此去做很多奇奇怪怪的事情了。

模板生成

緊接著,在知道了注解的輸入是什么后,我們只需要根據實際情況,編寫對應的模板生成器 code-generator 就可以了。

我們會基于 text/template 標準庫來實現,比較經典的像是 kubernetes/code-generator 是一個可以參考的實現。

代碼實現完畢后,將其編譯成 go plugin,便于我們在下一步調用就可以了。

代碼生成

最后,萬事俱備只欠東風。差的就是告訴工具,哪些 Go 文件中包含注解,需要我們去生成的。

這時候我們可以使用 //go:generate 在 Go 文件聲明。就像前面的項目中所說的:

  1. //go:generate golangAnnotations -input-dir . 

聲明該 Go 文件需要生成,并調用前面編寫好的 golangAnnotations 二進制文件,就可以實現基本的 Go 注解生成了。

總結

今天在這篇文章中,我們介紹了注解(Annotation)的歷史背景。同時我們針對 Go 語言目前原生的注解支持情況進行了說明。

也面向為什么 Go 沒有像 Java 那樣支持強大的注解進行了基于 Go 官方團隊的原因解釋。如果希望在 Go 實現注解的,也提供了相應的開源技術方案。

你覺得 Go 語言是否需要像和 Java 一樣的注解支持呢?

 

責任編輯:武曉燕 來源: 腦子進煎魚了
相關推薦

2020-04-01 17:50:02

Python編程語言

2020-12-24 18:46:11

Java序列化編程語言

2022-05-11 09:04:50

Go函數數組

2009-07-27 14:11:22

硅谷動力

2016-12-28 14:51:46

大數據應用

2021-09-08 18:35:31

系統調試日志

2023-11-01 11:34:40

用戶畫像企業

2021-06-09 11:28:04

用戶畫像標簽

2022-12-28 11:44:19

用戶畫像互聯網用戶信息

2020-05-25 10:05:26

Python 開發程序員

2023-06-30 08:26:24

Java注解Java程序元素

2022-03-15 07:58:31

SQL風險字符串

2021-07-04 14:19:03

RabbitMQ消息轉換

2020-04-20 13:43:59

黑客聯網攻擊

2024-10-17 09:45:03

2022-11-11 08:31:39

Java注解注解類

2024-01-18 09:38:00

Java注解JDK5

2022-08-08 20:33:12

VolatileJVM

2015-07-03 09:37:21

程序員外包公司

2024-11-14 11:39:10

Order注解接口
點贊
收藏

51CTO技術棧公眾號

国产无遮挡又黄又爽在线观看| 日本55丰满熟妇厨房伦| av二区在线| 国内精品写真在线观看| 久久久久亚洲精品成人网小说| av网页在线观看| 日韩成人一区| 无吗不卡中文字幕| 亚洲人成网站在线观看播放| 亚洲爱情岛论坛永久| 久久尤物视频| 欧美大胆a视频| 男生草女生视频| 一区二区三区亚洲变态调教大结局 | x88av在线| 亚洲日本视频在线| 欧美视频一区二区三区四区| 日本精品久久久久久久久久| eeuss影院www在线播放| 99久久精品99国产精品| 91在线观看免费网站| 国产无遮挡呻吟娇喘视频| 欧美a级在线| 中文字幕av一区中文字幕天堂 | 日本高清视频一区| 国产亚洲色婷婷久久99精品| 日韩欧美午夜| 亚洲精品资源美女情侣酒店| jjzz黄色片| 国产精品白丝久久av网站| 91国偷自产一区二区开放时间 | 日韩电影中文字幕一区| 久久久久无码精品| 国产精品伦一区二区| 丁香五六月婷婷久久激情| 国产卡一卡二在线| 日本中文字幕伦在线观看| 国产亚洲一本大道中文在线| 精品国产一区二区三区麻豆免费观看完整版| 91免费视频播放| 日韩avvvv在线播放| 国产91精品青草社区| 国产性70yerg老太| 国产字幕视频一区二区| 九九热r在线视频精品| 国产一二三av| 成人在线亚洲| 精品偷拍各种wc美女嘘嘘| 特级特黄刘亦菲aaa级| 久久久久九九精品影院| 日韩一区二区三区电影| 国产亚洲色婷婷久久| av成人在线网站| 91精品国产综合久久久久 | 成人app下载| 成人自拍网站| 色哟哟国产精品色哟哟| av激情亚洲男人天堂| 国产综合 伊人色| 日本激情一区二区| 97久久精品人人澡人人爽| 久久精品日产第一区二区三区| 五月天丁香视频| 99re这里只有精品视频首页| 噜噜噜噜噜久久久久久91| 日韩有码电影| 国产女同性恋一区二区| 亚洲免费久久| 亚洲综合影视| 午夜精品久久久久久久| 国产麻花豆剧传媒精品mv在线| 美女的胸无遮挡在线观看| 欧美三级免费观看| 91高清国产视频| 我要色综合中文字幕| 亚洲成av人乱码色午夜| 国产美女喷水视频| 成人直播大秀| 欧美激情亚洲视频| 日本免费在线观看视频| 久久成人精品无人区| av一区观看| 毛片网站在线| 中文字幕一区二区日韩精品绯色| www.欧美黄色| 韩日成人影院| 欧美一区二区三区男人的天堂| 日本不卡视频一区| 欧美日韩有码| 日韩一区在线视频| 日韩高清免费av| 日本在线不卡一区| 99在线观看视频| 欧美伦理影视网| 亚洲精品高清在线| 老司机午夜av| 91九色鹿精品国产综合久久香蕉| 亚洲男人天堂久| 欧美人禽zoz0强交| 视频在线观看国产精品| 国产a一区二区| 超碰在线国产| 午夜精品一区二区三区电影天堂| 乌克兰美女av| 首页亚洲中字| 99久久这里有精品| 亚洲欧美日本韩国| 欧美日韩一区二区在线免费观看| 亚洲欧洲二区| 国产午夜一区二区| 国产无码精品一区二区| 美女网站在线免费欧美精品| 精品国产91亚洲一区二区三区www| 97在线观看免费观看高清| 亚洲午夜久久久| 国产精品v日韩精品v在线观看| 久久动漫网址| 美女视频黄免费的亚洲男人天堂| 久久久精品毛片| av中文字幕在线不卡| 日本丰满大乳奶| 992tv国产精品成人影院| 亚洲国产三级网| 日本黄色小说视频| 久久99精品久久久久久国产越南 | 亚洲国产精彩视频| 国产精品毛片高清在线完整版| 国产美女三级视频| 久久大胆人体视频| 久久免费国产视频| 性欧美8khd高清极品| 国产精品国产三级国产aⅴ入口| 99999精品视频| 小嫩嫩12欧美| 38少妇精品导航| 午夜成人鲁丝片午夜精品| 亚洲一区二区视频在线观看| 天堂在线一区二区三区| 日韩精品一卡| 国产免费一区二区三区香蕉精| 嫩草在线播放| 色就色 综合激情| 中文字幕第4页| 老司机精品视频网站| 久久久一本精品99久久精品| 免费在线小视频| 日韩电影第一页| 狠狠人妻久久久久久| 91免费在线视频观看| 69堂免费视频| 国产午夜在线一区二区三区| 97久久亚洲| 欧美日韩国产成人在线观看| www.精品视频| 亚洲一区二区三区不卡国产欧美| 亚洲少妇一区二区三区| 亚洲第一毛片| 美女主播视频一区| 欧美日韩尤物久久| 日韩在线视频网站| 国产欧美日韩成人| 亚洲国产日日夜夜| 国产成人精品无码片区在线| 亚洲综合不卡| 日韩三级电影网站| 成人av在线播放| 久久亚洲春色中文字幕| 亚洲精品久久久久久无码色欲四季 | 日韩精品――中文字幕| av一区二区三区在线| 欧洲av无码放荡人妇网站| 国内精品久久久久久久久电影网 | 成人在线免费在线观看 | 精品一区二区三区毛片| 国产成人夜色高潮福利影视| 777777777亚洲妇女| 国产精品久久久久久久龚玥菲 | 一本久道中文字幕精品亚洲嫩| 亚洲av成人无码久久精品| 黄色精品一二区| 男人的天堂狠狠干| 日本不卡高清| 成人欧美一区二区三区视频| 欧美艳星kaydenkross| 中文字幕免费精品一区高清| 国产精品久久久久久久久久久久久久久久久久| 一区二区三区精品视频| 免费黄色在线视频| 国产在线精品一区二区不卡了 | 五月婷婷视频在线| 国产精品久久久久久户外露出 | 国产精品极品国产中出| 国产成人欧美在线观看| 成人短视频在线观看| 精品性高朝久久久久久久| 97视频免费在线| 欧美午夜无遮挡| 国产性生活大片| 99久久久精品免费观看国产蜜| 北条麻妃视频在线| 欧美久色视频| 亚洲免费视频一区| 特级西西人体高清大胆| 欧美视频亚洲视频| 欧美日韩国产综合视频在线| 91精品麻豆| 国产精品∨欧美精品v日韩精品| 在线三级电影| 中文字幕精品久久| av女名字大全列表| 日韩欧美电影一二三| 在线免费观看一区二区| 婷婷一区二区三区| 老熟妇高潮一区二区三区| 99久久99精品久久久久久 | 日本精品久久| 欧美一区二区三区免费视| 污视频网站在线免费| 中文字幕国产精品| 你懂的在线视频| 精品剧情在线观看| 国产人妻精品一区二区三区| 欧美伊人久久大香线蕉综合69| 日韩欧美大片在线观看| 亚洲欧美成人一区二区三区| 黄色国产在线播放| 久久精品一区二区三区不卡| 美女黄色一级视频| 国产福利91精品| 亚洲 国产 图片| 青草av.久久免费一区| 国产av无码专区亚洲精品| 亚洲美女网站| 少妇高潮毛片色欲ava片| 欧美高清不卡| 路边理发店露脸熟妇泻火| 亚洲国产一区二区三区在线播放| 亚洲国产激情一区二区三区| 欧美日韩性在线观看| 日本一区二区不卡高清更新| 视频国产一区| 日韩精彩视频| 精品一级毛片| 亚洲成人在线视频网站| 欧洲杯什么时候开赛| 日本一区免费| 成人三级视频| 在线亚洲美日韩| 艳女tv在线观看国产一区| 中文字幕av导航| 亚洲v在线看| 黄色一级大片免费| 一区二区三区在线观看免费| 91精品国产毛片武则天| 在线观看一区| 99精品人妻少妇一区二区| 美女精品在线| 久久国产精品国产精品| 精品一区二区精品| 台湾佬美性中文| 成人晚上爱看视频| 波多野结衣一本| 亚洲国产成人一区二区三区| www.com.av| 夜夜嗨av一区二区三区中文字幕| 日本五十熟hd丰满| 91黄色免费版| 99久久久久成人国产免费| 精品成人一区二区| 日本亚洲一区| 久久精品美女视频网站| 青青草视频在线免费直播| 4388成人网| 日韩黄色三级| 成人xxxxx色| 美日韩中文字幕| 一区二区三区四区欧美日韩| 国内自拍一区| 国产精品涩涩涩视频网站| 国产中文字幕一区| 亚洲成人日韩在线| 中文字幕中文字幕在线一区| 免费无遮挡无码永久在线观看视频| 欧美日韩亚洲高清| 91久久精品无码一区二区| 亚洲激情第一页| 亚洲成人影院麻豆| 韩日精品中文字幕| 高清在线一区| 激情小说综合网| 大胆日韩av| 中文字幕无码精品亚洲资源网久久| 日韩专区中文字幕一区二区| 免费高清视频在线观看| 91麻豆.com| 午夜国产福利一区二区| 色综合天天综合网天天看片| 99久久免费国产精精品| 亚洲少妇中文在线| 欧美理论片在线播放| 国产精品永久免费观看| 精品久久对白| av磁力番号网| 强制捆绑调教一区二区| 亚洲乱码国产乱码精品精大量| 亚洲视频一区二区在线观看| 最新中文字幕一区| 欧美mv日韩mv| 国产精品刘玥久久一区| 国产精品av在线| 欧美日韩破处| 欧美极品少妇无套实战| 麻豆精品国产91久久久久久| mm131美女视频| 亚洲成人777| 国产黄色一区二区| 国产午夜精品美女视频明星a级| 999av小视频在线| 亚洲最大av网站| 91视频综合| 久久久国产欧美| 久久综合色综合88| 日韩黄色在线视频| 欧美videossexotv100| av网址在线看| 成人免费在线网址| 久久精品av| 第四色婷婷基地| 国产三级精品三级在线专区| 亚洲黄色激情视频| 亚洲精品理论电影| а√在线中文网新版地址在线| 爱情岛论坛亚洲入口| 欧美激情视频一区二区三区在线播放 | 亚洲网站在线观看| 性欧美18一19sex性欧美| 美国av一区二区三区| 国产一区二区高清| 亚洲一区二区在线免费| 五月天欧美精品| 色呦呦免费观看| 欧美中文在线观看| 亚洲精品国产动漫| 免费日韩视频在线观看| 国产人久久人人人人爽| 欧美性受xxx黑人xyx性爽| 在线a欧美视频| 国产亚洲精彩久久| 香蕉视频在线网址| 国产成人一区在线| 国产精品白浆一区二小说| 亚洲电影免费观看高清完整版在线| 成人免费高清观看| 国产一区二区三区高清视频| 亚洲一区视频| 一区二区精品免费| 欧美日韩国产小视频在线观看| 香蕉视频在线看| 97av自拍| 99在线精品免费视频九九视| 爱爱免费小视频| 欧美日产在线观看| 午夜激情在线| 看欧美日韩国产| 久久精品久久综合| 久久av高潮av无码av喷吹| 亚洲福利视频网| 韩国精品主播一区二区在线观看| 亚洲在线视频一区二区| 国产精品亚洲一区二区三区妖精 | 午夜三级在线观看| 日韩欧美一级二级| www.com.cn成人| 中文字幕中文字幕在线中一区高清 | 日韩精品一区二区三区视频播放| 182在线播放| 日韩激情视频| 国产传媒欧美日韩成人| 久久精品视频1| 久久天天躁狠狠躁夜夜爽蜜月| 国产精品白丝av嫩草影院| 久久精品一区二| 亚洲精品免费播放| 色av男人的天堂免费在线| 成人免费福利在线| 亚洲日本免费| 污污视频网站在线免费观看| 欧美mv和日韩mv国产网站| 性欧美18一19sex性欧美| 男女裸体影院高潮| 久久久国产综合精品女国产盗摄| 91麻豆国产在线| 日本一区二区不卡| 国产一区日韩一区| 成人黄色短视频| 亚洲成av人片在线观看香蕉| 国产69精品久久久久9999人| 男女啪啪免费视频网站| 国产精品久久久99| 你懂的视频在线播放|