go version报command not found是PATH未包含Go的bin目录所致;需确认安装路径(如/usr/local/go/bin或C:\Go\bin),将该路径手动加入shell配置文件(macOS/Linux)或系统环境变量(Windows),再source或重启终端验证。

go version 报 command not found?先查 PATH 和安装路径
不是没装 Go,而是终端根本找不到 go 命令。Windows 上常见于安装时勾了“添加到 PATH”但没重启终端;macOS/Linux 更多是解压后没把 /usr/local/go/bin 或你自定义的 GOROOT/bin 加进 shell 配置文件。
验证方式很简单:which go(macOS/Linux)或 Get-Command go(PowerShell)没输出就说明 PATH 没生效。别信安装器的默认勾选——手动执行 source ~/.zshrc 或重启终端才真正加载。
顺手跑两行确认基础环境:
go version<br>go env GOROOT GOPATH
如果 GOROOT 是空的,大概率是安装包没解压对位置,或者 PATH 里写的路径和实际 go 二进制所在目录不一致。
立即学习“go语言免费学习笔记(深入)”;
连不上 Elasticsearch?90% 是客户端版本和 Transport 配置错了
用 olivere/elastic/v7 连 ES 8.x/9.x 必然失败:它不发 Content-Type: application/json,ES 8+ 直接返回 406 Not Acceptable 或静默空响应。新项目必须切到官方客户端:github.com/elastic/go-elasticsearch/v9。
初始化 client 时这三件事不能漏:
Go 配置库,使用 spf13/viper — 分层优先级(flag > env >file > KV > default),提供 BindPFlag/BindPFlags、SetEnvPrefix + SetEnvKeyReplace 等功能。
-
Addresses必须显式传,比如[]string{"https://es.example.com:9200"},漏掉会 panic - 启了 HTTPS 但证书不可信?加
Transport: &http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}} - 别开
Healthcheck: true——默认健康检查会在 ES 还没 ready 时卡住初始化,尤其 K8s 环境里;自己做重试更可控
超时也得设:Transport: &http.Transport{Timeout: 5 * time.Second},否则默认无限等待,goroutine 悬停。
Meilisearch 写入后搜不到?异步写入 + 字段未设为 searchable 是主因
meilisearch-go 是纯客户端,不带服务端。第一步永远是确认 Meilisearch 实例真在跑:curl http://localhost:7700/health 返回 {"status":"available"} 才算成功。
写入文档后搜不到,常见原因有两个:
-
AddDocuments()只返回Task,不是写入完成信号。必须调index.WaitForTask(task.TaskUID)等落盘,否则后续搜索查不到 - 默认只对
id字段建索引,title、content这类字段要手动设为可搜索:index.UpdateSearchableAttributes([]string{"title", "content"})
ID 字段类型也得小心:float64 或 nil 会导致整个 batch 失败,且错误提示极不明确。
中文搜不到?分词器、字段类型、refresh 三处必须对齐
Kibana 能搜出来、Go 里为空,基本就是这三处断了:
- ES 侧:字段 mapping 类型要是
"type": "text",不是keyword;用了 IK 或 pinyin 插件就得确保插件已装、分词器名写对 - Meilisearch 侧:v1.8+ 默认启用 jieba,但旧版或自定义 build 要检查
GET /indexes/{name}/settings返回里的searchableAttributes和rankingRules - 无论哪个引擎,写入后都得等
refresh——ES 默认 1 秒延迟,Meilisearch 默认实时,但批量写入后仍建议等WaitForTask
最常被忽略的是:ES 的 Index 字段不能填 "*" 或空字符串,生产环境会被拒;Meilisearch 的 masterKey 必须和启动参数 --master-key=xxx 完全一致,大小写敏感。

















