go - 找不到我的应用程序的某些方法

标签 go

我是 GoLang 的新手,我一直在尝试创建一个包来存储有关应用程序的信息。

我对 Application 有以下结构

type Application struct {
    Environment     environment.ApplicationEnvironment
    Vendor          string
    Name            string
    Version         version.VersionDescriptor
    JsonLog         bool
    configuration   *Config
    micro           *GoMicro
}

我也有这两种方法,我遇到的问题是每当我尝试调用第二种方法时,它都会抛出以下错误

.\main.go:11:17: app.GetEnvironmentPrefix undefined (type *application.Application has no field or method GetEnvironmentPrefix)

这是我正在谈论的这两种方法:

// Get application environment type
func (application *Application) GetEnvironmentType() environment.EnvironmentType {
    return application.GetEnvironmentDetails().Type
}

// Get application environment prefix
func (application *Application) GetEnvironmentPrefix() string {
    str := strings.Replace(application.GetVendor() + "_" + application.GetName(), " ", "_", -1)
    str = strings.Replace(str, ".", "_", -1)
    return strings.ToUpper(str)
}

在实现第二种方法之前,我唯一做的就是运行了go module init。 .

我试过删除所有获取的模块,我试过 go clean (with many options) ,然而,在 go module init 之后没有实现任何方法。工作。

我必须做 go module init因为go-micro否则会抛出很多错误。

