返回顶部
首页 > 资讯 > 后端开发 > GO >将结构体类型传递给模块的函数方式是什么?
  • 556
分享到

将结构体类型传递给模块的函数方式是什么?

2024-04-04 23:04:02 556人浏览 安东尼
摘要

哈喽!今天心血来潮给大家带来了《将结构体类型传递给模块的函数方式是什么?》,想必大家应该对golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错

哈喽!今天心血来潮给大家带来了《将结构体类型传递给模块的函数方式是什么?》,想必大家应该对golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我只是玩了一下 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)
}


解决方案


在主目录下创建另一个包,将其命名为 types 或任何你想要的名称。就像下面这样:

struct 对象移动到 types.go

package types

type configuration struct {
    apiport    string
    dbhost     string
    dbport     string
    dbuser     string
    dbpassword string
    dbname     string
    info       string
}

现在您可以从 main.godbapi/test.go 访问它。

ma​​in.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)
}

appconfig 位于您已在主包中声明的配置结构类型的测试函数上。由于 go 不支持循环依赖,因此您无法将 configuration 结构导入 dbapi 包中以在其中使用它。因此,我将从主包中移出 configuration 结构并在 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 中的 configuration 结构。

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
}

今天关于《将结构体类型传递给模块的函数方式是什么?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在编程网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

您可能感兴趣的文档:

--结束END--

本文标题: 将结构体类型传递给模块的函数方式是什么?

本文链接: https://lsjlt.com/news/595688.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 将结构体类型传递给模块的函数方式是什么?
    哈喽!今天心血来潮给大家带来了《将结构体类型传递给模块的函数方式是什么?》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错...
    99+
    2024-04-04
  • 将具有精确约束的类型参数传递给具有该参数的函数?
    问题内容 我开始使用 go 泛型,但很难理解为什么这段代码无法编译: func f(string) {} func xyz[T string](p T) { f(p) // ...
    99+
    2024-02-06
  • PHP 函数的参数传递方式有哪些?它的类型?
    php函数的参数传递方式:值传递:函数内修改对原值无影响。引用传递:函数内修改会影响原值。类型提示可指定传递方式,如按值传递:function myfunction(int $value...
    99+
    2024-04-15
    php 参数传递
  • go结构体强制类型转换的方法是什么
    在Go语言中,结构体之间的强制类型转换需要使用类型断言。类型断言的语法如下:```govalue, ok := expression...
    99+
    2023-08-08
    go
  • java中类之间的数据传递方式是什么
    本篇内容介绍了“java中类之间的数据传递方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!java 类之间的数据传递虽然最开始学ja...
    99+
    2023-06-25
  • 如何将任何类型的数据值传递到 Golang 中的 GRPC Protobuf 结构中?
    php小编新一为您介绍如何将任何类型的数据值传递到Golang中的GRPC Protobuf结构中。GRPC Protobuf是一种高效的数据传输协议,但是默认情况下只支持有限的数据类...
    99+
    2024-02-09
  • DBMS体系结构的三种类型分别是什么
    这篇文章主要介绍了 DBMS体系结构的三种类型分别是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。DBMS体系结构有三种类型,分别为:单层架...
    99+
    2024-04-02
  • vue-router参数传递的方式是什么
    本篇内容介绍了“vue-router参数传递的方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!vue-router传递参数分为两大类...
    99+
    2023-07-04
  • PHP 函数的参数传递方式有什么限制?
    php 函数参数传递方式:按值传递(副本)和按引用传递(原始变量);限制:只能按引用传递变量且必须赋值。 PHP 函数的参数传递方式及限制 参数传递方式 PHP 中有两种主要的参数传递...
    99+
    2024-04-15
    php 函数参数传递
  • Java虚拟机的体系结构和内存模型是什么
    这篇文章主要介绍“Java虚拟机的体系结构和内存模型是什么”,在日常操作中,相信很多人在Java虚拟机的体系结构和内存模型是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java虚拟机的体系结构和内存模型...
    99+
    2023-06-17
  • qt类之间传递数据的方法是什么
    在Qt中,有多种方法可以在类之间传递数据,以下是一些常见的方法:1. 使用信号和槽机制: Qt的信号和槽机制是一种方便的方法,它允许...
    99+
    2023-10-18
    qt
  • Python函数值传递、引用传递、形式参数和实际参数的区别是什么
    本篇内容主要讲解“Python函数值传递、引用传递、形式参数和实际参数的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python函数值传递、引用传递、形式参数和实际参数的区别是什么”...
    99+
    2023-06-30
  • python不同类间参数传递的方法是什么
    在Python中,不同类间的参数传递可以通过以下几种方法实现:1. 构造函数:通过在一个类的构造函数中传递参数,然后在另一个类的对象...
    99+
    2023-09-27
    python
  • Java结构体数组复制的方法是什么
    在Java中,结构体数组通常可以用类的数组来表示。要复制一个结构体数组,可以使用Arrays类的copyOf()方法来复制。该方法将...
    99+
    2024-03-11
    Java
  • 泛型类与函数模板的区别是什么?
    泛型类定义新数据类型,而函数模板定义算法。泛型类通过指定类型参数实例化,函数模板通过调用实例化。泛型类可以继承,而函数模板不能。 泛型类与函数模板的区别 泛型类和函数模板都是 C++ ...
    99+
    2024-04-24
    泛型 函数模板 c++ 作用域
  • PHP 函数的参数传递方式分别有什么优缺点?
    php 函数参数传递方式有值传递和引用传递。值传递创建参数值的副本,不影响原始值,适用于保护原始值、并发执行和参数验证。引用传递允许函数直接修改原始值,提高性能,但需谨慎使用,避免副作用...
    99+
    2024-04-15
    php 参数传递
  • redis的五种数据类型底层数据结构是什么
    redis 提供了五种数据类型,每种类型对应特定的底层数据结构:字符串:简单动态字符串(sds),优化二进制安全字符串存储。哈希:哈希表(dict),快速键值对存储。列表:双向链表或压缩...
    99+
    2024-04-08
    键值对
  • 数据库三级模式体系结构的划分有什么用
    这篇文章主要介绍了数据库三级模式体系结构的划分有什么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数据库三级模式体系结构的划分,有利于保持...
    99+
    2024-04-02
  • linux下与时间有关的函数和结构体是什么
    本篇内容介绍了“linux下与时间有关的函数和结构体是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!时间类型。Linux下常用的时间类型...
    99+
    2023-06-04
  • 数据库管理系统的关系模型结构是什么
    了解数据库管理系统的关系模型结构是什么?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!关系数据库管理系统所管理的关系是若干个...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作