登录
首页 >  Golang >  Go问答

如何让golang不混淆供应商导入和绝对导入?

来源:stackoverflow

时间:2024-03-16 21:00:30 203浏览 收藏

Go语言中的导入路径混淆会导致编译错误。当供应商导入路径(vendor/...)和绝对导入路径(github.com/...)中的包发生混淆时,会出现此错误。为了解决这个问题,可以从供应商路径导入有问题的包,或者确保应用程序供应商同时提供了冲突的包。

问题内容

我不明白该错误的含义,但我认为绝对路径中的包和供应商路径中的包之间存在混淆。如何让它不混淆?

# github.com/googlecloudplatform/terraformer/providers/alicloud
providers/alicloud/dum.go:10:35: cannot use func literal (type func(*"github.com/aliyun/aliyun-oss-go-sdk/oss".client) (interface {}, error)) as type func(*"github.com/terraform-providers/terraform-provider-alicloud/vendor/github.com/aliyun/aliyun-oss-go-sdk/oss".client) (interface {}, error) in argument to client.withossclient

这是最小的可重现代码

package dum

import (
    oss "github.com/aliyun/aliyun-oss-go-sdk/oss"
    "github.com/terraform-providers/terraform-provider-alicloud/alicloud/connectivity"
)

func dum() error {
    client := connectivity.aliyunclient{}
    raw, err := client.withossclient(func(ossclient *oss.client) (interface{}, error) {
        return ossclient.listbuckets()
    })
    if err != nil {
        return err
    }
    println(raw)

    return nil
}

编辑:解决方案

go mod vendor
go build -v

解决方案


该错误意味着这两种类型虽然等效,但由于它们位于不同的包中,因此被视为不同的。要使代码正常工作,您可以从 github.com/terraform-providers/terraform-provider-alicloud/vendor/... 路径导入 oss。或者让您的应用供应商同时提供 connectivityoss

编译器无法将 "github.com/aliyun/aliyun-oss-go-sdk/oss".Client 替换为 >github.com/terraform-providers/terraform-provider-alicloud/vendor/github.com/aliyun/aliyun-oss-go-sdk/oss".Client,即使它们具有相同的名称(但来自不同的包)。

本篇关于《如何让golang不混淆供应商导入和绝对导入?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>