我是 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
否则会抛出很多错误。我的环境是:
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/