我的环境是:
  • 操作系统: window 10 1909
  • 转到版本: 1.13.4 windows/amd64
  • 开发环境: GoLand(它还管理 GOPATH,在 IDE 之外无法访问 go)

  • 附言这就是 main.go好像

    package main
    
    import (
        "fmt"
        "github.com/USERNAME_OMITTED/service/application"
    )
    
    func main() {
        app := application.CreateApplication()
        fmt.Println(app.GetEnvironmentType()) // Works just fine
        fmt.Println(app.GetEnvironmentPrefix()) // Does not work
    
    }
    
    

    附言也许它会有所帮助,这是 application.go 的完整结构repository/application/application.go 中的文件

    package application
    
    import (
        format "fmt"
        "github.com/USERNAME_OMITTED/service/context"
        "github.com/USERNAME_OMITTED/service/environment"
        "github.com/USERNAME_OMITTED/service/helpers"
        "github.com/USERNAME_OMITTED/service/log"
        "github.com/USERNAME_OMITTED/service/version"
        "github.com/sirupsen/logrus"
        "strings"
    )
    
    type Application struct {
        Environment     environment.ApplicationEnvironment
        Vendor          string
        Name            string
        Version         version.VersionDescriptor
        JsonLog         bool
        configuration   *Config
        micro           *GoMicro
    }
    
    // Create new application
    func CreateApplication() *Application {
        var Vendor string = helpers.GetEnvironmentVariable(
            "APPLICATION_VENDOR",
            "USERNAME_OMITTED",
        )
    
        var Name string = helpers.GetEnvironmentVariable(
            "APPLICATION_NAME",
            helpers.AppendTimestampToString("New Application"),
        )
    
        var Version string = helpers.GetEnvironmentVariable(
            "APPLICATION_VERSION",
            "1.0.0.0",
        )
    
        application := &Application {
            Vendor:         normalizeVendorName(Vendor),
            Name:           normalizeApplicationName(Name),
            Environment:    environment.GetApplicationEnvironment(),
            JsonLog:        false,
        }
    
        err := application.Version.UnmarshalText([]byte(Version))
        if err != nil {
            application.Version = version.DefaultVersion
        }
    
        application.initializeLogger()
    
        context.WithValue("application", application)
        return application
    }
    
    // Force application to output log in JSON format
    func (application *Application) ForceJsonLog() {
        application.JsonLog = true
        application.initializeLogger()
    }
    
    // Get application vendor name
    func (application *Application) GetVendor() string {
        return application.Vendor
    }
    
    // Get application name
    func (application *Application) GetName() string {
        return application.Name
    }
    
    // Get application version descriptor
    func (application *Application) GetVersionDescriptor() version.VersionDescriptor {
        return application.Version
    }
    
    // Get application version represented as string
    func (application *Application) GetVersion() string {
        return application.GetVersionDescriptor().String()
    }
    
    // Get application environment full details
    func (application *Application) GetEnvironmentDetails() environment.ApplicationEnvironment {
        return application.Environment
    }
    
    // Get application environment name
    func (application *Application) GetEnvironmentName() string {
        return application.GetEnvironmentDetails().Name
    }
    
    // Get application environment type
    func (application *Application) GetEnvironmentType() environment.EnvironmentType {
        return application.GetEnvironmentDetails().Type
    }
    
    // Get application environment prefix
    func (application *Application) GetEnvironmentPrefix() string {
        str := strings.Replace(application.GetVendor() + "_" + application.GetName(), "-", "_", -1)
        str = strings.Replace(str, ".", "_", -1)
        return strings.ToUpper(str)
    }
    
    // Get service name for the application
    func (application *Application) GetServiceName() string {
        return format.Sprintf("%s.%s_%s-%s",
            application.GetVendor(),
            application.GetName(),
            application.GetVersion(),
            strings.ToLower(application.GetEnvironmentName()),
        )
    }
    
    // Initialize application configuration
    func (application *Application) InitializeConfiguration() error {
        if application.configuration == nil {
            application.configuration = &Config{}
        }
        return application.configuration.Initialize(application)
    }
    
    // Initialize application as Go Micro Service
    func (application *Application) InitializeGoMicroService() error {
        microService := &GoMicro{}
        err := microService.Initialize(application)
        if err != nil {
            return err
        }
        application.micro = microService
        return nil
    }
    
    // Initialize application logger
    func (application *Application) initializeLogger() {
        logger := logrus.New()
        var customFields = logrus.Fields{}
    
        if application.JsonLog || application.Environment.Type == environment.Production {
            logger.SetFormatter(&logrus.JSONFormatter{
                FieldMap: logrus.FieldMap {
                    logrus.FieldKeyMsg:     "message",
                    logrus.FieldKeyTime:    "timestamp",
                },
            })
            customFields = logrus.Fields{
                "application": logrus.Fields{
                    "vendor": application.GetVendor(),
                    "name": application.GetName(),
                    "version": application.GetVersion(),
                    "environment": strings.ToLower(application.GetEnvironmentName()),
                },
                "service": application.GetServiceName(),
            }
        } else {
            logger.SetFormatter(&logrus.TextFormatter{
                FieldMap: logrus.FieldMap{
                    logrus.FieldKeyMsg:     "message",
                    logrus.FieldKeyTime:    "timestamp",
                },
            })
            customFields = logrus.Fields{
                "service": application.GetServiceName(),
            }
        }
    
        log.SetLogger(logger.WithFields(customFields))
    }
    
    
    // Normalize Application Vendor Name
    func normalizeVendorName(Vendor string) string {
        var newName string = strings.ToLower(Vendor)
        return newName
    }
    
    // Normalize Application Name
    func normalizeApplicationName(Name string) string {
        var newName string = strings.ToLower(Name)
        newName = strings.ReplaceAll(newName, " ", "-")
        return newName
    }
    

    最佳答案

    在您的 main.go 中,您正在导入:

        "github.com/USERNAME_OMITTED/service/application"
    

    但是你提到repository/application/application.go是应用程序包所在的位置。听起来您需要将导入语句更改为:
        "github.com/USERNAME_OMITTED/application"
    

    关于go - 找不到我的应用程序的某些方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59004009/

    相关文章:

    reactjs - 发送到我的服务器时,“使用Google登录” JWT无效

    mysql - 无法从 Golang 容器连接到 MySQL 容器

    sockets - 带有选项卡的 Golang telnet 自动完成命令

    go - 复杂数据类型作为 Go map 中的键

    go - 想要使用 Go 程序运行具有标志和参数的二进制文件

    unit-testing - 调试在命令行中工作,但在 UI 中未命中断点

    postgresql - 将字符串数组插入 postgres 文本数组字段

    google-app-engine - 使用 go 和应用引擎的数据存储导入和解析大型 CSV 文件

    linux - 如何在 Ubuntu 上设置 GOPATH 环境变量?我必须编辑什么文件?

    go - 将 XML 属性解码为命名的嵌套结构