【发布时间】:2019-04-19 00:54:45
【问题描述】:
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]
这里: session, _ := mgo.Dial("mongodb://toto:titib@56.39.92.666:27017/")
我希望以全局方式在主函数之外使用该集合。
问候
【问题讨论】:
-
不要忽略
mgo.Dial()返回的错误。 -
任何时候你在 Go 中遇到问题,检查你是否忽略了它周围的任何错误,并停止忽略它们。这些错误很有可能会解释发生了什么。