goland 默认不删行尾空格,需手动启用“strip trailing spaces on save”选项(路径:settings → editor → general),仅处理ascii空格和制表符,不支持全角空格、零宽字符等。

GoLand 默认不删行尾空格,必须手动开启 Strip trailing spaces on Save 才能在保存时自动清理——它只处理 ASCII 空格和制表符,对全角空格、零宽字符、换行符完全无效。
怎么开「保存时删行尾空格」
路径是 Settings → Editor → General → Strip trailing spaces on Save,下拉菜单有三个选项:
-
All:每次保存都扫全文件,适合新项目;但老项目 Git diff 会爆一堆空格变更 -
Modified lines only:只清理你改过的那些行,团队协作更安全 -
None:彻底关闭,哪怕手动右键也没反应
注意:这个开关和 Go 的格式化(Ctrl+Alt+L)完全无关,开了也不影响 go fmt 行为。
为什么开了还是没删?常见拦截点
不是功能坏了,而是被更高优先级规则压住了:
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 文件是只读的(比如被 Git LFS 锁定、权限设为
read-only),GoLand 直接跳过清理 - 当前文件语言 ID 识别错误(右下角显示
Plain Text而不是Go),语言专属设置没加载 - 项目根目录存在
.editorconfig,且写了trim_trailing_whitespace = false—— 它会强制覆盖 IDE 设置 - 你在
Settings → Editor → Code Style → Go里关了Enable formatter,但这不影响尾随空格清理;真正影响的是上面那个Strip trailing spaces on Save开关本身是否启用
想临时清理当前文件,不依赖保存动作
右键编辑器空白处 → Strip Trailing Spaces,立刻执行一次,不触发 Git 变更、不依赖任何配置项。适合代码审查前快速“擦边”。
这个命令和 Settings → Editor → General → Strip trailing spaces on Save 是同一套逻辑,只是触发时机不同:一个手动点,一个自动存。
它不干的事,比它干的事更重要
Strip trailing spaces on Save 只做一件事:删每行末尾的 ' ' 和 '\t'。其他一律不管:
- ❌ 不删纯空行(
\n\n连续两行,中间那行还在) - ❌ 不碰行首或行中空格(比如
func main()中间两个空格不会动) - ❌ 不处理全角空格(
\u3000)、零宽空格(\u200B)、换行符(\r\n) - ❌ 不压缩空白行,也不保证文件末尾有换行符(
ensure newline at eof是另一个独立开关)
如果你发现某行末尾的空格“删不干净”,先检查是不是全角或零宽字符——这种问题得靠正则替换或插件,GoLand 原生选项无解。










