我只是和Go玩了一会儿来学习处理方法。
我有一个主要的围棋程序。我为数据库模块创建了一个子文件夹,因为我想做数据库操作。
对于参数,我有一个带有凭据等的struct类型。如何将结构传递给模块?
我需要配置结构中所需的所有配置和全局变量,并在需要时将其传递给模块。
这是一个实现目标的好方法吗?谢谢你的帮助。
./main.go
package main
import (
//...
"github.com/wyrdnixx/go-server/src/go-server/dbapi"
)
func handlerTest(w http.ResponseWriter, r *http.Request) {
log.Println("INFO: /test was requested...")
dbapi.Test(&AppConfig)
}
func main() {
http.HandleFunc("/test", handlerTest)
AppConfig = ReadConfig()
log.Fatal(http.ListenAndServe(AppConfig.ApiPort, nil))
}
type Configuration struct {
ApiPort string
DBHost string
DBPort string
DBUser string
DBPassword string
DBName string
Info string
}
var AppConfig = Configuration{}
func ReadConfig() Configuration {
err := gonfig.GetConf("./config.development.json", &AppConfig)
if err != nil {
fmt.Println("ERROR: Config konnte nicht geladen werden: ", err.Error())
}
return AppConfig
}./dbapi/test.go
package dbapi
import (
// ...
)
func Test (w http.ResponseWriter, Appconfig /* ?!? */) error {
fmt.Println("Test: " + Appconfig.DBUser)
}发布于 2019-08-25 10:33:34
在主目录下创建另一个包,将其命名为types或您想要的任何东西。就像咆哮:

将structure对象移动到types.go
package types
type Configuration struct {
ApiPort string
DBHost string
DBPort string
DBUser string
DBPassword string
DBName string
Info string
}现在您可以从您的main.go和dbapi/test.go访问它。
main.go:
package main
import "... .../code/types"
func handlerTest(w http.ResponseWriter, r *http.Request) {
log.Println("INFO: /test was requested...")
dbapi.Test(&AppConfig)
}
func main() {
http.HandleFunc("/test", handlerTest)
AppConfig = ReadConfig()
log.Fatal(http.ListenAndServe(AppConfig.ApiPort, nil))
}
var AppConfig = types.Configuration{}
func ReadConfig() types.Configuration {
err := gonfig.GetConf("./config.development.json", &AppConfig)
if err != nil {
fmt.Println("ERROR: Config konnte nicht geladen werden: ", err.Error())
}
return AppConfig
}dbapi.go:
package dbapi
import "... .../code/types"
func Test (w http.ResponseWriter, Appconfig *types.Configuration) error {
fmt.Println("Test: " + Appconfig.DBUser)
}发布于 2019-08-25 10:31:04
AppConfig对您的测试函数的类型配置结构,这是您已经声明在您的主包。由于go不支持循环依赖项,所以不能将配置结构导入dbapi包以在其中使用它。因此,我将从主包中移出配置结构,并在dbapi包中声明它。
package dbapi
import (...)
type Configuration struct {
ApiPort string
DBHost string
DBPort string
DBUser string
DBPassword string
DBName string
Info string
}
func Test (w http.ResponseWriter, Appconfig *Configuration) error {
fmt.Println("Test: " + Appconfig.DBUser)
}然后,通过从dbapi包导入配置结构,可以在main中使用它。
var AppConfig = dbapi.Configuration{}所以,您的主包应该如下所示:
package main
import(
...
"github.com/wyrdnixx/go-server/src/go-server/dbapi"
)
func handlerTest(w http.ResponseWriter, r *http.Request) {
log.Println("INFO: /test was requested...")
dbapi.Test(&AppConfig)
}
func main() {
http.HandleFunc("/test", handlerTest)
AppConfig = ReadConfig()
log.Fatal(http.ListenAndServe(AppConfig.ApiPort, nil))
}
var AppConfig = dbapi.Configuration{}
func ReadConfig() dbapi.Configuration {
err := gonfig.GetConf("./config.development.json", &AppConfig)
if err != nil {
fmt.Println("ERROR: Config konnte nicht geladen werden: ", err.Error())
}
return dbapi.AppConfig
}https://stackoverflow.com/questions/57645059
复制相似问题