-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Description
We have a use case for serving example go projects via go:embed
. This is particularly important as alternatives to go:embed
have less maintenance now that they are obviated. The problems is that the file go.mod
is special cased and prevents serving a directory that contains it.
@opennota did research here and found this behavior to be intentional, notable "stopping at module boundaries" #41191 (comment)
When serving static assets, module boundaries may not be important and in fact be a surprising limitation, as surprising as files outside the directory or via symbolic links might be. Right now, the latter constraints like symbolic links are documented, but go.mod, and why it doesn't work is not entirely obvious.
Ideally, there could be a way to allow go projects to serve go projects as static assets via go:embed
. Until then, it would be handy to change the documentation to note this surprising constraint explicitly, as it would save folks time and head scratching.
Ex a line like this "Matches for a directory containing "go.mod" is invalid and fail to build".
What version of Go are you using (go version
)?
1.16.2
Does this issue reproduce with the latest release?
Yes
What operating system and processor architecture are you using (go env
)?
amd64 darwin
What did you do?
//go:embed /path/to/goproject/*
var exfs embed.FS
What did you expect to see?
I expected to have go build
not fail
What did you see instead?
An error like "pattern X: cannot embed directory Y in different module"