【问题标题】:How to import go interface package in my main.go?如何在我的 main.go 中导入 go 接口包?
【发布时间】:2019-12-06 18:56:03
【问题描述】:

为了清楚起见,大部分代码已被删除,以便更多地关注问题。我有一个名为main.gogo-micro 服务器文件,代码如下:

package main

import (
    "fmt"
    "strings"

    "github.com/micro/go-micro"
    "github.com/micro/go-micro/server"

    proto "mypkg/proto"
)

const serviceName = "SRV"

func main() {
    service := micro.NewService(
        micro.Name(strings.ToLower(serviceName)),
        micro.Server(
            server.NewServer(
                server.Name(strings.ToLower(serviceName))
            ),
        ),
    )

    service.Init()

    if err := proto.RegisterSRVServiceHandler(service.Server(), new(SRVService)); err != nil {
        panic(err)
    }

    if err := service.Run(); err != nil {
        panic(err)
    }
}

SRVService 位于另一个名为 srv_service.go 的文件中(具有相同的包名),我不知道如何导入它:

package main

import (
    "context"
    proto "mypkg/proto"
)

type SRVService struct{}

func (g *SRVService) AddUser(ctx context.Context, req *proto.AddUserRequest, rsp *proto.AddUserResponse) error {
    rsp.UserId = "12312331231"
    return nil
}

我应该如何在main.go 中访问SRVService

【问题讨论】:

    标签: go interface grpc go-micro


    【解决方案1】:

    如果它们在同一个文件夹中,则它们是同一个包的一部分(它们的包声明必须反映这一点)。如果它们是同一个包的一部分,则无需导入任何内容。您可以引用包中的所有标识符(是否导出)。

    main 包很特别。如果您的main 包包含多个文件,您必须在运行或构建应用程序时列出所有文件,例如:

    go run srv_service.go main.go
    

    【讨论】:

    • 我忘了像你说的那样运行它,它可以工作,谢谢。没有其他方法可以只运行main.go 并自动获取SRVService
    • 或者干脆go run .,这样就不用一直列出所有文件了。
    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2019-09-17
    • 2016-05-30
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 2021-07-26
    相关资源
    最近更新 更多