go - 如何在文件和结构中设置日期和日期数组

标签 go goroutine

我必须在60s之后为每个请求保存一条记录,我必须将记录保存到我的appsettings.json中,例如

09/13/2019 11:38 AM: request count last 60s : 4
09/13/2019 12:40 PM: request count last 60s : 6

在我的结构中,我将其设置为
// Appsettings struct
    Appsettings struct {
        Requests []Requests `request`
    }

    // Requests struct
    Requests struct {
        RequestDate string      `requestDate`
        Datas       []time.Time `datas`
    }

我的目标是计算60秒后的请求数并计算请求数。

如果您有任何建议,我该如何显示
09/13/2019 11:38 AM: request count last 60s : 4
09/13/2019 12:40 PM: request count last 60s : 6

并将其存储在我的文件中。

最佳答案

此示例代码:

package main

import (
    "fmt"
    "time"
)

type Requests struct {
    RequestDate string      `requestDate`
    Datas       []time.Time `datas`
}

type Appsettings struct {
    Requests []Requests `request`
}

var appsettings Appsettings

func addRequest(requestTime time.Time) {
    timeString := requestTime.Format("01/02/2006 03:04 PM")

    requestFound := false
    for key, request := range appsettings.Requests {
        if request.RequestDate == timeString {
            requestFound = true
            request.Datas = append(request.Datas, requestTime)
            appsettings.Requests[key] = request
        }
    }

    if requestFound == false {
        newRequest := Requests{
            RequestDate: timeString,
            Datas: make([]time.Time, 0),
        }
        newRequest.Datas = append(newRequest.Datas, requestTime)
        appsettings.Requests = append(appsettings.Requests, newRequest)
    }
}

func printRequests() {
    for _, request := range appsettings.Requests {
        fmt.Printf("%s: request count last 60s : %d\n", request.RequestDate, len(request.Datas))
    }
}

func main() {
    appsettings = Appsettings{}
    appsettings.Requests = make([]Requests, 0)

    requestTime, _ := time.Parse(time.RFC3339, "2006-09-13T11:04:00Z")
    addRequest(requestTime)

    requestTime, _ = time.Parse(time.RFC3339, "2006-09-13T15:04:00Z")
    addRequest(requestTime)

    requestTime, _ = time.Parse(time.RFC3339, "2006-09-13T15:04:59Z")
    addRequest(requestTime)

    requestTime, _ = time.Parse(time.RFC3339, "2006-09-13T15:05:01Z")
    addRequest(requestTime)

    printRequests()
}

重现此输出:
09/13/2006 11:04 AM: request count last 60s : 1
09/13/2006 03:04 PM: request count last 60s : 2
09/13/2006 03:05 PM: request count last 60s : 1

前往游乐场链接:https://play.golang.org/p/XqyhScHDW8R

关于go - 如何在文件和结构中设置日期和日期数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57912085/

相关文章:

go - 在 SDL Go 程序中复制纹理时出现运行时 panic

c++ - 关闭文件时会出现错误吗?

go - 有没有办法将 map 附加到 slice ?

go - 使用反射检索类型别名备用名称

memcached 显然重置连接

go - 如何最好地保持一个长时间运行的 Go 程序运行?

go - 使用 goroutine 处理退避

multithreading - 在 Go 中关闭自馈 channel

concurrency - Golang并发: how to append to the same slice from different goroutines

windows - 可以不 Hook 所有可用的 CPU 电源吗?