登录
首页 >  Golang >  Go问答

go-ini的mapTo函数的正确使用方法是什么?

来源:stackoverflow

时间:2024-04-17 23:09:36 266浏览 收藏

本篇文章主要是结合我之前面试的各种经历和实战开发中遇到的问题解决经验整理的,希望这篇《go-ini的mapTo函数的正确使用方法是什么?》对你有很大帮助!欢迎收藏,分享给更多的需要的朋友学习~

问题内容

背景

我正在尝试使用 go-fed 的 apcore 框架来构建联合应用程序。我已经实现了 apcore.application 接口,但在加载配置过程中卡住了。

当尝试将从 config.ini 加载的配置映射到 apcore 配置结构时,服务器以 panic: reflect: call of reflect.value.type on zero value 进行响应。

这发生在这里:

func loadconfigfile(filename string, a application, debug bool) (c *config, err error) {
    infologger.infof("loading config file: %s", filename)
    var cfg *ini.file
    cfg, err = ini.load(filename)
    if err != nil {
        return
    }
    err = cfg.mapto(c)
    if err != nil {
        return
    }
.
.
.

它显然只使用了未初始化的 *config 指针。这让我相信这与我编写的代码(application 的实现)无关,该代码尚未在此处使用。

问题

我决定编写一个非常简单的 mapto 用例来检查它是否按我的预期工作:

package main

import (
    "fmt"
    "gopkg.in/ini.v1"
)

type config struct {
    name      string `ini:"name"`
    male      bool
    age       int `comment:"author's age"`
    gpa       float64
}

func main() {
    var cfg *ini.file
    var err error
    cfg, err = ini.load("config.ini")
    var c *config
    // c := &config{ name: "test", male: true, age: 13, gpa: 4.5 }
    // c := new(config)
    fmt.println(c);
    err = cfg.mapto(c)
    fmt.println(err.error())
}

这也会返回 panic: reflect: 对零 value 调用 reflect.value.type。传递 config 文字都不起作用(然后它抱怨 无法映射到非指针结构 ),也没有传递初始化指针(signal sigsegv:分段违规 )。

这是函数声明

func (s *Section) mapTo(val reflect.Value, isStrict bool) error {

它需要什么作为输入?如果失败,为什么 apcore 框架会这样使用它?

(我也尝试过使用较旧的 go-ini,以防万一这是最近的错误)


解决方案


var c *config 为您提供 *config 类型的 nil 指针,这会导致取消引用恐慌。

改为这样做

var foo Config
c := &foo //which give you a non-nil pointer to zero struct
err = cfg.MapTo(c)
...

以上就是《go-ini的mapTo函数的正确使用方法是什么?》的详细内容,更多关于的资料请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>