go - 使用 mgo 的无效内存地址或 nil 指针取消引用
问题描述
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 指针取消引用 [信号 SIGSEGV:分段违规代码 = 0x1 地址 = 0x0 pc = 0x683587]
这里:会话,_ := mgo.Dial("mongodb://toto:tiib@56.39.92.666:27017/")
我希望以全局方式在主函数之外使用该集合。
问候
解决方案
我没有mgo
广泛使用,但是我可以告诉你,忽略错误session, _ = mgo.Dial("mongodb://toto:titib@56.39.92.666:27017/")
是一个坏主意。
这可能session
是nil
因为返回err
的设置。
推荐阅读
- azure-cosmosdb - Cosmos Table API 与 ETag 的并发 If-Match 选项
- python - 如何在列表中附加不同的返回值
- python - 从python字符串重新转换为浮点值列表
- javascript - 使用 d3.js 创建网络图
- r - 使用搜索条件从 PDF 中提取文本
- python - mongodb中使用db.command的唯一索引
- apache-spark - pyspark根据流数据的groupby列获取不同的值
- python - 如何使用 XML 避免双重转义
- spring-boot - Logback - 为记录器/日志级别定义许多 Appender/Pattern
- python - ModuleNotFoundError:没有名为“bokeh.plotting.helpers”的模块与 bkcharts