无法使用 viper 解组

我一直在尝试通过解组我的 json 文件来提取一些 JSON,但是,我不知道为什么它没有发生。我能够使用viper.AllSettings()但不能通过解组来获取数据。我认为我犯了一个愚蠢的错误,请分享您的想法。github链接是-https: //github.com/parthw/100-days-of-code/tree/main/golang/d6-cobra-viper-continued,代码如下。


main.go


package main


import (

    "fmt"


    "example.com/cobra-viper/cmd"

    "github.com/spf13/viper"

)


// Myconfig example

type Myconfig struct {

    username string `mapstructure:"username"`

}


func main() {

    cmd.Execute()

    fmt.Println("I can print this ", viper.AllSettings())

    var mc Myconfig

    if err := viper.Unmarshal(&mc); err != nil {

        fmt.Println(err)

    }

    fmt.Println(mc)

}

在 cmd 目录中使用 cobra CLI 生成的代码:


package cmd


import (

    "fmt"

    "os"


    "github.com/spf13/cobra"


    homedir "github.com/mitchellh/go-homedir"

    "github.com/spf13/viper"

)


var (

    cfgFile string

    author  string

)


// Myconfig example

type Myconfig struct {

    username string

}


// rootCmd represents the base command when called without any subcommands

var rootCmd = &cobra.Command{

    Use:   "cobra-viper",

    Short: "A brief description of your application",

    Long: `A longer description that spans multiple lines and likely contains

examples and usage of using your application. For example:


Cobra is a CLI library for Go that empowers applications.

This application is a tool to generate the needed files

to quickly create a Cobra application.`,

    // Uncomment the following line if your bare application

    // has an action associated with it:

    Run: func(cmd *cobra.Command, args []string) {

        fmt.Println("Welcome to rootcmd")


        var mc Myconfig

        if err := viper.Unmarshal(&mc); err != nil {

            fmt.Println(err)

        }

        fmt.Println(mc)

        fmt.Println("I can print this ", viper.AllSettings())

    },

}


翻阅古今
浏览 212回答 1
1回答

斯蒂芬大帝

您的问题归结为一个事实,即您的结构中的username字段是否已导出。MyConfig它需要大写才能“导出”Unmarshal以将值解码到结构中。type Myconfig struct {     Username string `mapstructure:"username"     }您可以查看JSON 并处理未导出的字段,以更多地了解json包需要它的原因。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go