0

This code has two roles and each of them contains different messages according to the role.

But I took cmd *cobra.Command as a variable in the StringCode() function because I don't want it to call it everywhere as a parameter. cmd is required for this flag cmd.Flags().GetString(value). That's why I just used it in the GetString() function but it is giving me the following error.

Error

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x158 pc=0x53a318]

Code

role.go

import (
    "errors"
    "fmt"

    "github.com/spf13/cobra"
)

var Admin string
var Developer string

func StringCode(value string) string {
    var cmd *cobra.Command
    var stringResult string
    stringResult, _ = cmd.Flags().GetString(value)
    return stringResult
}

func GetRoles() []string {
    var role [2]string
    role[0] = StringCode("admin")
    role[1] = StringCode("developer")
    result := []string{role[0], role[1]}
    return result
}

func RoleCondition() {
    role := GetRoles()
    if role[0] == "bilal" {
        fmt.Println("It is an admin")
    } else if role[1] == "khan" {
        fmt.Println("It is a developer")
    } else {
        fmt.Println("wrong entry")
    }
}

// roleCmd represents the role command
var roleCmd = &cobra.Command{
    Use: "role",
    Short: `It contains different roles in a company like admin, developer, etc. These roles have different rights 
and they all function according to those roles.`,
    Args: func(cmd *cobra.Command, args []string) error {
        designation := GetRoles()
        if designation[0] == "" && designation[1] == "" && len(args) < 1 {
            return errors.New("accept(s) 1 argument, received 0")
        }
        return nil
    },
    Run: func(cmd *cobra.Command, args []string) {
        RoleCondition()
    },
}

func init() {
    rootCmd.AddCommand(roleCmd)
    roleCmd.PersistentFlags().StringVarP(&Admin, "admin", "a", "", "An admin to get access to")
    roleCmd.PersistentFlags().StringVarP(&Developer, "developer", "d", "", "A developer to get access to")
}
Veins Tree
  • 83
  • 5
  • 1
    You can't just define a new variable and expect it to magically have the value you want. Can you explain why you think this should work, then maybe someone can show where your understanding has gone astray – Richard Huxton Aug 24 '22 at 06:35
  • I used `cmd` with this `cmd.Flags().GetString(value)` and this flag is equal to a variable that is used in other functions. – Veins Tree Aug 24 '22 at 06:47

0 Answers0