Introduction
This lab aims to test your understanding of the embed
package in Golang. The embed
package allows programs to include arbitrary files and folders in the Go binary at build time.
This lab aims to test your understanding of the embed
package in Golang. The embed
package allows programs to include arbitrary files and folders in the Go binary at build time.
Your task is to modify the given code to embed files and folders into the Go binary and print their contents.
embed
package to embed files and folders.string
and []byte
types to store the contents of the embedded files.embed.FS
type to embed multiple files or folders with wildcards.## Use these commands to run the example.
## (Note: due to limitation on go playground,
## this example can only be run on your local machine.)
$ mkdir -p folder
$ echo "hello go" > folder/single_file.txt
$ echo "123" > folder/file1.hash
$ echo "456" > folder/file2.hash
$ go run embed-directive.go
hello go
hello go
123
456
There is the full code below:
// `//go:embed` is a [compiler
// directive](https://pkg.go.dev/cmd/compile#hdr-Compiler_Directives) that
// allows programs to include arbitrary files and folders in the Go binary at
// build time. Read more about the embed directive
// [here](https://pkg.go.dev/embed).
package main
// Import the `embed` package; if you don't use any exported
// identifiers from this package, you can do a blank import with `_ "embed"`.
import (
"embed"
)
// `embed` directives accept paths relative to the directory containing the
// Go source file. This directive embeds the contents of the file into the
// `string` variable immediately following it.
//
//go:embed folder/single_file.txt
var fileString string
// Or embed the contents of the file into a `[]byte`.
//
//go:embed folder/single_file.txt
var fileByte []byte
// We can also embed multiple files or even folders with wildcards. This uses
// a variable of the [embed.FS type](https://pkg.go.dev/embed#FS), which
// implements a simple virtual file system.
//
//go:embed folder/single_file.txt
//go:embed folder/*.hash
var folder embed.FS
func main() {
// Print out the contents of `single_file.txt`.
print(fileString)
print(string(fileByte))
// Retrieve some files from the embedded folder.
content1, _ := folder.ReadFile("folder/file1.hash")
print(string(content1))
content2, _ := folder.ReadFile("folder/file2.hash")
print(string(content2))
}
In this lab, you learned how to use the embed
package to embed files and folders into the Go binary at build time. You also learned how to use the string
and []byte
types to store the contents of the embedded files, and how to use the embed.FS
type to embed multiple files or folders with wildcards.