Проблема запуска go файла: unexpected NUL in input

Столкнулся с некоторой проблемой в области запуска go файла. Выкачиваю проект с github, запускаю через go run main.go, а далее выводит следующую ошибку: "go: reading main.go: unexpected NUL in input". Гуглил, пытался изменить кодировку, но всё безрезультатно. Пытаюсь командами изменить кодировку на utf8, либо остаётся старая кодировка (us-ascii), либо binary. Все файлы создаются в кодировке us-ascii, даже если создать новый файл и вписать туда английское слово.

Файл, который загружаю с github, пишется в utf8, но debian решает изменить его кодировку на us-ascii.

Запускаю на сервере через консоль. Смотрю командой file -i main.go, выдает следующую информацию:

main.go: text/x-c; charset=us-ascii

Команда locale выводит следующую информацию:

LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Сижу уже час-два не могу понять что делать с этой проблемой.

Команда go env выводит следующее:

GO111MODULE=""
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/root/work/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/root/work"
GOPRIVATE=""
GOPROXY="https://proxy.golang.org,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.19.3"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build1997128798=/tmp/go-build -gno-record-gcc-switches"

Для скачивания проекта и его запуска использую следующий набор команд:

cd ~/work
git clone https://github.com/evgen1ck/test-server.git
cd test-server
go mod init main.go
go build ./
go run main.go

Возможно сам код проекта неверный, но проверить его не могу.


Ответы (1 шт):

Автор решения: Pak Uula

Ситуация вот какая.

Вы создаёте модуль main.go. Затем вы вызываете go build .

По умолчанию go build . в линуксе создаёт приложение с именем модуля. То есть в вашем случае с именем main.go: исполнимый файл перезаписывает собой исходный текст программы. Отсюда и сообщение об ошибке. Бинарный файл содержит нулевые символы в товарных количествах.

Что делать.

  1. Использовать совсем другое имя модуля. Так как исходный текст развёрнут в гитхабе, то и модуль стоит назвать go mod init github.com/evgen1ck/test-server

  2. Коль скоро вы делаете go build, то go run команда избыточна. go build . создаст исполнимый файл test-server, вместо go run достаточно просто запустить ./test-server

  3. Можно запускать программу командой go run. Но в этом случае не делайте go build.

Как-то так.

→ Ссылка