无法从VSCode运行Golang Playground代码的解决方法

无法从VSCode运行Golang Playground代码的解决方法 我的系统环境变量是:

$ echo $GOPATH $GOROOT
C:\go-work C:\Go\

项目路径:

C:\go-work\src\packtest

项目结构:

packtest
    util
        util.go
    main.go

当我从Visual Studio Code运行"Run On Go Playground"时,出现以下错误:

Upload to the Go Playground failed.
prog.go:5:2: cannot find package “packtest/util” in any of:
/usr/local/go/src/packtest/util (from $GOROOT)
/go/src/packtest/util (from $GOPATH)

项目已经在系统路径中,但VSC在不同的文件夹中查找文件。如何解决这个问题?

注:如果在VSC中通过命令行运行(不在playground中),它可以正常工作


更多关于无法从VSCode运行Golang Playground代码的解决方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

hi,看起来是这样的。

更多关于无法从VSCode运行Golang Playground代码的解决方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


// 代码部分保持原样

是否可能是因为"Run On Go Playground"只是上传了选定的文件,而Go Playground实际上无法处理多个文件?然后它尝试在Go Playground机器上导入util包,但在提供的目录中找不到它。

问题在于Go Playground是一个沙盒环境,它无法访问您本地的文件系统和GOPATH。当您使用"Run On Go Playground"功能时,VSCode会尝试将代码上传到Go Playground服务器,但服务器无法找到您的本地包packtest/util

解决方案是将所有相关代码合并到一个文件中,或者使用Go Playground支持的导入方式。以下是修改后的代码示例:

main.go

package main

import (
    "fmt"
    "strings"
)

// 将util包的内容直接放在main文件中
func reverseString(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

func toUpperCase(s string) string {
    return strings.ToUpper(s)
}

func main() {
    text := "hello world"
    
    reversed := reverseString(text)
    upper := toUpperCase(text)
    
    fmt.Printf("Original: %s\n", text)
    fmt.Printf("Reversed: %s\n", reversed)
    fmt.Printf("Uppercase: %s\n", upper)
}

如果您确实需要保持包结构,可以使用Go Playground支持的第三方包,或者将util包的内容内联到main文件中。例如,原来的util.go内容:

util.go(原始内容)

package util

import "strings"

func ReverseString(s string) string {
    runes := []rune(s)
    for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
        runes[i], runes[j] = runes[j], runes[i]
    }
    return string(runes)
}

func ToUpperCase(s string) string {
    return strings.ToUpper(s)
}

main.go(原始内容)

package main

import (
    "fmt"
    "packtest/util"
)

func main() {
    text := "hello world"
    
    reversed := util.ReverseString(text)
    upper := util.ToUpperCase(text)
    
    fmt.Printf("Original: %s\n", text)
    fmt.Printf("Reversed: %s\n", reversed)
    fmt.Printf("Uppercase: %s\n", upper)
}

在Go Playground中运行包含本地包引用的代码时,必须将所有代码放在单个文件中,因为Playground不支持多文件项目中的本地包导入。

回到顶部