Home > Backend Development > Golang > How Can I Embed Static Files into Go Binaries Using `go:embed` and `go generate`?

How Can I Embed Static Files into Go Binaries Using `go:embed` and `go generate`?

DDD
Release: 2024-12-25 10:21:17
Original
808 people have browsed it

How Can I Embed Static Files into Go Binaries Using `go:embed` and `go generate`?

Embedding Static Files into Go Binaries

Embedding static files into Go binaries ensures that all necessary files are bundled within the executable, eliminating the need for external file management. This can be achieved through the go:embed directive or the go generate technique.

Using go:embed Directive (Go 1.16 )

Starting with Go 1.16, the go:embed directive can be used to embed files directly into the binary:

//go:embed hello.txt
var s string
Copy after login

This embeds the contents of hello.txt into the string variable s.

Using go generate

For older versions of Go, you can embed files using go generate in conjunction with a script. Here's an example:

File Structure:

  • main.go
  • scripts/includetxt.go (embedding script)
  • a.txt
  • b.txt

main.go:

//go:generate go run scripts/includetxt.go
package main

import "fmt"

func main() {
    fmt.Println(a)
    fmt.Println(b)
}
Copy after login

includetxt.go:

package main

import (
    "io/ioutil"
    "os"
    "strings"
)

func main() {
    // Create the output file
    out, _ := os.Create("textfiles.go")
    out.Write([]byte("package main \n\nconst (\n"))

    // Iterate over .txt files in the current directory
    fs, _ := ioutil.ReadDir(".")
    for _, f := range fs {
        if strings.HasSuffix(f.Name(), ".txt") {
            // Write the embedded file contents to the output file
            out.Write([]byte(strings.TrimSuffix(f.Name(), ".txt") + ` = "`))
            f, _ := os.Open(f.Name())
            io.Copy(out, f)
            out.Write([]byte("`\n"))
        }
    }
    // Close the output file
    out.Write([]byte(")\n"))
}
Copy after login

To embed the files:

$ go generate
$ go build -o main
Copy after login

textfiles.go (Generated):

package main 

const (
a = `hello`
b = `world`
)
Copy after login

This embeds the contents of a.txt and b.txt into the binary as string constants, allowing them to be accessed within main.go as a and b, respectively.

The above is the detailed content of How Can I Embed Static Files into Go Binaries Using `go:embed` and `go generate`?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template