亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang http服務器如何定義全局計數器

golang http服務器如何定義全局計數器

Go
蠱毒傳說 2021-09-10 20:51:19
我是 GoLang 的新手,想在 go-lang 中定義一個全局計數器來記錄對 http 服務器進行的查詢次數。我認為最簡單的方法是定義一個存儲當前計數的“全局”變量,并在每個查詢中增加它(為了方便起見,讓我們把并發問題放在一邊)。無論如何,這是我迄今為止計劃實現的代碼:package mainimport (    "fmt"    "net/http")count := 0 // *Error* non-declaration statement outside function bodyfunc increment() error{    count = count + 1    return nil}func mainHandler(w http.ResponseWriter, r *http.Request){    increment()    fmt.Fprint(w,count)}func main(){    http.HandleFunc("/", mainHandler)    http.ListenAndServe(":8085",nil)}如您所見,count無法在那里定義var ,它與我以前使用的 Java servlet 不同。那么我怎樣才能做到這一點呢?
查看完整描述

3 回答

?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

在函數之外,您不能使用短變量聲明:=。在定義全局變量的函數之外,您必須使用變量聲明(使用var關鍵字):

var count int

它將自動初始化為int的零值,即0。


查看完整回答
反對 回復 2021-09-10
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

計數器必須以原子方式遞增,否則您將遇到競爭條件并錯過一些計數。


聲明一個全局int64變量并使用以下sync.atomic方法訪問它:


package main


import (

    "net/http"

    "sync/atomic"

)


var requests int64 = 0


// increments the number of requests and returns the new value

func incRequests() int64 {

    return atomic.AddInt64(&requests, 1)

}


// returns the current value

func getRequests() int64 {

    return atomic.LoadInt64(&requests)

}


func handler(w http.ResponseWriter, r *http.Request) {


    incRequests()


    // handle the request here ...

}


func main() {

    http.HandleFunc("/", handler)

    log.Fatal(http.ListenAndServe(":8080", nil))

}


查看完整回答
反對 回復 2021-09-10
  • 3 回答
  • 0 關注
  • 297 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號