If you’ve ever run go mod tidy and been greeted by a wall of red text ending in:
go: todo-services imports
github.com/99designs/gqlgen: GOPROXY list is not the empty string, but contains no entries
Enter fullscreen mode Exit fullscreen mode
…you’re not alone. This error looks scary because it repeats for every single import in your project, but the actual fix takes about 30 seconds. Here’s what’s going on and how to solve it.
What This Error Actually Means
Go resolves modules through GOPROXY, an environment variable that tells the toolchain where to fetch dependencies from. The error message is oddly specific:
“GOPROXY list is not the empty string, but contains no entries”
This means GOPROXY is set to something, but once Go parses it, there are zero usable proxy URLs in it. Common causes:
- A stray comma or pipe with no actual URL (
GOPROXY=,orGOPROXY=|) -
GOPROXY=off, which explicitly disables all proxying - A shell-level override with a blank or whitespace value that shadows your real Go config
- A corporate/custom proxy URL that no longer resolves
This is especially common on Windows with Git Bash (MINGW64), where environment variables inherited from Windows user/system settings can silently override what Go has configured in its own env file.
Step-by-Step Fix
1. Check for a shell-level override
Environment variables set in your current shell session take priority over Go’s own config file. Check what’s actually there:
echo "GOPROXY=[$GOPROXY]"
Enter fullscreen mode Exit fullscreen mode
If this prints GOPROXY=[], GOPROXY=[ ], or something malformed, that’s your problem — the shell is passing Go a broken value.
2. Clear the session override
unset GOPROXY
Enter fullscreen mode Exit fullscreen mode
This drops the bad value for the current session and lets Go fall back to its own configuration.
3. Persist a valid proxy in Go’s config
This writes directly to Go’s env file (%USERPROFILE%\AppData\Roaming\go\env on Windows, ~/.config/go/env on Linux/macOS):
go env -w GOPROXY=https://proxy.golang.org,direct
Enter fullscreen mode Exit fullscreen mode
The ,direct fallback tells Go to bypass the proxy and fetch directly from source control if a module isn’t available there — a good safety net.
If you’re behind a corporate network or VPN, swap in your internal proxy instead:
go env -w GOPROXY=https://your-company-proxy.example.com,direct
Enter fullscreen mode Exit fullscreen mode
4. Sanity-check related settings
go env GOPROXY GOFLAGS GOSUMDB
Enter fullscreen mode Exit fullscreen mode
Expected healthy values:
Variable Expected valueGOPROXY
https://proxy.golang.org,direct (or your internal proxy + ,direct)
GOFLAGS
Empty, unless you intentionally use flags like -mod=mod
GOSUMDB
sum.golang.org (default), unless disabled for a reason
5. Clear Go’s caches if the problem persists
Sometimes a bad proxy state gets baked into cached build artifacts or module downloads. If steps 1–4 didn’t fully resolve things, nuke the caches:
go clean -cache -testcache -modcache
Enter fullscreen mode Exit fullscreen mode
Flag Clears-cache
Compiled build cache
-testcache
Cached test results
-modcache
Downloaded modules ($GOPATH/pkg/mod)
This forces a full re-download of every dependency on your next build, using your now-corrected proxy settings.
6. Retry
go mod tidy
Enter fullscreen mode Exit fullscreen mode
At this point, all those GOPROXY list is not the empty string... lines should be gone, replaced by normal module resolution output for todo-services.
Windows/MINGW64 Gotcha
If GOPROXY keeps reverting to a bad value in new terminal sessions, the override probably lives in Windows System Properties → Environment Variables, not just in go env. Go’s own persisted config won’t help if Windows keeps re-injecting a bad value into every new shell. Check it directly:
cat "$USERPROFILE/AppData/Roaming/go/env"
Enter fullscreen mode Exit fullscreen mode
Quick Reference Checklist
-
echo "GOPROXY=[$GOPROXY]"— no stray/invalid shell override -
unset GOPROXY— if a bad session override exists -
go env -w GOPROXY=https://proxy.golang.org,direct— sets a valid persistent proxy -
go env GOPROXY GOFLAGS GOSUMDB— confirms sane values -
go clean -cache -testcache -modcache— if issues persist -
go mod tidy— succeeds after the above
Command Cheat Sheet
go version # Confirm installed Go version
go env # Print all Go environment settings
go env GOPROXY # Print a specific setting
go env -w KEY=VALUE # Persist a setting to Go's env file
go env -u KEY # Unset a persisted setting (revert to default)
go mod tidy # Sync go.mod/go.sum with imports
go clean -cache -testcache -modcache # Clear build, test, and module caches
Enter fullscreen mode Exit fullscreen mode
If this saved you a headache, drop a — and if you’ve hit a different flavor of this error, I’d love to hear about it in the comments.
답글 남기기