Golang中"no GO source files"错误的解决方法

Golang中"no GO source files"错误的解决方法 更新: 我重启了VSCode并再次测试了我的代码,然后尝试从命令行运行。我收到了一个非常长的错误,开头是:

Exception 0xc0000005 0x0 0x7ffbd991a0f0 0x7ff89943445e
PC=0x7ff89943445e
signal arrived during external code execution

runtime.cgocall(0x7ff6ead942c0, 0xc000065da0)

结尾是:

     C:/Program Files/Go/src/runtime/asm_amd64.s:1650 +0x1 fp=0xc01494dfe8 sp=0xc01494dfe0 pc=0x7ff6ea9c8ac1
created by os/signal.Notify.func1.1 in goroutine 55
        C:/Program Files/Go/src/os/signal/signal.go:151 +0x1f
rax     0xfff0fff
rbx     0xd075dff3a0
rcx     0x7ffbd991a0cc
rdi     0x7ff899c26100
rsi     0x2157c392b20
rbp     0xd075dfefb0
rsp     0xd075dfeea8
r8      0xd075dfefc0
r9      0xd075dff3a0
r10     0xd075dff190
r11     0x0
r12     0x100
r13     0x0
r14     0x1
r15     0x0
rip     0x7ff89943445e
rflags  0x10206
cs      0x33
fs      0x53
gs      0x2b
exit status 2

有什么想法吗?我的代码粘贴在下面,还有我最初遇到的错误。


大家好,我是新用户。我有一个相当简单的设置,所有代码都放在一个文件里,还有一个go.mod文件和一个go.sum文件,它们在VSCode中没有报告错误。

当我尝试运行main.go时,它显示:

go: no Go source files

另外,当我在main.go中将鼠标悬停在package main中的“main”上时,它显示:

This file is within module ".", which is not included in your workspace.
To fix this problem, you can add a go.work file that uses this directory.
See the documentation for more information on setting up your workspace:
https://github.com/golang/tools/blob/master/gopls/doc/workspace.md

我尝试创建了那个go.work文件,它移除了“main”下面的黄色波浪线,但并没有解决问题,所以我把它删掉了。

以下是main.go的内容,它只报告一个错误(main下面的黄色波浪线):

package main

import (
	"C"
	"fmt"
	"io"
	"net/http"
	"time"

	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/widget"
)

func Call2(someurl string) (*http.Response, error) {
	req, err := http.NewRequest(http.MethodGet, someurl, nil)
	if err != nil {
		fmt.Printf("Error creating request: %s", err)
		return nil, err
	}
	client := http.Client{
		Timeout: 30 * time.Second,
	}
	res, err := client.Do(req)
	if err != nil {
		fmt.Printf("Error making HTTP request: %s", err)
		return nil, err
	}
	return res, nil
}

func tidyUp() {
	fmt.Println("Exited")
}
func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("Hello")
	k, err := Call2("https://acre.iex.cloud/v1/data/CORE/REF_DATA?token=pk_79891f5cbcce4099ae063588956f937a")
	if err != nil {
		fmt.Printf("Error making HTTP request: %s", err)
		return
	}
	defer k.Body.Close()
	b, err := io.ReadAll(k.Body)
	if err != nil {
		fmt.Printf("Error reading response body: %s", err)
		return
	}
	//	fmt.Println(string(b))
	myWindow.SetContent(widget.NewLabel(string(b)))
	myWindow.Show()
	myApp.Run()
	tidyUp()
}

以下是go.mod的内容,根据VSCode显示没有错误:

module novicemodule

go 1.21.3

require fyne.io/fyne/v2 v2.4.1

require (
	fyne.io/systray v1.10.1-0.20230722100817-88df1e0ffa9a // indirect
	github.com/davecgh/go-spew v1.1.1 // indirect
	github.com/fredbi/uri v1.0.0 // indirect
	github.com/fsnotify/fsnotify v1.6.0 // indirect
	github.com/fyne-io/gl-js v0.0.0-20220119005834-d2da28d9ccfe // indirect
	github.com/fyne-io/glfw-js v0.0.0-20220120001248-ee7290d23504 // indirect
	github.com/fyne-io/image v0.0.0-20220602074514-4956b0afb3d2 // indirect
	github.com/go-gl/gl v0.0.0-20211210172815-726fda9656d6 // indirect
	github.com/go-gl/glfw/v3.3/glfw v0.0.0-20221017161538-93cebf72946b // indirect
	github.com/go-text/render v0.0.0-20230619120952-35bccb6164b8 // indirect
	github.com/go-text/typesetting v0.0.0-20230616162802-9c17dd34aa4a // indirect
	github.com/godbus/dbus/v5 v5.1.0 // indirect
	github.com/gopherjs/gopherjs v1.17.2 // indirect
	github.com/jsummers/gobmp v0.0.0-20151104160322-e2ba15ffa76e // indirect
	github.com/pmezard/go-difflib v1.0.0 // indirect
	github.com/srwiley/oksvg v0.0.0-20221011165216-be6e8873101c // indirect
	github.com/srwiley/rasterx v0.0.0-20220730225603-2ab79fcdd4ef // indirect
	github.com/stretchr/testify v1.8.4 // indirect
	github.com/tevino/abool v1.2.0 // indirect
	github.com/yuin/goldmark v1.5.5 // indirect
	golang.org/x/image v0.11.0 // indirect
	golang.org/x/mobile v0.0.0-20230531173138-3c911d8e3eda // indirect
	golang.org/x/net v0.14.0 // indirect
	golang.org/x/sys v0.11.0 // indirect
	golang.org/x/text v0.12.0 // indirect
	gopkg.in/yaml.v3 v3.0.1 // indirect
	honnef.co/go/js/dom v0.0.0-20210725211120-f030747120f2 // indirect
)

