Используя Windows 11 Pro, установил Go с помощью установщика. Вот мой файл main.go: основной пакет
import (
"fmt"
"time"
)
func main() {
fmt.Println("Hello world")
time.Sleep(2 * time.Second)
}
И вся соответствующая информация, о которой я могу думать:
Версия PowerShell:
PS C:\Users\fares.alghazy\go\src> $PSVersionTable.PSVersion
Основная незначительная редакция сборки
5 1 22621 1778
Настройки расширения GO.json:
{
"explorer.confirmDelete": false,
"terminal.integrated.scrollback": 100000,
"editor.minimap.enabled": false,
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"workbench.editorAssociations": {
"*.db": "default",
"*.docx": "default"
},
"[json]": {
"editor.defaultFormatter": "vscode.json-language-features"
},
"[php]": {
"editor.defaultFormatter": "Sophisticode.php-formatter"
},
"editor.formatOnSave": true,
"prettier.tabWidth": 4,
"[typescript]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"[dockercompose]": {
"editor.defaultFormatter": "ms-azuretools.vscode-docker"
},
"typescript.updateImportsOnFileMove.enabled": "always",
"javascript.updateImportsOnFileMove.enabled": "always",
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.defaultFormatter": "vscode.typescript-language-features"
},
"diffEditor.ignoreTrimWhitespace": false,
"workbench.startupEditor": "none",
"[vue]": {
"editor.defaultFormatter": "Vue.volar"
},
"audioCues.lineHasBreakpoint": "off",
"audioCues.lineHasError": "off",
"audioCues.lineHasInlineSuggestion": "off",
"audioCues.noInlayHints": "off",
"audioCues.onDebugBreak": "off",
"audioCues.volume": 0,
"audioCues.lineHasFoldedArea": "off",
"go.gopath": "C:\\Users\\myuser\\go",
"go.goroot": "C:\\Program Files\\Go",
"files.autoSave": "afterDelay",
"go.alternateTools": {
}
}
Информация о системе/каталоге:
PS C:\Users\myuser\go\src> pwd
C:\Users\myuser\go\src
PS C:\Users\myuser\go\src> ls
Directory: C:\Users\myuser\go\src
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 28-Jul-23 12:00 PM 122 main.go
PS C:\Users\myuser\go\src> go version
go version go1.20.6 windows/amd64
PS C:\Users\myuser\go\src> go env
set GO111MODULE=
set GOARCH=amd64
set GOBIN=
set GOCACHE=C:\Users\myuser\AppData\Local\go-build
set GOENV=C:\Users\myuser\AppData\Roaming\go\env
set GOEXE=.exe
set GOEXPERIMENT=
set GOFLAGS=
set GOHOSTARCH=amd64
set GOHOSTOS=windows
set GOINSECURE=
set GOMODCACHE=C:\Users\myuser\go\pkg\mod
set GONOPROXY=
set GONOSUMDB=
set GOOS=windows
set GOPATH=C:\Users\myuser\go
set GOPRIVATE=
set GOPROXY=https://proxy.golang.org,direct
set GOROOT=C:\Program Files\Go
set GOSUMDB=sum.golang.org
set GOTMPDIR=
set GOTOOLDIR=C:\Program Files\Go\pkg\tool\windows_amd64
set GOVCS=
set GOVERSION=go1.20.6
set GCCGO=gccgo
set GOAMD64=v1
set AR=ar
set CC=gcc
set CXX=g++
set CGO_ENABLED=0
set GOMOD=NUL
set GOWORK=
set CGO_CFLAGS=-O2 -g
set CGO_CPPFLAGS=
set CGO_CXXFLAGS=-O2 -g
set CGO_FFLAGS=-O2 -g
set CGO_LDFLAGS=-O2 -g
set PKG_CONFIG=pkg-config
set GOGCCFLAGS=-m64 -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=C:\Users\myuser~1.ALG\AppData\Local\Temp\go-build1704880455=/tmp/go-build -gno-record-gcc-switches
Проблема:
Выполнение действия:
go run main.go
Ожидаемый результат:
> Hello world
Полученный вывод:
Терминал зависает (даже без time.sleep) дальше ничего не происходит
Попытки исправления:
1- Попытка использовать сборку go, а затем запустить exe, результат не получен.
2- Попытка построить, а затем перенаправить вывод в файл:
go build main.go.\main.exe >output.txt
output.txt был создан, но пуст
3- Проверена кодировка консоли: Active code page: 65001
4-Отключите антивирусное или защитное программное обеспечение: я использую стандартные функции безопасности Windows, стороннее программное обеспечение безопасности не установлено
Я даже пытался переустановить программное обеспечение Go, перезагрузить компьютер, перезапустить код VS и т. д.
Почему мой код не показывает вывод? Что я могу сделать, чтобы это исправить?
Обновление 1:
По указанию @mkopriva:
go mod init my_app создает следующий файл go.mod:
module my_app
go 1.20
Мой новый каталог:
PS C:\Users\myuser\Desktop\Development\go\my_app> ls
Directory: C:\Users\myuser\Desktop\Development\go\my_app
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 28-Jul-23 1:14 PM 27 go.mod
-a---- 28-Jul-23 1:15 PM 125 main.go
Никаких изменений с go run main.go или со сборкой и запуском. Все еще не получая выход.
@mkopriva обновлено :)
Прекратите использовать go run с аргументами имени файла. Читайте и следуйте go.dev/doc, особенно руководствам.
Вас может обмануть защитник Windows. Эти «инструменты» часто ошибочно классифицируют программы Go как вредоносные программы. Попробуйте запустить go build main.go и посмотрите, работает ли .exe. Он может быть удален Windows сразу после того, как вы его создадите, поэтому ваша командная строка зависнет.
@Volker Я тоже пробовал go run . с такими же результатами
@gonutz работает go build main.go, а затем запускает exe напрямую, ничего не выводит, но после этого файл удаляется.
Я предлагаю вам перейти к настройкам безопасности Windows и добавить исключение в папку разработки. Мне лично пришлось сделать это как для моих папок GOBIN, так и для папок GOPATH, где находятся мои исполняемые файлы и код. Кроме того, когда вы используете go run, вывод будет записан во временный файл в вашей папке APPDATA под названием go-build. Вы также можете добавить это.
@gonutz ваш ответ привел меня к моему правильному ответу, это действительно была проблема с антивирусом. У меня была предыдущая установка антивирусного программного обеспечения моей компанией, которое не было полностью удалено, после того, как я убедился, что оно было полностью удалено правильно, простой `go run main.go` работал отлично. Так что спасибо тебе! Отправьте ответ, и я приму его.





