我正在 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) 我正在尝试在 /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)