在修改kubeedge代码时gopls报错: cannot use &(internalContainerLifecycleImpl literal) (value of type *internalContainerLifecycleImpl) as InternalContainerLifecycle value in return statement: internalContainerLifecycleImpl does not implement InternalContainerLifecycle (missing method PreCreateContainer), compiler(InvalidIfaceAssign) 看代码发现internalContainerLifecycleImpl 是有实现 PreCreateContainer 这个方法的 但是vscode报了没有这个方法的错误,后面发现这个方法的实现是在xxx_linux.go后缀文件中,gopls使用了golang compiler的api,出现这个问题的环境是darwin (macos),因为golang compiler api在设定为darwin的环境下无法将xxx_linux,go这个特定os/arch文件考虑在内,所以在golang compiler api向gopls报了错,gopls将错误进一步报了出来(Gopls reports warning on vsc when creating os/arch specific files)。
如何在vscode解决这个问题: 第一种方法: 因为是环境问题导致,所以修改go env或者将代码置于linux环境远程调试 第二种方法(只针对vscode): 最小化改动,在kubeedge项目目录下创建.vscode目录,.vscode下创建settings.json文件, 内容为:
{
"gopls": {
"build.buildFlags": [
"-tags=linux",
// "-tags=darwin",
]
}
}
,.vscode是vscode的项目配置目录, settings.json是项目配置文件
|