Sửa lỗi 'gopls client: couldn't create connection to server' trong VS Code

intermediate💻 VS Code2026-06-04| Visual Studio Code với Go Extension, Go (Golang) 1.18+, Windows/macOS/Linux

Error Message

gopls client: couldn't create connection to server. Reason: Error: connect ECONNREFUSED 127.0.0.1:xxxxx
#golang#gopls#language-server#lsp#go-extension

Thông báo lỗiThật là bực bội khi bắt đầu một buổi lập trình như thế này. Bạn mở VS Code, nhưng tính năng tự động hoàn thành (autocompletion) biến mất và các kiểu dữ liệu không được highlight. Thay vì những gợi ý hữu ích, bạn nhận được một thông báo phiền phức ở góc dưới bên phải. Khi kiểm tra tab Output của Go, bạn sẽ thấy dòng này:

gopls client: couldn't create connection to server. Reason: Error: connect ECONNREFUSED 127.0.0.1:xxxxx

Nói một cách đơn giản, extension Go đã cố gắng kết nối với language server chạy ngầm (gopls) qua một cổng nội bộ (local port), nhưng hệ thống của bạn đã từ chối. Điều này thường có nghĩa là server đã bị treo, chưa được khởi động hoặc đang lắng nghe trên một kênh hoàn toàn sai.

Các nguyên nhân phổ biếnHầu hết mọi lúc, sự cố này xảy ra vì một trong bốn lý do sau:

  • Tiến trình "ma" (Zombie Processes): Một phiên bản cũ của gopls bị kẹt trong bộ nhớ, chiếm dụng cổng và chặn các kết nối mới.- Công cụ lỗi thời: File thực thi gopls của bạn quá cũ so với phiên bản Go hiện tại (ví dụ: dùng Go 1.22 với phiên bản gopls từ năm 2022).- Chế độ TCP vô tình bị bật: Một cài đặt cấu hình đang bắt VS Code tìm kiếm kết nối mạng trong khi lẽ ra nó nên sử dụng local pipe.- Nhầm lẫn đường dẫn: VS Code đang tìm kiếm file thực thi go hoặc gopls trong một thư mục không tồn tại hoặc không có đủ quyền truy cập.## Cách 1: Cập nhật công cụ thủ côngTrong khoảng 90% trường hợp, việc cài đặt lại sẽ khắc phục được lỗi. Đừng đợi thông báo tự động xuất hiện. Hãy chủ động thực hiện cập nhật.
  • Mở Command Palette bằng Ctrl+Shift+P (hoặc Cmd+Shift+P trên Mac).- Nhập Go: Install/Update Tools và nhấn Enter.- Chọn gopls từ danh sách và nhấn OK.Theo dõi sát sao log cài đặt. Nếu quá trình thất bại với lỗi "permission denied", hãy kiểm tra xem thư mục GOPATH/bin của bạn có đang ở chế độ chỉ đọc (read-only) hay không.

Cách 2: Đặt lại chế độ kết nốiLỗi ECONNREFUSED 127.0.0.1 thường ngụ ý rằng VS Code nghĩ gopls đang chạy như một dịch vụ từ xa (remote service). Trừ khi bạn đang thực hiện gỡ lỗi mạng chuyên sâu, đây có khả năng là một sai sót.

Hãy kiểm tra file settings.json của bạn. Tìm các dòng sau và xóa chúng nếu không thực sự cần thiết:

"go.languageServerFlags": [
  "-mode=tcp",
  "-listen=127.0.0.1:xxxxx"
]

Khi các cờ này xuất hiện, VS Code sẽ ngừng tự động khởi chạy server cho bạn. Nó mong muốn bạn phải khởi chạy server thủ công trong terminal trước. Việc xóa chúng sẽ giúp extension tự đảm nhận các công việc nặng nhọc này.

Cách 3: Tắt các tiến trình bị treoĐôi khi gopls trở thành một tiến trình "ma". Nó không hoạt động nhưng vẫn chiếm dụng tài nguyên hệ thống, ngăn cản một phiên bản mới khởi động.

Trên macOS hoặc Linux:

ps aux | grep gopls
killall gopls

Trên Windows (PowerShell):

Get-Process gopls -ErrorAction SilentlyContinue | Stop-Process -Force

Sau khi dọn dẹp xong, hãy khởi động lại VS Code. Nó sẽ cố gắng thực hiện kết nối sạch ngay lập tức.

Cách 4: Giải quyết đường dẫn Remote và WSLNếu bạn lập trình bên trong WSL, Docker, hoặc qua SSH, extension có thể đang tìm kiếm Go trên sai máy. Đây là kịch bản "sai lệch đường dẫn" điển hình.

  • Xác minh rằng extension Go đã được cài đặt bên trong môi trường remote, chứ không chỉ trên máy chủ Windows hoặc Mac cục bộ của bạn.- Chạy lệnh which go trong terminal tích hợp. Nếu không trả về kết quả gì, PATH của bạn đã bị lỗi và server không thể khởi động.- Hãy chỉ định rõ ràng. Thêm các dòng sau vào file settings.json của môi trường remote để trỏ chính xác đến các file thực thi của bạn:``` "go.alternateTools": { "go": "/usr/local/go/bin/go", "gopls": "/home/username/go/bin/gopls" }

## Xác minh kết quảĐừng chỉ chờ đợi lỗi biến mất. Hãy xác nhận kết nối đang hoạt động bằng cách kiểm tra trạng thái của server:
- Mở tab **Output** (`Ctrl+``).- Chọn **gopls (server)** từ menu thả xuống ở bên phải.- Tìm dòng có nội dung kiểu như: `[Info] gopls v0.15.3 initialized`.Nếu bạn thấy các luồng dữ liệu JSON-RPC, mọi thứ đã hoạt động trở lại bình thường.
## Cách để duy trì môi trường không lỗiĐể tránh gặp phải lỗi này vào lúc 2 giờ sáng, hãy giữ cho môi trường của bạn luôn gọn gàng. Bật `"go.toolsManagement.autoUpdate": true` để các công cụ không bị cũ kỹ. Ngoài ra, hãy cố gắng chỉ sử dụng một trình quản lý phiên bản Go duy nhất. Việc kết hợp `brew`, `asdf` và cài đặt thủ công thường dẫn đến việc có nhiều file thực thi `gopls` xung đột với nhau.

Related Error Notes