Golang中Hello World程序无法运行的问题求助

Golang中Hello World程序无法运行的问题求助 大家好,我是Go语言的新手,我连一个简单的“Hello World”示例程序都无法成功运行。当我尝试使用 go run hello.go 命令运行它时,我遇到了以下错误:

$ go run hello.go 
# command-line-arguments
panic: runtime error: index out of range [2147479547] with length 7

goroutine 1 [running]:
cmd/link/internal/loader.(*Loader).resolve(0x1e36?, 0xc000115280?, {0x4300?, 0xc0?})
        /usr/lib/golang/src/cmd/link/internal/loader/loader.go:662 +0x1ae
cmd/link/internal/loader.Reloc.Sym({0x7f047b076948?, 0xc000115280?, 0xc000004300?})
        /usr/lib/golang/src/cmd/link/internal/loader/loader.go:60 +0x35
cmd/link/internal/ld.(*deadcodePass).flood(0xc000120a08)
        /usr/lib/golang/src/cmd/link/internal/ld/deadcode.go:204 +0x878
cmd/link/internal/ld.deadcode(0xc000150000)
        /usr/lib/golang/src/cmd/link/internal/ld/deadcode.go:336 +0x89
cmd/link/internal/ld.Main(_, {0x20, 0x20, 0x1, 0x7, 0x10, 0x0, {0x0, 0x0}, {0x697b59, ...}, ...})
        /usr/lib/golang/src/cmd/link/internal/ld/main.go:271 +0xef2
main.main()
        /usr/lib/golang/src/cmd/link/main.go:72 +0xedb

我的代码非常简单,如下所示:

package main

import "fmt"

func main() {
    fmt.Println("hello world")
}

我尝试在谷歌上搜索这个问题,但似乎没有什么方法能解决它。我使用的是Fedora 38系统,通过发行版的软件包安装了Go。我的文件位于 ~/go/src/hello/hello.go 目录下,并且我就是在这个目录下尝试运行它的。


更多关于Golang中Hello World程序无法运行的问题求助的实战教程也可以访问 https://www.itying.com/category-94-b0.html

7 回复

我想具体了解一下你的开发环境。

更多关于Golang中Hello World程序无法运行的问题求助的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


“最新最棒的”——我喜欢你这种描述方式。

我同意,这个包不应该被破坏。但直接安装会得到最新、最棒的Go版本,所以你很可能不会再回头看了……

我通过Fedora的包管理器安装了Go。

我决定采纳你的建议,按照说明移除Go包并从官网重新安装,现在它似乎能正常工作了。不过,Fedora安装的环境会这样出问题,真是令人费解。

你好 @Godog

看起来 Go 的安装可能损坏了。

你是怎么安装 Go 的?如果你使用的是 Linux 包管理器安装的版本,或许可以尝试直接从 go.dev/dl 安装 Go。

另外,请运行 go env 并在这里分享输出结果。这个命令会显示 Go 工具链的当前设置。

// 示例代码块,实际输出应为 `go env` 命令的结果
// 此处仅为占位,实际内容需用户提供

Godog:

我决定采纳你的建议,按照说明移除了Go包并从网站重新安装,现在它似乎能正常工作了。不过,Fedora的安装环境会这样出问题,确实令人费解。

我以前也使用像 apt 这样的包管理器来保持Go语言的更新,但安装过程如此简单,我已经转而直接按照 go.dev 上的说明手动安装了。不管出于什么原因,这似乎比使用包管理器效果更好。而且我不必在等待包维护者更新的过程中落后几个版本。很高兴你能让它正常工作。

这个错误看起来是Go工具链在链接阶段出现了问题,而不是你的代码本身有问题。这通常与Go安装损坏或系统环境问题有关。以下是几个可以尝试的解决方案:

1. 首先验证Go安装

# 检查Go版本
go version

# 检查Go环境
go env

2. 清理Go缓存并重新构建

# 清理所有缓存
go clean -cache
go clean -modcache
go clean -fuzzcache

# 删除编译文件
rm -f hello

# 重新运行
go run hello.go

3. 如果问题仍然存在,尝试重新编译

# 使用build命令查看是否有不同
go build hello.go

# 然后运行生成的可执行文件
./hello

4. 检查文件权限和完整性

# 检查文件是否完整
cat hello.go

# 确保文件没有隐藏字符
file hello.go

# 使用hexdump检查文件开头
head -c 100 hello.go | hexdump -C

5. 如果以上都不行,重新安装Go

对于Fedora系统:

# 卸载当前Go版本
sudo dnf remove golang

# 清理残留文件
sudo rm -rf /usr/lib/golang
sudo rm -rf /usr/share/golang

# 重新安装
sudo dnf install golang

# 或者使用官方二进制安装
# 从 https://golang.org/dl/ 下载
# tar -C /usr/local -xzf go*.tar.gz
# 添加 /usr/local/go/bin 到PATH

6. 创建最小可复现示例

在临时目录中测试:

# 创建新目录
mkdir /tmp/testhello
cd /tmp/testhello

# 创建新的hello.go文件
cat > hello.go << 'EOF'
package main

import "fmt"

func main() {
    fmt.Println("hello world")
}
EOF

# 尝试运行
go run hello.go

7. 检查系统依赖

# 确保系统有必要的开发工具
sudo dnf install glibc-devel

# 检查动态链接库
ldd $(which go)

如果问题仍然存在,可能是Fedora软件仓库中的Go包有问题。建议直接从Go官网下载官方二进制包进行安装,这通常能避免发行版打包带来的问题。

回到顶部