Go успешно установлен, но нет вывода с простым Hello World

Используя 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 или со сборкой и запуском. Все еще не получая выход.

(1.) Не используйте $GOPATH\src в качестве прямого родительского каталога ваших исходных файлов. Переместите код в его собственный каталог, например C:\Users\myuser\my_app\main.go. (2.) Перед запуском кода вы должны инициализировать его модуль с помощью go mod init <module_path> (например, go mod init my_app)

mkopriva 28.07.2023 11:07

@mkopriva обновлено :)

Fares 28.07.2023 11:22

Прекратите использовать go run с аргументами имени файла. Читайте и следуйте go.dev/doc, особенно руководствам.

Volker 28.07.2023 12:30

Вас может обмануть защитник Windows. Эти «инструменты» часто ошибочно классифицируют программы Go как вредоносные программы. Попробуйте запустить go build main.go и посмотрите, работает ли .exe. Он может быть удален Windows сразу после того, как вы его создадите, поэтому ваша командная строка зависнет.

gonutz 28.07.2023 12:45

@Volker Я тоже пробовал go run . с такими же результатами

Fares 28.07.2023 12:48

@gonutz работает go build main.go, а затем запускает exe напрямую, ничего не выводит, но после этого файл удаляется.

Fares 28.07.2023 12:49

Я предлагаю вам перейти к настройкам безопасности Windows и добавить исключение в папку разработки. Мне лично пришлось сделать это как для моих папок GOBIN, так и для папок GOPATH, где находятся мои исполняемые файлы и код. Кроме того, когда вы используете go run, вывод будет записан во временный файл в вашей папке APPDATA под названием go-build. Вы также можете добавить это.

gonutz 28.07.2023 13:40

@gonutz ваш ответ привел меня к моему правильному ответу, это действительно была проблема с антивирусом. У меня была предыдущая установка антивирусного программного обеспечения моей компанией, которое не было полностью удалено, после того, как я убедился, что оно было полностью удалено правильно, простой `go run main.go` работал отлично. Так что спасибо тебе! Отправьте ответ, и я приму его.

Fares 28.07.2023 14:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
8
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Программы 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 из антивирусной проверки, вы, вероятно, также будете собирать и запускать код там.

Другие вопросы по теме