此代码可以正常编译:
return func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("tc_req_body_type") != m["request_body"] {
fmt.Println(
strings.Join([]string{"types are different", " actual:",
r.Header.Get("tc_req_body_type"), "expected:", m["request_body"]}," "))
}
if r.Header.Get("tc_resp_body_type") != m["response_body"] {
fmt.Println(
strings.Join([]string{"types are different", " actual: ",
r.Header.Get("tc_req_body_type"), " expected: ", m["request_body"]}," "))
}
fmt.Printf("Req: %s\n", r.URL.Path)
h.ServeHTTP(w, r)
}
但是如果我在fmt.Println调用的最后一个括号后面添加换行符:
return func(w http.ResponseWriter, r *http.Request) {
if r.Header.Get("tc_req_body_type") != m["request_body"] {
fmt.Println(
strings.Join([]string{"types are different", " actual:",
r.Header.Get("tc_req_body_type"), "expected:", m["request_body"]}," ")
) // <<< here
}
if r.Header.Get("tc_resp_body_type") != m["response_body"] {
fmt.Println(
strings.Join([]string{"types are different", " actual: ",
r.Header.Get("tc_req_body_type"), " expected: ", m["request_body"]}," ")
) // <<< here
}
fmt.Printf("Req: %s\n", r.URL.Path)
h.ServeHTTP(w, r)
}
现在它无法编译,这是什么原因?我在第二个代码示例中的差异旁边添加了一条注释,也只是写了更多的b / c,它说我的问题有太多代码,没有足够的单词谢谢。
答案 0 :(得分:3)
The Go Programming Language Specification
形式语法使用分号“;”作为许多终结者 生产。 Go程序可以使用 以下两个规则:
- 之一
当输入被分解成令牌时,在一行的最后一个令牌之后立即将分号自动插入令牌流中 如果该令牌是
。标识符
。整数,浮点数,虚数,符文或字符串文字
。关键字之一中断,继续,失败或返回
。运算符和标点符号++,-,),]或}
要允许复杂的语句占据一行,可以在结束“)”或“}”之前省略分号。
语法错误:换行符意外,应使用逗号或
在参数列表行的末尾添加逗号,以避免自动插入分号。
r.Header.Get("tc_req_body_type"), "expected:", m["request_body"]}, " "),
)
r.Header.Get("tc_req_body_type"), " expected: ", m["request_body"]}, " "),
)