侧边栏壁纸
博主头像
微流 - 这里记录值得分享的内容

行动起来,活在当下

  • 累计撰写 16 篇文章
  • 累计创建 9 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录
Go

Go:探索embed库

引言

在现代软件开发过程中,经常需要将一些静态文件(如HTML页面、JavaScript脚本、CSS样式表、图片等)嵌入到二进制可执行文件中。这样做不仅可以让应用更加轻便,而且可以简化部署流程,避免额外的文件管理复杂性。在Go语言的世界里,从1.16版本开始引入了一个非常实用的功能——embed包,它使得开发者能够轻松地将静态资源嵌入到Go程序中,并且能够在运行时访问这些资源。本文将介绍如何使用Go的embed功能来管理静态文件。

Go的embed特性简介

Go的embed功能允许我们在编译时将文件或整个目录树嵌入到可执行文件中。这对于构建微服务或者独立的应用程序特别有用,因为这意味着所有必需的资源都可以打包在一起,而无需依赖外部文件系统。

基本用法

嵌入为string

package main
​
import (
    _ "embed"
    "fmt"
)
​
//go:embed version.txt
var version string
​
func main() {
    fmt.Printf("version %q\n", version)
}

嵌入为[]byte

package main
import (
    _ "embed"
    "fmt"
)
​
//go:embed version.txt
var versionByte []byte
​
func main() {
    fmt.Printf("version %q\n", string(versionByte))
}

同一个文件嵌入为多个变量

//go:embed hello.txt
var s string
//go:embed hello.txt
var s2 string
func main() {
  fmt.Println(s)
  fmt.Println(s2)
}

嵌入为embed.FS

//go:embed hello.txt
var f embed.FS
func main() {
  data, _ := f.ReadFile("hello.txt")
  fmt.Println(string(data))
}

嵌入多个文件

//go:embed hello.txt
//go:embed hello2.txt
var f embed.FS
func main() {
  data, _ := f.ReadFile("hello.txt")
  fmt.Println(string(data))
  data, _ = f.ReadFile("hello2.txt")
  fmt.Println(string(data))
}

嵌入子文件夹下的文件

//go:embed p/hello.txt p/hello2.txt
var f embed.FS
func main() {
  data, _ := f.ReadFile("p/hello.txt")
  fmt.Println(string(data))
  data, _ = f.ReadFile("p/hello2.txt")
  fmt.Println(string(data))
}

匹配模式

//go:embed p/*
var f embed.FS
func main() {
  data, _ := f.ReadFile("p/.hello.txt")
  fmt.Println(string(data))
  data, _ = f.ReadFile("p/q/.hi.txt") // 没有嵌入 p/q/.hi.txt
  fmt.Println(string(data))
}

结语

使用Go的embed功能可以极大地简化应用程序的打包和部署过程,使得开发者可以更专注于业务逻辑而不是文件管理。希望这篇文章能帮助你在自己的项目中更好地利用这一特性。当然,embed功能还有更多高级用法等待着你去发掘!

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区