小编Shr*_*Deb的帖子

dial tcp [::1]:6397: connectex: 由于目标机器主动拒绝而无法建立连接

我正在 Windows 上使用 Redis 编写一个简单的 Go Web 应用程序(第一次尝试 Redis)。我正在使用 go-redis 包连接到 Redis。

package main

import (
    "fmt"
    "net/http"
    "text/template"

    "github.com/go-redis/redis"
    "github.com/gorilla/mux"
)

var client *redis.Client
var tmpl *template.Template

func init() {
    client = redis.NewClient(&redis.Options{
        Addr:     "localhost:6397",
        Password: "",
        DB:       0,
    })
    tmpl = template.Must(template.ParseGlob("./templates/*.gohtml"))
    pong, err := client.Ping().Result()
    fmt.Println(pong, err)
}

func main() {
    router := mux.NewRouter()
    router.HandleFunc("/", indexHandler).Methods("GET")
    http.Handle("/", router)
    http.ListenAndServe(":1234", nil)
}

func indexHandler(w http.ResponseWriter, r *http.Request) {
    comments, err := client.LRange("comments", 0, 10).Result()
    check(err)
    tmpl.ExecuteTemplate(w, "index.gohtml", comments) …
Run Code Online (Sandbox Code Playgroud)

windows go redis

1
推荐指数
1
解决办法
3万
查看次数

尝试更新地图时的竞争条件

介绍

我正在尝试在 /go 中构建客户端服务器应用程序。

服务器只有一个实例,其中包含任务列表,这些任务只是字符串数据。服务器维护任务映射及其分配状态。

另一方面,客户端可以有多个实例,并向服务器请求任务。当分配任务时,服务器将分配状态更新为 true。

客户端和服务器之间的通信是通过go rpc进行的。

请参考这个图表为了更好的理解。

为了模拟多个客户端,我在单个应用程序中启动多个 go 例程,向服务器发出请求。

代码

服务器

package main

import (
    "fmt"
    "log"
    "net/http"
    "net/rpc"
    "sync"
)

type Container struct {
    mu   sync.Mutex
    list map[string]bool
}

var ListOfTasks Container

func (c *Container) UpdateList() string {
    var t string
    ListOfTasks.mu.Lock()
    defer ListOfTasks.mu.Unlock()
    for k, v := range c.list {
        if !v {
            c.list[k] = true
            fmt.Println("Task Name", k)
            return k
        }
    }
    return t
}

// RPC Code
type RPCServer struct{}

type …
Run Code Online (Sandbox Code Playgroud)

rpc go race-condition goroutine

0
推荐指数
1
解决办法
172
查看次数

标签 统计

go ×2

goroutine ×1

race-condition ×1

redis ×1

rpc ×1

windows ×1