GoLand编译Go代码提示权限拒绝错误求助
解决GoLand编译时出现"Access is denied"的错误提示
问题场景
使用GoLand编译Go代码时,弹出错误提示:
command-line-arguments: open C:\Users\Young\AppData\Local\Temp\go-build2051388383\b001\exe\a.out.exe: Access is denied.
涉及的代码如下:
package main import ( "fmt" "io" "net/http" "regexp" ) var ( reQQEmail = `(\d+)@qq.com` ) func GetEmail() { resp, err := http.Get("https://tieba.baidu.com/p/6051076813?red_tag=1573533731") HandleError(err, "http.Get url") defer resp.Body.Close() pageBytes, err := io.ReadAll(resp.Body) HandleError(err, "io.ReadAll") pageStr := string(pageBytes) // fmt.Println(pageStr) re := regexp.MustCompile(reQQEmail) results := re.FindAllStringSubmatch(pageStr, -1) for _, info := range results { fmt.Println("email:", info[0]) fmt.Println("qq:", info[1]) } } func HandleError(err error, msg string) { if err != nil { fmt.Println(msg, err) } } func main() { GetEmail() }
解决步骤
- 终止残留进程:打开任务管理器,搜索
a.out.exe或当前Go程序相关进程,全部结束后重新编译。大概率是之前的程序进程未彻底关闭,导致临时文件被占用。 - 检查临时目录权限:右键
C:\Users\Young\AppData\Local\Temp文件夹 → 属性 → 安全标签,确保当前用户(Young)拥有读取、写入权限,无权限则点击「编辑」添加对应权限后应用。 - 清理GoLand缓存:打开GoLand,点击顶部菜单「File」→「Invalidate Caches...」,勾选「Clear file system cache and local history」,点击「Invalidate and Restart」,重启IDE后再尝试编译。
- 手动指定输出路径:默认编译产物放在系统临时目录,可手动指定到自己有权限的文件夹。比如在GoLand运行配置里修改「Output directory」为自定义路径(如
D:\GoProjects\output),或用命令行编译:go build -o D:\GoProjects\output\myapp.exe - 排查杀毒软件拦截:部分杀毒软件会误判Go编译的临时文件为恶意程序,暂时关闭杀毒软件或将Go临时编译目录加入白名单后重试。
额外代码优化提示
你的HandleError函数仅打印错误但不终止程序,若http.Get失败,resp会是nil,后续defer resp.Body.Close()会触发空指针panic。可修改函数如下:
import "os" // 需要新增os包导入 func HandleError(err error, msg string) { if err != nil { fmt.Printf("%s: %v\n", msg, err) os.Exit(1) // 出错后直接终止程序,避免后续操作引发崩溃 } }
内容的提问来源于stack exchange,提问作者frozenyoung
相关产品推荐
相关产品推荐

