【问题标题】:can't find struct in a same package在同一个包中找不到结构
【发布时间】:2019-08-05 03:42:17
【问题描述】:

突然间,vscode 无法在同一个包中获取访问结构,但在不同的文件中。

错误显示未定义的结构

之前 vscode 可以跨文件实例化结构体(vscode+go1.12.4)

示例代码如下:

file1 a.go

package main

import "fmt"

type su struct {
    Sfd string
    Sf  int
}

func (sed *su) do() {
    fmt.Println(sed.Sfd + string(sed.Sf))
}


file2 main.go

package main

import "fmt"

func main() {
    d := su{}
    fmt.Println(d)
}

这两个文件在同一个包中

有人遇到过同样的问题吗?

【问题讨论】:

  • 尝试运行 *.go
  • 是的,在playground可以用,为什么vscode有问题
  • @Wicak go run 文件名大多被滥用。对于真正想使用go run 而不是go buildgo install 的人,他们可以使用包名称参数(至少使用最新版本的Go):go run .(最大的区别是这尊重构建标签, *_test.go 文件等,因为 go run *.go 在许多完全有效的包中都会失败)。
  • 谢谢@DaveC,我以前不知道。但是我找到的大多数答案,建议使用 go run *.go 来解决这样的问题。你想给我更多关于这个问题的建议吗?

标签: go glide-golang


【解决方案1】:

在 GoLand 中,您可以将 Run 类型从 file 更改为 Package。

【讨论】:

    【解决方案2】:

    实际上,语言服务器有时会崩溃。打开命令面板并输入“语言服务器”。应该显示一条命令,上面写着“重新启动语言服务器”。重启 VSCode 可能就足够了。

    【讨论】:

      【解决方案3】:

      我也遇到了同样的问题。之前使用包名指向类型(在您的情况下为su)就足够了。例如:d := mypackage.su{}(即使您从同一个包但不同的源文件中使用它)。它适用于我的情况,出于某种原因,GoLand IDE 没有建议这样的解决方案。

      【讨论】:

        猜你喜欢
        • 2023-03-30
        • 2014-10-09
        • 2015-07-28
        • 2021-03-29
        • 1970-01-01
        • 2016-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多