go embed 是 Go 1.16 中引入的特性,它允许将文件嵌入到 Go 代码中,以便在运行时访问这些文件。这对于将静态资源(如 HTML、CSS、JavaScript 文件)直接嵌入到 Go 二进制文件中,以及简化文件分发和部署非常有用。下面是关于 go embed 的详细介绍:

使用方式:

go embed 支持将文件嵌入到代码中的两种方式:

  1. 嵌入单个文件:

    package main
    
    import (
    _ "embed"
    "fmt"
    ) //go:embed myfile.txt
    var content string func main() {
    fmt.Println(content)
    }
  2. 嵌入多个文件:

    package main
    
    import (
    _ "embed"
    "fmt"
    ) //go:embed file1.txt file2.txt
    var content string func main() {
    fmt.Println(content)
    }

使用步骤:

  1. 导入 _ "embed" 包,这样 embed 包就会被初始化。
  2. 在变量声明前使用 //go:embed 注释,指定要嵌入的文件。你可以指定单个文件,也可以指定多个文件,用空格分隔。

访问嵌入文件:

使用 embed 包嵌入的文件是一个 string 、 []byte 或 embed.FS 类型的变量,你可以直接在代码中访问它们。在运行时,这些变量会被初始化为嵌入文件的内容。

用途:

  • 将静态资源嵌入到 Go 二进制文件中,以便简化部署。
  • 将配置文件或其他数据文件嵌入到应用程序中,无需外部文件依赖。
  • 减少文件的分发和管理成本。

注意事项:

  • 嵌入的文件内容会在编译时打包到二进制文件中,因此可能会增加二进制文件的大小。
  • 嵌入的文件内容是只读的,无法在运行时修改。
  • 嵌入文件的大小应适度,避免过大导致二进制文件过大。
  • //go:embed 指令只能用于全局变量,不能用于函数内的局部变量。同时,它只能嵌入在 Go 源代码文件同一目录或子目录下的文件或目录。

总之,go embed 是一个强大的特性,使得在 Go 代码中嵌入文件变得更加方便和简单,特别是在需要将静态资源或配置文件包含在应用程序中时。


声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。

Author: mengbin

blog: mengbin

Github: mengbin92

cnblogs: 恋水无意


embed简介的更多相关文章

  1. 海量数据存储之Key-Value存储简介

    Key-value存储简介 具备高可靠性及可扩展性的海量数据存储对互联网公司来说是一个巨大的挑战,传统的数据库往往很难满足该需求,并且很多时候对于特定的系统绝大部分的检索都是基于主键的的查询,在这种情 ...

  2. HTML个人简介

    <!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...

  3. ETCD 简介 + 使用

    etcd简介 etcd是一个高可用的分布式键值(key-value)数据库.etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现. etcd是一个服务发现系统,具备以下的特点: 简单: ...

  4. SVG脚本编程简介

    本文主要介绍SVG的脚本编程,并分别给出放大.缩小,查询,鼠标事件等实例. 一. SVG简介 SVG,全称为Scalable Vector Graphics(可伸缩矢量图形).它是W3C制定的.用矢量 ...

  5. HTML简介及基本标记

    HTML简介 HTML是Hypertext Markup Language的英文缩写,即超文本标记语言 使用 HTML 语言可以: 控制页面和内容的外观 插入的链接检索联机信息 创建表单,收集用户的信 ...

  6. angular原理及模块简介

    Angular简介(大神可略过) Angular是一个强大的前端框架,其强大之处主要是可以把静态页面与动态数据绑定起来.平时我们看到的网页界面上面的数据都是固定,但如果我们要变化这些数据,例如我在一个 ...

  7. Otter入门简介

    一.Otter简介 1.1  otter是什么? otter 译意: 水獭,数据搬运工 语言: 纯java开发 定位: 基于数据库增量日志解析,准实时同步到本机房或异地机房的mysql/oracle数 ...

  8. 14-4 ADO.NET简介

    微软数据访问方式历史阶段 ①ODBC(Open Database Connectivity)是第一个使用SQL访问不同关系数据库的访问技术.使用ODBC应用程序能够通过单一的命令操作不同的数据库,而开 ...

  9. pybind11简介

    python调用C/C++有不少的方法,如boost.python, swig, ctypes, pybind11等,这些方法有繁有简,而pybind11的优点是对C++ 11支持很好,API比较简单 ...

  10. ASP.NET Core 1.1 简介

    ASP.NET Core 1.1 于2016年11月16日发布.这个版本包括许多伟大的新功能以及许多错误修复和一般的增强.这个版本包含了多个新的中间件组件.针对Windows的WebListener服 ...

