go 有什么好的类似 Java jar 包方案

2025 年 8 月 22 日
 momowei

就是想把项目里部分核心代码封装起来,不能直接查看源码,然后把项目源码交付给别人,别人可以类似引用 java jar 包方式本地编译开发和打包。 并不需要很高级别的代码保护,只是想不能直接简单查看部分源码

4178 次点击
所在节点    Go 编程语言
16 条回复
nekoneko
2025 年 8 月 22 日
不能, 没有.
java 也没有方法不让看源码.
momowei
2025 年 8 月 22 日
@nekoneko jar 没办法直接用记事本看源码把,只是很容易反编译很好还原而已
darkway
2025 年 8 月 22 日
可以把 go 文件打包成 zip ,然后后缀改成 jar
touchwithe
2025 年 8 月 22 日
编译成.lib 动态链接库
danbai
2025 年 8 月 22 日
编译成 lib 库或者 wasm
doraemonki
2025 年 8 月 22 日
理论上可以提供混淆后的源码,像这个库一样 https://github.com/unidoc/unipdf
v1
2025 年 8 月 22 日
jar 在 go 里面对应的是 package (.a 后缀) 静态链接

```
// print.go
package staticpkg

import "fmt"

func Hello() {
fmt.Println("hello")
}

//main.go
package main

import (
"staticpkg"
)

func main() {
staticpkg.Hello()
}
```

使用 tool 的 compile 命令编译
go tool compile -o print.a print.go

使用 tool 的 link 命令生成可执行文件
go tool link -o main.exe -L [print.a_dir] main.go

会生成一个 main.exe 程序,直接运行会输出 hello

如果直接 go run main.go 此时没有任何输出
seers
2025 年 8 月 23 日
dll 或者 so 呗,动态链接库,还能混淆下
ChunkitAu
2025 年 8 月 23 日
https://github.com/burrowers/garble
目前项目在使用该工具混淆代码。
LitterGopher
2025 年 8 月 23 日
1. 以動態庫的方式提供調用(.dll .a .so .dylib)
2. 以 RPC 的方式提供調用(本地服務或遠程服務皆可)
3. 代碼混淆
gongym
2025 年 8 月 23 日
你可以试试搜索 go plugin 模式,可以导出库然后动态引入调用
azraeljack
2025 年 8 月 23 日
go plugin 就行了,核心模块封装成 plugin 然后加载调用就行了。不过环境坑会有点多,比如 glibc 版本不一致可能会导致跑不起来之类的。建议弄到容器里跑。
visper
2025 年 8 月 25 日
jar 包不是直接 jd 反编译看源码么?
bli22ard
2025 年 8 月 25 日
java 为什么可以打 jar 包供其他程序调用,因为 Java 跨平台,你只要一个 jar 包,就能在其他所有平台使用。但是 go 不一样,编译产物是和平台完全对应的,所以,你不能为所有平台提供同一个 go 的编译产物,而要为所有平台都提供编译产物,然后就是链接阶段的动态链接还是静态链接了。
zhengfan2016
2025 年 8 月 25 日
@doraemonki 居然还有这种,这种要是国人写的 v2 和 issue 早被喷烂了吧
AkinoKaedeChan
2025 年 8 月 25 日
如果考虑跨平台就 WASM

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1154297

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX