Starting in Go version 1.16+, Go supports use of //go:embed
which is a directive to embed files and folders into
the application binary by the compiler.
|
|
Since Go does not have preprocessor or macros like C type of languages,
pragmas/directives are implemented by the compiler as comments // .
Using //go:embed tells the compiler to include arbitrary files/folders in binary.
|

package main
|
If you are not using any exported identifiers from embed package directly,
you can add an underscore _ before the package name, ask Go to import embed
without directly using it, like this: _ "embed" . In this example, we remove the
underscore as we need to use the embed.FS type from the package.
|
import (
"embed"
)
|
Since one file is defined after the directive, the compiler will only include
this single file, followed by variable single_file_string to access as string type.
|
//go:embed embed-directive.sh
var single_file_string string
|
Here is a similar example but include single file as []byte .
Note that //go:embed can only be used in package level,
define it in any function will result in error.
|
//go:embed embed-directive.sh
var single_file_byte []byte
|
We can also embed multiple files or even folders with wildcard.
Since Go resolves these files and folders during compile time, we have to use the files in
current working directory as examples. In practice, you can embed files with "//go:embed /path/to/folder"
or with another example "//go:embed /path/to/folder/*" . You can add multiple //go:embed before defining a variable.
|
//go:embed *.hash
//go:embed embed-directive.sh
var folder_FS embed.FS
|
|
func main() {
|
Print out the content of embed-directive.sh as string .
|
println(single_file_string)
|
Print out the content of embed-directive.sh as []byte .
|
println(string(single_file_byte))
|
Print out the content of embed-directive.hash by reading the file from folder_FS first,
then print out the content.
|
hash_file := "embed-directive.hash"
hash_content, _ := folder_FS.ReadFile(hash_file)
println(string(hash_content))
|
|
}
|