dpwu16132 2015-05-24 19:23
浏览 62
已采纳

Golang:如何在尚未初始化的结构上使用指针

So I was looking at the file here.

They call record := &accessLog but they don't ever Initialize it as a variable first and if they do it that way if there are multiple simultaneous connections is there a possibility record will get over written with somebody else's data?

type accessLog struct {
ip, method, uri, protocol, host     string
elapsedTime                         time.Duration
}

func LogAccess(w http.ResponseWriter, req *http.Request, duration time.Duration) {
clientIP := req.RemoteAddr

if colon := strings.LastIndex(clientIP, ":"); colon != -1 {
    clientIP = clientIP[:colon]
}

record := &accessLog{
    ip:             clientIP,
    method:         req.Method,
    uri:            req.RequestURI,
    protocol:       req.Proto,
    host:           req.Host,
    elapsedTime:    duration,
}

writeAccessLog(record)
}
  • 写回答

1条回答 默认 最新

  • douyinjiao9351 2015-05-24 19:36
    关注

    Go is a garbage collected language. The struct the pointer is pointing to will be valid as long as there's a reference to it. Multiple connections have nothing to do with this, as this creates a new record every time LogAccess is called, and if you follow the code in question you'll see that the reference lives at least to the end of writeAccessLog, possibly longer depending on the implementation of glog.Infoln.

    To be clear &someType { ... fields ...} creates a new (unnamed) instance of someType, and then returns the address of that instance.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢
  • ¥15 不小心不正规的开发公司导致不给我们y码,
  • ¥15 我的代码无法在vc++中运行呀,错误很多
  • ¥50 求一个win系统下运行的可自动抓取arm64架构deb安装包和其依赖包的软件。
  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥30 ppOCRLabel导出识别结果失败
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题