中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

使用golang編寫基于注解的靜態代碼增強器/生成器的方法教程

發布時間:2021-10-13 10:29:02 來源:億速云 閱讀:172 作者:iii 欄目:編程語言

本篇內容主要講解“使用golang編寫基于注解的靜態代碼增強器/生成器的方法教程”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“使用golang編寫基于注解的靜態代碼增強器/生成器的方法教程”吧

Spring

Spring的主要特性:
1. 控制反轉(Inversion of Control, IoC)
2. 面向容器
3. 面向切面(AspectOriented Programming, AOP)

源碼gitee地址:
https://gitee.com/ioly/learning.gooop

原文鏈接:
https://my.oschina.net/ioly

目標

  • 參考spring boot常用注解,使用golang編寫“基于注解的靜態代碼增強器/生成器”

子目標(Day 10)

  • 代碼掃描差不多了,接下來考慮如何增強

  • Q:子目標?

  • A:以最常用的@RestController注解為例,改造代碼實現ioc注入/aop鉤子,bean注冊,gin整合

  • Q:具體?

  • A:一種功能增強會涉及到一族相關注解,比如RestController通常涉及RequestMapping, GetMapping和PostMapping。而幾乎所有的Bean都會用到Autowired。

  • Q:如何實現,組織和擴展?

  • A:凡擴展必對應鏈式/表式結構。系統將定義增強器接口,以及多個增強器的實現。每種增強器識別一個核心注解(如RestController)及其相關注解(如GetMapping),并添加相關代碼到代碼模型中。

  • Q:誰來運行和調用這些增強器?

  • A:本來想著做成standlone app,現在看來,直接在項目中集成增強器的包,寫個xx_test.go并運行可能更方便。

  • Q:難點是什么?

  • A:毫無疑問,Autowired是關鍵。在什么范圍,如何匹配Implementation,循環依賴,以及合適的初始化。

  • Q:如何折衷?

  • A:答案幾乎總是簡化問題模型。

  • Q:如何開始?

  • A:第一步,是給所有代碼模型添加Clone()方法,為增強器提供材料。

domain/IClonable.go

克隆(深度拷貝)接口

package domain

type IClonable interface {
	Clone() interface{}
}

domain/StructInfo.go

所有代碼模型實現IClonable接口,這里以StructInfo為例。

func (me *StructInfo) Clone() interface{} {
	it := new(StructInfo)
	it.CodeFile = me.CodeFile
	it.LineNO = me.LineNO
	it.Name = me.Name

	it.Fields = make([]*FieldInfo, len(me.Fields))
	for i,v := range me.Fields {
		it.Fields[i] = v.Clone().(*FieldInfo)
		it.Fields[i].Struct = it
	}

	it.Methods = make([]*MethodInfo, len(me.Methods))
	for i,v := range me.Methods {
		it.Methods[i] = v.Clone().(*MethodInfo)
		it.Methods[i].Struct = it
	}

	it.Annotations = make([]*AnnotationInfo, len(me.Annotations))
	for i,v := range me.Annotations {
		it.Annotations[i] = v.Clone().(*AnnotationInfo)
	}

	return it
}

到此,相信大家對“使用golang編寫基于注解的靜態代碼增強器/生成器的方法教程”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

五莲县| 福泉市| 辉县市| 陇西县| 正宁县| 卢氏县| 蓬溪县| 锡林郭勒盟| 徐闻县| 昌黎县| 定兴县| 遂昌县| 进贤县| 苍南县| 凤冈县| 札达县| 普兰县| 岑溪市| 琼中| 商洛市| 会宁县| 宿迁市| 交城县| 西乌珠穆沁旗| 上杭县| 嘉兴市| 桃园县| 海口市| 永城市| 东乌珠穆沁旗| 尚志市| 麻江县| 五莲县| 商洛市| 天台县| 高雄县| 桦甸市| 安阳县| 丹巴县| 千阳县| 万荣县|