有什么想法吗?非常感谢任何帮助!


更多关于Golang中"no GO source files"错误的解决方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

你好 @Ethan_Leonard,欢迎来到论坛。

我将 Call2 修改为从一个测试 HTTP 服务器获取响应,然后使用 CGO_ENABLED=1 go run . 运行了代码。

我收到了一个编译器警告(似乎是 macOS 特有的),但没有其他错误。

ld: warning: ignoring duplicate libraries: '-lobjc'

主窗口正常打开,并显示了测试服务器的响应。

Screenshot 2023-10-30 at 09.45.19

看起来代码本身没有问题。我的 go.mod 文件和你的一样(除了模块名)。

我推测这是 Fyne 在 Windows 上的一个问题(例如,可以参考这些 issue)。(由于没有 Windows 机器,我目前无法进行更深入的排查。)

更多关于Golang中"no GO source files"错误的解决方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


这个错误通常是由于Go模块配置或工作空间设置问题导致的。以下是几种解决方法:

1. 检查当前目录结构

确保你在正确的目录下运行命令:

# 查看当前目录内容
ls -la

# 应该能看到 main.go, go.mod, go.sum

2. 正确的运行方式

不要直接运行 go run main.go,而是:

# 方法1:运行整个包
go run .

# 方法2:指定模块路径
go run novicemodule

# 方法3:使用完整路径
go run ./main.go

3. 修复工作空间问题

如果你使用了Go工作空间,需要正确配置:

# 删除可能存在的 go.work 文件
rm go.work

# 或者创建正确的 go.work 文件
echo 'go 1.21

use .' > go.work

4. 清理并重新构建

# 清理缓存
go clean -cache
go clean -modcache

# 重新下载依赖
go mod tidy

# 验证模块
go mod verify

5. 检查VSCode设置

在VSCode中:

  1. Ctrl+Shift+P 打开命令面板
  2. 输入 Go: Restart Language Server
  3. 或者完全重启VSCode

6. 如果问题仍然存在,尝试重建模块

# 备份你的代码
cp main.go main.go.backup

# 重新初始化模块
rm go.mod go.sum
go mod init novicemodule

# 重新获取依赖
go get fyne.io/fyne/v2

# 恢复代码
mv main.go.backup main.go

7. 关于你遇到的运行时错误

那个长错误看起来是Windows上的内存访问违规。这可能与CGO有关(你的代码中有 import "C")。尝试:

// 移除不必要的 C 导入
// import "C"  // 删除这一行

或者明确设置CGO:

# 禁用CGO
set CGO_ENABLED=0
go run .

# 或者启用CGO(如果需要)
set CGO_ENABLED=1
go run .

完整的工作示例

这是修复后的 main.go,移除了 import "C"

package main

import (
	"fmt"
	"io"
	"net/http"
	"time"

	"fyne.io/fyne/v2/app"
	"fyne.io/fyne/v2/widget"
)

func Call2(someurl string) (*http.Response, error) {
	req, err := http.NewRequest(http.MethodGet, someurl, nil)
	if err != nil {
		fmt.Printf("Error creating request: %s", err)
		return nil, err
	}
	client := http.Client{
		Timeout: 30 * time.Second,
	}
	res, err := client.Do(req)
	if err != nil {
		fmt.Printf("Error making HTTP request: %s", err)
		return nil, err
	}
	return res, nil
}

func tidyUp() {
	fmt.Println("Exited")
}

func main() {
	myApp := app.New()
	myWindow := myApp.NewWindow("Hello")
	
	k, err := Call2("https://acre.iex.cloud/v1/data/CORE/REF_DATA?token=pk_79891f5cbcce4099ae063588956f937a")
	if err != nil {
		fmt.Printf("Error making HTTP request: %s", err)
		return
	}
	defer k.Body.Close()
	
	b, err := io.ReadAll(k.Body)
	if err != nil {
		fmt.Printf("Error reading response body: %s", err)
		return
	}
	
	myWindow.SetContent(widget.NewLabel(string(b)))
	myWindow.Show()
	myApp.Run()
	tidyUp()
}

运行命令:

cd /path/to/your/project
go run .

如果还有问题,请提供你运行命令时所在的完整目录路径。

回到顶部