Проблема запуска 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 шт):
Ситуация вот какая.
Вы создаёте модуль main.go. Затем вы вызываете go build .
По умолчанию go build . в линуксе создаёт приложение с именем модуля. То есть в вашем случае с именем main.go: исполнимый файл перезаписывает собой исходный текст программы. Отсюда и сообщение об ошибке. Бинарный файл содержит нулевые символы в товарных количествах.
Что делать.
Использовать совсем другое имя модуля. Так как исходный текст развёрнут в гитхабе, то и модуль стоит назвать
go mod init github.com/evgen1ck/test-serverКоль скоро вы делаете
go build, тоgo runкоманда избыточна.go build .создаст исполнимый файлtest-server, вместоgo runдостаточно просто запустить./test-serverМожно запускать программу командой
go run. Но в этом случае не делайтеgo build.
Как-то так.