go编译运行遇到的一些问题

Go编译运行时的一些坑

一.Golang编译运行缓慢的解决方法

原因:

在最近的Windows11更新中,微软给用户更新了一个类似于杀毒软件的服务进程PCManager Serivice Store,该进程会对于go代码的编译和运行进行强制检查,消耗大量的cpu和运存时间,导致go语言代码运行效率底下。对此,只需要在服务进程中将其停止运行即可。

罪魁祸首就是下图这个微软电脑管家

image-20250921094935068

解决方法:

多的不说,直接删除,本人9.21亲测有效

以管理员身份运行powershell,运行以下脚本,一键复制粘贴解决

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# ===============================
# 强制删除 Microsoft PC Manager
# ===============================

Write-Host "=== 停止并删除 PC Manager 服务 ===" -ForegroundColor Cyan
$services = Get-Service | Where-Object { $_.Name -like "*PCMgr*" -or $_.DisplayName -like "*PC Manager*" }
foreach ($svc in $services) {
try {
Stop-Service -Name $svc.Name -Force -ErrorAction SilentlyContinue
sc.exe delete $svc.Name | Out-Null
Write-Host "已删除服务: $($svc.Name)" -ForegroundColor Green
} catch {
Write-Host "服务处理失败: $($svc.Name)" -ForegroundColor Yellow
}
}

Write-Host "=== 卸载 UWP 应用 ===" -ForegroundColor Cyan
Get-AppxPackage *MicrosoftPCManager* -AllUsers | Remove-AppxPackage -AllUsers -ErrorAction SilentlyContinue
Get-AppxProvisionedPackage -Online | Where-Object {$_.DisplayName -like "*MicrosoftPCManager*"} | Remove-AppxProvisionedPackage -Online -ErrorAction SilentlyContinue

Write-Host "=== 删除残留文件夹 ===" -ForegroundColor Cyan
$paths = @(
"C:\Program Files\WindowsApps\Microsoft.MicrosoftPCManager_*",
"$env:LOCALAPPDATA\Packages\Microsoft.MicrosoftPCManager_*"
)
foreach ($p in $paths) {
try {
Get-ChildItem $p -Force -ErrorAction SilentlyContinue | ForEach-Object {
Remove-Item $_.FullName -Recurse -Force -ErrorAction SilentlyContinue
Write-Host "已删除: $($_.FullName)" -ForegroundColor Green
}
} catch {
Write-Host "删除失败: $p" -ForegroundColor Yellow
}
}

Write-Host "=== 禁用 Store 自动更新(防止重装) ===" -ForegroundColor Cyan
reg add "HKLM\SOFTWARE\Policies\Microsoft\WindowsStore" /v AutoDownload /t REG_DWORD /d 2 /f | Out-Null

Write-Host "`n✅ PC Manager 已彻底删除,并阻止 Store 自动重装。" -ForegroundColor Green

二.项目在命令行下可以正常编译和运行,但IDE(例如GoLand)却显示有错误提示。

案例图片:

image-20250921120535267

image-20250921120638848

这通常不是你的代码逻辑问题,而是开发环境的模块、路径或配置问题。IDE无法正确识别和索引你项目中的模块和包,因此它认为那些引用是“未解析”的。

问题原因分析

  1. 模块(Module)问题(最可能的原因)
    • 你的项目很可能使用了Go Modules进行依赖管理(根目录下有 go.mod文件)。
    • GoLand可能没有正确识别或启用Go Modules功能,或者其工作目录(Working Directory)和GOPATH的设置与命令行环境不一致。
    • 错误信息中的 无法解析 目录 'bookstore_manager'无法解析 文件 'config'强烈暗示IDE在import语句寻找这些包时失败了。
  2. GOROOT / GOPATH 配置问题
    • 你的命令行可能使用的是新版本的Go(默认开启GO111MODULE=on),而GoLand中的配置可能还指向一个旧的GOROOT或GOPATH,导致索引方式不同。
  3. 工作目录和项目根目录不一致
    • 你在命令行中运行的路径是 D:\goProject\src\item\bookstore\bookstore_go,而GoLand中打开的文件路径是 D:\goProject\src\item\book。这可能是两个不同的项目,或者目录结构发生了变化,导致IDE的索引基础就错了。

解决方案

请按照以下步骤排查和修复,大概率能解决问题:

  1. 确保打开正确的项目根目录
    • 在GoLand中,请确保你打开(Open)的是整个项目的根目录(即包含 go.mod文件的目录,从你的命令来看,应该是 D:\goProject\src\item\bookstore\bookstore_go)。
    • 不要单独打开一个子目录(比如 D:\goProject\src\item\book),这会让IDE无法正确理解项目的模块结构。这很可能是你问题的直接原因。
  2. 检查并启用Go Modules集成
    • 打开GoLand的设置(Settings/Preferences)。
    • 进入 Go -> Go Modules
    • 确保 Enable Go Modules integration选项是勾选状态。
    • 检查 ProxyGOPROXY设置,通常保持默认或设置为 https://goproxy.cn,direct(国内常用代理)即可。
  3. 重新索引和清除缓存
    • 在GoLand中,点击菜单栏 File -> Invalidate Caches...
    • 选择 Invalidate and Restart。这会清除IDE的旧索引并重新建立,对于解决这类“未解析的引用”问题非常有效。
  4. 检查Go环境配置
    • 在设置中,进入 Go -> GOROOT,确保这里选择的Go SDK版本和你命令行中使用的 go version一致。
    • 进入 Go -> GOPATH,检查“Project GOPATH”是否设置正确。对于使用Modules的项目,GOPATH的作用已经大大减弱,但确保其不冲突还是有必要的。
  5. 在IDE中运行一下
    • 配置好之后,尝试直接在GoLand中点击运行你的 main函数。如果IDE能成功运行,说明环境已经配置正确。

总结

简单来说,你的代码本身没有问题(因为go run成功了),问题出在IDE没有正确配置以匹配你的项目结构和工作环境

核心操作建议:

  1. 用GoLand打开正确的项目根目录bookstore_go)。
  2. 启用Go Modules集成
  3. **执行 Invalidate and Restart**。

完成这几步后,那些红色的错误提示应该就会消失,IDE的代码补全和跳转功能也能正常工作了。

[up主专用,视频内嵌代码贴在这]