我在尝试找到有关如何在样式表中正确编写CSS规则的任何具体细节时遇到问题,其中类或ID嵌套在许多其他ID和样式中,例如
.mainbody #container #header #toprightsearch .searchbox {}
Run Code Online (Sandbox Code Playgroud)
所以这里我们searchbox在一个toprightsearchID,一个标题ID,一个容器ID和一个mainbody类中有一个类.
但是如果我省略了一些ID,它似乎可以正常工作.
列出这些的正确方法是什么?
如果我包括所有的父母,它是否更具体?如果我不包括所有浏览器,它会在不同的浏览器上出错吗?
关于这个主题的任何其他信息将不胜感激.
谢谢
也许我只是没有正确阅读规范或者我的思维方式仍然坚持使用较旧的同步方法,但是Go 中发送一种类型作为响应接收其他类型的正确方法是什么?
我提出的一种方法是
package main
import "fmt"
type request struct {
out chan string
argument int
}
var input = make(chan *request)
var cache = map[int]string{}
func processor() {
for {
select {
case in := <- input:
if result, exists := cache[in.argument]; exists {
in.out <- result
}
result := fmt.Sprintf("%d", in.argument)
cache[in.argument] = result
in.out <- result
}
}
}
func main() {
go processor()
responseCh := make(chan string)
input <- &request{
responseCh,
1,
}
result …Run Code Online (Sandbox Code Playgroud) 在WebSocket之前的阶段中,我一直在设置和检索Cookie以识别用户。我以为一切都可以通过典型的HTTP交换工作。
这在我测试过的所有浏览器上都可以正常使用,但是有报道说,在iPhone上根本不会保留登录,这表明未设置cookie或将cookie发送回服务器。
// fret not, safety checks removed for brevity
const (
sessionKeyCookieName string = "session-key"
webSocketPath string = "/ws"
)
func serveWs(w http.ResponseWriter, r *http.Request) {
var sessionKey [sha1.Size]byte
var u *user
for _, cookie := range r.Cookies() {
if cookie.Name != sessionKeyCookieName {
continue
}
slice, err := base64.StdEncoding.DecodeString(cookie.Value)
if err != nil {
continue
} else {
copy(sessionKey[:], slice)
}
}
u, _ = getUserBySessionKey(sessionKey)
// regenerate key. TODO: does that add security?
rand.Read(sessionKey[:])
header …Run Code Online (Sandbox Code Playgroud)