go出错: runtime error: invalid memory address or nil pointer dereference

叶艾文 发布于 2018/02/07 16:47
阅读 3K+
收藏 0

go出错:   runtime error: invalid memory address or nil pointer dereference 

原文是:

package main

import (
    "bufio"
    "errors"
    "fmt"
    "github.com/PandoCloud/pando-cloud/pkg/models"
    "github.com/PandoCloud/pando-cloud/pkg/server"
    "os"
    "strings"
)

func addVendor() error {
    args := models.Vendor{}

    reader := bufio.NewReader(os.Stdin)

    fmt.Printf("vendor name: ")
    name, err := reader.ReadString('\n')
    if err != nil {
        return err
    }
    args.VendorName = strings.Replace(name, "\n", "", -1)

    fmt.Printf("vendor description: ")
    desc, err := reader.ReadString('\n')
    if err != nil {
        return err
    }
    args.VendorDescription = strings.Replace(desc, "\n", "", -1)

    reply := &models.Vendor{}

    err = server.RPCCallByName("registry", "Registry.SaveVendor", &args, reply)
    if err != nil {
        return err
    }

    fmt.Println("=======> vendor created successfully:")
    printStruct(reply)
    fmt.Println("=======")

    return nil
}

func DoVendorCommand(args []string) error {
    if len(args) < 1 {
        return errors.New("command arguments not enough!")
    }

    op := strings.Replace(args[0], "\n", "", -1)

    switch op {
    case "add":
        if len(args) > 1 {
            return errors.New("unnecessary command arguments. just type 'vendor add'")
        }
        err := addVendor()
        if err != nil {
            return err
        }
    default:
        return errors.New("operation not suported:" + op)
    }

    return nil
}

上面代码是一个项目里的,我现在修改成下面这样

package add

import (
    "github.com/PandoCloud/pando-cloud/pkg/models"
    "github.com/PandoCloud/pando-cloud/pkg/server"
    "strings"
)

func AddVendor(vendor_name,description string) error{
    
    args := models.Vendor{}

    args.VendorName =  strings.Replace(vendor_name, "\n", "", -1)

    args.VendorDescription =  strings.Replace(description, "\n", "", -1)

    reply := &models.Vendor{}

    err := server.RPCCallByName("registry","Registry.SaveVendor",&args,reply)

    if err != nil{
        return err
    }

    return nil

}
主要是把命令行输入改成 参数输入 ,在其他地方导入add包调用函数 
出现报错:runtime error: invalid memory address or nil pointer dereference

望大佬解答,先行谢过 

加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部