使用 mgo 的无效内存地址或 nil 指针取消引用
Posted
技术标签:
【中文标题】使用 mgo 的无效内存地址或 nil 指针取消引用【英文标题】:invalid memory address or nil pointer dereference with mgo 【发布时间】: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 中遇到问题,检查你是否忽略了它周围的任何错误,并停止忽略它们。这些错误很有可能会解释发生了什么。
【参考方案1】:
我没有广泛使用mgo
,但是我可以告诉你,忽略来自session, _ = mgo.Dial("mongodb://toto:titib@56.39.92.666:27017/")
的错误是个坏主意。
很可能session
是nil
,因为返回的err
已设置。
【讨论】:
以上是关于使用 mgo 的无效内存地址或 nil 指针取消引用的主要内容,如果未能解决你的问题,请参考以下文章
无法生成 ngrokpanic:运行时错误:无效的内存地址或 nil 指针取消引用
k6:WARpanic:运行时错误:无效的内存地址或 nil 指针取消引用
为啥 gorm db.First() 会因“无效的内存地址或 nil 指针取消引用”而恐慌? [复制]