【实战】在Golang项目中,使用REPL技术理念,实现动态执行代码

前言

在日常开发工作业务场景中,你可能会遇到重复性的业务工作脚本功能维护。笔者分析了下,其在修改业务代码后,大致都会遇到如下问题:

  1. 部署较繁琐;
  2. 用户使用不便捷;

笔者推荐遇到类似这种业务场景,可以将 应用程序脚本代码 直接嵌入在云端,用户实际需要使用的时候进行加载到应用程序主体中,这样主体应用在得到应用程序脚本代码之后,就可以获得到最新的输入、输出结果。这样的应用方式其扩展性将会得到极大的增强。

本着可持续化、高便捷功能迭代、高聚合,笔者在遇到以上业务场景时,主要采用golang进行业务逻辑脚本代码封装,然后采用 gomacro 进行REPL,配合 wails (使用 Go 和 Web 技术)编写桌面应用项目,实现嵌入式脚本可视化客户端应用程序。

gomacro热加载代码示例

package main

import (
	`strings`

	"github.com/cosmos72/gomacro/fast"

	_ "my-project/core/gomacro-package-init" // inject `github.com/imroc/req/v3` package
)
// string code
const source = `

import (
	"fmt"
	"github.com/imroc/req/v3"
)

// http client get url data
func getData() string {
    client := req.C()
    // send http url request 
    response, err := client.R().Get("https://api.github.com/users/cosmos72")
    // get response data
    fmt.Println(len(response.Bytes()), err)
    return "finish"
}

`

func main() {
	src := strings.NewReader(source)
        // int gomacro
	interp := fast.New()
        // check code 
	if _, err := interp.EvalReader(src); err != nil {
		panic(err)
	}
	interp.ChangePackage("main", "main")
        // call func
	interp.Eval1("getData()")
}

嵌入式应用程序简略流程图

成品效果图

服务端管理商店中的应用脚本

客户端执行商店中的应用脚本

结语

通过REPL理念技术,可明确看出,它能大幅度的提升项目中”应用的便捷更新、业务拓展性“。其次动态编译应用的理念对于在客户端调试环境还是有待提升,目前大多数场景下笔者都是在开发环境调试无误才发布至服务端商店中。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