随机推荐

  1. Redis实战解读-初识Redis&Redis基本数据类型

    Redis实战解读 一.初识Redis 1.什么是Redis ​ Redis是一个速度非常快的非关系型数据库(non-relational database),它可以存储键(key)与五种不同类型的值 ...

  2. 记录内网Docker启动Stable-Diffusion遇到的几个坑

    摘要:最近看到K8s启动stable-diffusion的文章,想着在自己开发环境复现一下.没想到在内网环境还遇到这么多问题,记录一下. 本文分享自华为云社区<内网Docker启动Stable- ...

  3. Windows与网络基础

    Windows 基础命令 一.目录和文件的应用操作 1.cd命令 cd /d d:\ //切换到d盘目录,因为改变了驱动器,所以要加上/d选项 cd c:\ //如果没有改变驱动器号,就不需要加/d选 ...

  4. 理论+实操,带你了解多沙箱容器运行时Kuasar

    摘要:华为云DTSE技术布道师张天阳结合沙箱容器发展历程,介绍华为云多沙箱容器运行时 Kuasar 项目优势,开启多沙箱容器运行时上手实践体验. 本文分享自华为云社区<理论+实操,带你了解多沙箱 ...

  5. 用go封装一下封禁功能

    用go封装一下封禁功能 本篇为用go设计开发一个自己的轻量级登录库/框架吧 - 秋玻 - 博客园 (cnblogs.com)的封禁业务篇,会讲讲封禁业务的实现,给库/框架增加新的功能. 源码:http ...

  6. 【Haxe】(一)VSCode 搭建 Haxe 开发环境

    前言 咱换工作啦! 新工作这边需要用到的开发语言是 Haxe,最近大概会写几篇笔记.Haxe 的介绍就不写了,打算记录点有用的学习内容,先从搭建开发环境开始吧! 当前适用版本: VSCode:Curr ...

  7. 手把手实践丨基于STM32+华为云设计的智慧烟感系统

    摘要:当前基于STM32和华为云,设计了一种智慧烟感系统,该系统可以检测烟雾,同时将检测到的数据上传到云端进行处理和分析. 本文分享自华为云社区<基于STM32+华为云设计的智慧烟感系统> ...

  8. Vue——计算属性、监听属性、Vue生命周期、组件介绍和使用、组件间通信、ref属性

    计算属性 // 1 计算属性是基于他们的依赖变量进行缓存的 // 2 计算属性只有在它的相关依赖变量发生改变时才会重新求值,否则不会变(函数只要页面变化,就会重新运算) // 3 计算属性就像pyth ...

  9. 疑难杂记:Chirp信号相关的参数解释

    图1 FMCW雷达信号参数 在德州仪器TI毫米波雷达中,开发板参数配置往往涉及如图1所示的信号参数. 宏观上看,信号参数包括\(ADC\)采样时间.脉冲重复周期(\(Chirp\)扫频周期)和帧时间( ...

  10. pyhton - parallel - programming - cookbook(THREAD)

    基于线程的并行 通常,一个应用有一个进程,分成多个独立的线程,并行运行.互相配合,执行不同类型的任务. 线程是独立的处理流程,可以和系统的其他线程并行或并发地执行.多线程可以共享数据和资源,利用所谓的 ...