gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 03:18:43 25 4
gpt4 key购买 nike

背景

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

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

这发生了 here :

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: call of reflect.Value.Type on zero Value。传递 Config 字面值都行不通(然后它提示说它无法映射到非指针结构),也传递一个初始化的指针(signal SIGSEGV: segmentation violation).

这是 function declaration

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

它需要什么作为输入,为什么 apcore 框架在失败时以这种方式使用它?

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

最佳答案

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

改为做

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

关于pointers - go-ini 的 mapTo 函数的正确使用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57204029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com