代码之家  ›  专栏  ›  技术社区  ›  Bussiere

无效的内存地址或与mgo的零指针取消引用

  •  0
  • Bussiere  · 技术社区  · 6 年前
    package main
    
    import (
        "encoding/json"
        "fmt"
        "io/ioutil"
        "net/http"
        "github.com/gorilla/handlers"
        "github.com/gorilla/mux"
        "gopkg.in/mgo.v2"
    )
    
    type DataIg struct {
        Member string `json:"Member"`
        Timestamp float64 `json:"Timestamp"`
        Name string `json:"Name"`
        Bid string `json:"Bid"`
        Offer string`json:"Offer"`
        Change string `json:"Change"`
        Hour  string `json:"Hour"`
    }
    
    type Response struct {
        Status string
    }
    
    var session *mgo.Session
    var c *mgo.Collection
    
    func postData(w http.ResponseWriter, r *http.Request) {
        var response  = Response{}
        response.Status = "ok"
        var reception = DataIg{}
    
        err := c.Insert(reception)
    
        body, err := ioutil.ReadAll(r.Body)
        if err != nil {
            panic(err)
        }
        err = json.Unmarshal(body, &reception)
        fmt.Println(reception)
        js, err := json.Marshal(response)
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
    
        w.Header().Set("Content-Type", "application/json")
        w.Write(js)
    }
    
    var appName = "accountservice"
    
    func main() {
        session, _ := mgo.Dial("mongodb://toto:titib@56.39.92.666:27017/")
        session.SetMode(mgo.Monotonic, true)
        c = session.DB("database").C("igData")
        fmt.Printf("Starting %v\n", appName)
        router := mux.NewRouter()
        router.HandleFunc("/postData", postData).Methods("POST")
        corsObj := handlers.AllowedOrigins([]string{"*"})
        http.ListenAndServe(":8066", handlers.CORS(corsObj)(router))
        defer session.Close()
    }
    

    我正在努力使 session c )在其他函数中使用它们,而不是 PostData .

    但我有一个:

    解引用[信号SIGSEGV:分段冲突代码=0x1地址=0x0 pc=0x683587]

    会话:=mgo拨号("mongodb://toto:titib@56.39.92.666:27017/")

    当做

    1 回复  |  直到 6 年前
        1
  •  2
  •   poy    6 年前

    我没用过 mgo 但是我可以告诉你忽略 session, _ = mgo.Dial("mongodb://toto:titib@56.39.92.666:27017/") 是个坏主意。

    很可能 session nil err 已设置。