91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Golang怎么用AST實現AOP功能

發布時間:2023-04-11 15:31:05 來源:億速云 閱讀:138 作者:iii 欄目:開發技術

這篇文章主要講解了“Golang怎么用AST實現AOP功能”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Golang怎么用AST實現AOP功能”吧!

示例代碼

package main

import (
	"go/ast"
	"go/parser"
	"go/printer"
	"go/token"
	"log"
	"os"
)

func main() {
	src := `package main

type MyStruct struct {
	Field1 int
	Field2 string
}

func (m *MyStruct) Method1() {
	println(m.Field1)
}

func (m *MyStruct) Method2() {
	println(m.Field2)
}
`
	fset := token.NewFileSet()
	f, err := parser.ParseFile(fset, "", src, 0)
	if err != nil {
		log.Fatal(err)
	}

	ast.Inspect(f, func(n ast.Node) bool {
		switch x := n.(type) {
		case *ast.FuncDecl:
			if x.Recv != nil && len(x.Recv.List) == 1 && x.Recv.List[0].Names[0].Name == "m" && x.Recv.List[0].Type.(*ast.StarExpr).X.(*ast.Ident).Name == "MyStruct" {

				logStmt := &ast.ExprStmt{
					X: &ast.CallExpr{
						Fun: &ast.SelectorExpr{
							X:   ast.NewIdent("log"),
							Sel: ast.NewIdent("Println"),
						},
						Args: []ast.Expr{&ast.BasicLit{
							ValuePos: x.Pos(),
							Kind:     token.STRING,
							Value:    "\"Entering " + x.Name.Name + "\"",
						}},
					},
				}

				x.Body.List = append([]ast.Stmt{logStmt}, x.Body.List...)
				return false
			}

		}
		return true
	})

	printer.Fprint(os.Stdout, fset, f)
}


//----------------輸出
package main

type MyStruct struct {
	Field1	int
	Field2	string
}

func (m *MyStruct) Method1() {
	log.Println("Entering Method1")
	println(m.Field1)
}

func (m *MyStruct) Method2() {
	log.Println("Entering Method2")
	println(m.Field2)
}

感謝各位的閱讀,以上就是“Golang怎么用AST實現AOP功能”的內容了,經過本文的學習后,相信大家對Golang怎么用AST實現AOP功能這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

元阳县| 从江县| 舞阳县| 西贡区| 安新县| 唐海县| 张掖市| 金溪县| 阜宁县| 永兴县| 营口市| 瑞昌市| 木里| 公主岭市| 若尔盖县| 翼城县| 辽源市| 新野县| 南川市| 贵南县| 阿克| 剑川县| 老河口市| 宁阳县| 双鸭山市| 五原县| 克拉玛依市| 应城市| 浦东新区| 辽源市| 玛多县| 大埔县| 平遥县| 天柱县| 阿拉善右旗| 德安县| 中超| 金山区| 兴国县| 普兰县| 墨江|