Программы Go часто ложно распознаются антивирусным программным обеспечением как вредоносные, хотя они таковыми не являются. В официальной документации Go есть даже FAQ по этой теме.
Защитник Windows часто удаляет ваш исполняемый файл сразу после компиляции. Вместо использования go run main.go вы можете выполнить два шага по отдельности, сначала вызвав go build main.go, а затем попытавшись запустить main.exe. Это не удастся, если Windows удалит ваш исполняемый файл сразу после создания. Я видел, как скомпилированные библиотеки DLL исчезали через минуту, когда я думал, что я в безопасности, поэтому имейте в виду, что исполняемый файл может быть удален не сразу, а через несколько секунд или даже минут после компиляции.
Когда вы вызываете go run main.go, он создает исполняемый файл во временной папке по пути %APPDATA% вашего Local, в папке с именем go-build.
Возможно, вы захотите создать правило исключения в своем защитнике Windows, чтобы игнорировать go-build папки в вашем APPDATA. Вы также должны исключить GOPATH и GOBIN из антивирусной проверки, вы, вероятно, также будете собирать и запускать код там.
(1.) Не используйте
$GOPATH\srcв качестве прямого родительского каталога ваших исходных файлов. Переместите код в его собственный каталог, напримерC:\Users\myuser\my_app\main.go. (2.) Перед запуском кода вы должны инициализировать его модуль с помощьюgo mod init <module_path>(например,go mod init my_app)