当前位置: 首页 > wzjs >正文

市场监管局的作用qq群怎么优化排名靠前

市场监管局的作用,qq群怎么优化排名靠前,网业安全防护如何关闭,自己做的网站怎样赚钱吗文章目录 背景Go 的 go:embed 功能介绍与打包 JAR 文件示例1. go:embed 基础介绍基本特性基本语法 2. 嵌入 JAR 文件示例项目结构代码实现 3. 高级用法:嵌入多个文件或目录4. 使用注意事项5. 实际应用场景6. 完整示例:运行嵌入的JAR 背景 想把自己的一个…

文章目录

  • 背景
  • Go 的 go:embed 功能介绍与打包 JAR 文件示例
    • 1. go:embed 基础介绍
      • 基本特性
      • 基本语法
    • 2. 嵌入 JAR 文件示例
      • 项目结构
      • 代码实现
    • 3. 高级用法:嵌入多个文件或目录
    • 4. 使用注意事项
    • 5. 实际应用场景
    • 6. 完整示例:运行嵌入的JAR

背景

想把自己的一个SpringBoot应用打包成可执行文件。看看Golang是如何做到的。

Go 的 go:embed 功能介绍与打包 JAR 文件示例

go:embed 是 Go 1.16 引入的一个强大功能,它允许在编译时将外部文件或目录嵌入到 Go 程序中。下面介绍如何使用 go:embed 来嵌入 JAR 文件。

1. go:embed 基础介绍

基本特性

  • 编译时嵌入文件内容
  • 支持嵌入单个文件、多个文件或整个目录
  • 支持三种嵌入类型:
    • string - 用于文本文件
    • []byte - 用于二进制文件
    • embed.FS - 用于文件系统(支持多个文件/目录)

基本语法

import "embed"//go:embed filename.txt
var fileContent string//go:embed image.png
var imageData []byte//go:embed templates/*
var templatesFS embed.FS

2. 嵌入 JAR 文件示例

假设你有一个需要嵌入的 app.jar 文件,以下是完整示例:

项目结构

project/
├── embedded/
│   └── app.jar    # 要嵌入的JAR文件
├── main.go
└── go.mod

代码实现

package mainimport ("embed""io""log""os""path/filepath"
)//go:embed embedded/app.jar
var jarFile []bytefunc main() {// 指定输出路径(可以是临时目录或特定位置)outputPath := filepath.Join(os.TempDir(), "app.jar")// 将嵌入的JAR写入文件系统err := os.WriteFile(outputPath, jarFile, 0755)if err != nil {log.Fatalf("Failed to write JAR file: %v", err)}log.Printf("JAR file extracted to: %s", outputPath)// 现在你可以使用这个JAR文件,比如通过exec.Command运行它// exec.Command("java", "-jar", outputPath)
}

3. 高级用法:嵌入多个文件或目录

如果你有多个 JAR 文件需要嵌入:

//go:embed embedded/*.jar
var jarFiles embed.FSfunc main() {// 列出所有嵌入的JAR文件entries, err := jarFiles.ReadDir("embedded")if err != nil {log.Fatal(err)}// 提取所有JAR文件for _, entry := range entries {if filepath.Ext(entry.Name()) == ".jar" {data, err := jarFiles.ReadFile("embedded/" + entry.Name())if err != nil {log.Printf("Failed to read %s: %v", entry.Name(), err)continue}outputPath := filepath.Join(os.TempDir(), entry.Name())err = os.WriteFile(outputPath, data, 0755)if err != nil {log.Printf("Failed to write %s: %v", entry.Name(), err)continue}log.Printf("Extracted %s to %s", entry.Name(), outputPath)}}
}

4. 使用注意事项

  1. 路径规则

    • go:embed 路径是相对于包含该指令的Go源文件的
    • 不能包含 ... 等路径组件
    • 不能匹配到父目录中的文件
  2. 文件大小限制

    • Go 1.16+ 对嵌入文件大小没有硬性限制
    • 但非常大的文件可能会增加编译时间和二进制大小
  3. 构建约束

    • 嵌入的文件必须在构建时可用
    • 如果文件不存在,构建会失败
  4. 安全考虑

    • 提取嵌入文件时要注意目标路径的权限
    • 考虑使用临时目录并在程序退出时清理

5. 实际应用场景

  1. 打包Java应用:将依赖的JAR文件嵌入Go程序,然后通过exec.Command调用Java运行
  2. 嵌入式数据库:如SQLite数据库文件
  3. Web服务器资源:HTML/CSS/JS等前端资源
  4. 配置文件:默认配置模板

6. 完整示例:运行嵌入的JAR

package mainimport ("embed""log""os""os/exec""path/filepath"
)//go:embed app.jar
var jarFile []bytefunc main() {// 创建临时文件tmpFile, err := os.CreateTemp("", "embedded-*.jar")if err != nil {log.Fatal(err)}defer os.Remove(tmpFile.Name()) // 程序退出时删除// 写入JAR内容if _, err := tmpFile.Write(jarFile); err != nil {log.Fatal(err)}if err := tmpFile.Close(); err != nil {log.Fatal(err)}// 执行Java命令cmd := exec.Command("java", "-jar", tmpFile.Name())cmd.Stdout = os.Stdoutcmd.Stderr = os.Stderrlog.Println("Starting Java application...")if err := cmd.Run(); err != nil {log.Fatalf("Java application failed: %v", err)}
}

通过这种方式,你可以将Java应用程序打包到Go二进制文件中,然后通过Go程序来分发和启动它。

http://www.dtcms.com/wzjs/192343.html

相关文章:

  • 做门户网站起什么域名好营销策略有哪些有效手段
  • 网站空间指的是什么网站创建流程
  • 贵阳企业自助建站今天的新闻 最新消息
  • 徽省建设干部学校网站软件培训机构
  • 欧美真人做免费网站重庆网站推广专家
  • 做外贸什么网站好seo搜索引擎优化就业指导
  • 做医疗信息网站的域名软文营销策划方案
  • 北京网首页太原百度推广排名优化
  • 网站建设 图标拉新app推广平台
  • 如何做wap网站推广赚佣金的平台
  • 网页设计新建站点青岛百度竞价
  • 根据网站软件做报告抖音seo排名优化公司
  • 做app和做网站区别全网营销系统1700元真实吗
  • 深圳做网站推荐哪家公司好长春网络推广优化
  • 灰色词seo推广抚州seo排名
  • 网站页面设计模板代码手机网站优化排名
  • 网站的主要栏目及功能杭州seo网站推广
  • 网站建设与动态网页竞价托管哪家公司好
  • 做cover用什么网站广告优化师工作内容
  • 免费模板网站下载网站设计平台
  • 一个人可做几次网站备案seo关键词排名优化手机
  • 网站建设服务领域网站排名优化价格
  • p2p网站开发多少钱免费手机优化大师下载安装
  • 批量做网站软件网站排行
  • 网站建设相关新闻劳动局免费培训项目
  • 有没有学做衣服的网站搜索引擎营销的简称
  • 贷款网站源码下载sem竞价托管代运营
  • 如何用wordpress建网站关于友情链接的作用有
  • 网站建设中 html免费seo整站优化技术培训
  • 网站怎么做吸引人免费收录网站