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

21 天前
 momowei

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

2962 次点击
所在节点    Go 编程语言
16 条回复
nekoneko
21 天前
不能, 没有.
java 也没有方法不让看源码.
momowei
21 天前
@nekoneko jar 没办法直接用记事本看源码把,只是很容易反编译很好还原而已
darkway
21 天前
可以把 go 文件打包成 zip ,然后后缀改成 jar
touchwithe
21 天前
编译成.lib 动态链接库
danbai
21 天前
编译成 lib 库或者 wasm
doraemonki
21 天前
理论上可以提供混淆后的源码,像这个库一样 https://github.com/unidoc/unipdf
kk2syc
21 天前
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
20 天前
dll 或者 so 呗,动态链接库,还能混淆下
ChunkitAu
20 天前
https://github.com/burrowers/garble
目前项目在使用该工具混淆代码。
LitterGopher
20 天前
1. 以動態庫的方式提供調用(.dll .a .so .dylib)
2. 以 RPC 的方式提供調用(本地服務或遠程服務皆可)
3. 代碼混淆
gongym
20 天前
你可以试试搜索 go plugin 模式,可以导出库然后动态引入调用
azraeljack
20 天前
go plugin 就行了,核心模块封装成 plugin 然后加载调用就行了。不过环境坑会有点多,比如 glibc 版本不一致可能会导致跑不起来之类的。建议弄到容器里跑。
visper
18 天前
jar 包不是直接 jd 反编译看源码么?
bli22ard
18 天前
java 为什么可以打 jar 包供其他程序调用,因为 Java 跨平台,你只要一个 jar 包,就能在其他所有平台使用。但是 go 不一样,编译产物是和平台完全对应的,所以,你不能为所有平台提供同一个 go 的编译产物,而要为所有平台都提供编译产物,然后就是链接阶段的动态链接还是静态链接了。
zhengfan2016
18 天前
@doraemonki 居然还有这种,这种要是国人写的 v2 和 issue 早被喷烂了吧
AkinoKaedeChan
18 天前
如果考虑跨平台就 WASM

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

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

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

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

© 2021 V2EX