go - 如何将结构类型传递给模块函数?
问题描述
我只是玩了一点 Go 来学习处理。
我有一个主要的围棋程序。我为数据库模块创建了一个子文件夹,我想做数据库操作。
对于参数,我有一个带有凭据等的结构类型。如何将结构传递给模块?
我想要配置结构中所需的所有配置和全局变量,并在需要时将其传递给模块。
这是实现目标的好方法吗?谢谢您的帮助。
./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)
}
解决方案
AppConfig 在您的配置结构类型的测试函数上,您已在主包中声明。由于 go 不支持循环依赖,因此您无法将 Configuration struct 导入 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
}
推荐阅读
- multithreading - 为什么外键 + 主键的这种组合会产生 Postgres 死锁?
- javascript - 如何从谷歌应用脚本中的 JSON 数组获取数据?
- javascript - _valueable 名称(下划线 + 有价值的名称) javascript
- android - Android阻止滚动视图滚动到videoView
- ruby-on-rails - mac上用于rails的Docker容器非常慢
- php - 为什么 Laravel b64-encode 加密数据?
- python - 使用 python 连接到 OpenVPN 配置
- java - 如何使这个程序在 Java 的末尾显示正确的值?
- react-native - React Native Expo 视频 av-expo
- generics - Kotlin:传递 Gson 使用的类型