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
以外的其他功能中使用它们。
但是我有一个:
紧急:运行时错误:无效的内存地址或nil指针 解引用[signal SIGSEGV:细分违规代码= 0x1 addr = 0x0 pc = 0x683587]
在这里: 会话,_:= mgo.Dial(“ mongodb:// toto:titib@56.39.92.666:27017 /”)
我希望以全局的方式将集合用于主要功能之外。
致谢
答案 0 :(得分:1)
我还没有广泛使用mgo
,但是我可以告诉你,忽略session, _ = mgo.Dial("mongodb://toto:titib@56.39.92.666:27017/")
的错误是一个坏主意。
session
可能是nil
,因为设置了返回的err
。