英文:
Go unexpected string literal
问题
这是我的Go代码,我想一切都是正确的....
package main
import (
"fmt"
"encoding/json"
"net/http"
)
type Payload struct {
Stuff Data
}
type Data struct {
Fruit Fruits
Veggies Vegetables
}
type Fruits map[string]int
type Vegetables map[string]int
func serveRest(w http.ResponseWriter, r *http.Request) {
response, err := getJsonResponse()
if err != nil {
panic(err)
}
fmt.Fprintln(w, string(response))
}
func main() {
http.HandleFunc("/", serveRest)
http.ListenAndServe("localhost:1337", nil)
}
func getJsonResponse() ([]byte, error) {
fruits := make(map[string]int)
fruits["Apples"] = 25
fruits["Oranges"] = 11
vegetables := make(map[string]int)
vegetables["Carrots"] = 21
vegetables["Peppers"] = 0
d := Data{fruits, vegetables}
p := Payload{d}
return json.MarshalIndent(p, "", " ")
}
这是我得到的错误信息:
API_Sushant.go:31: 语法错误:意外的字符串文字,期望分号、换行符或 }
有人能告诉我错误是什么吗?
希望能帮到你!
英文:
This is my code in Go and everything is right I guess....
package main
import(
"fmt"
"encoding/json"
"net/http"
)
type Payload struct {
Stuff Data
}
type Data struct {
Fruit Fruits
Veggies Vegetables
}
type Fruits map[string]int
type Vegetables map[string]int
func serveRest(w http.ResponseWriter, r *httpRequest){
response , err := getJsonResponse()
if err != nil{
panic(err)
}
fmt.println(w, string(response))
}
func main(){
http.HandleFucn("/", serveRest)
http.ListenAndServe("localhost:1337",nil)
}
func getJsonResponse() ([]byte, error){
fruits := make(map[string]int)
fruits["Apples"] = 25
fruits["Oranges"] = 11
vegetables := make(map[string]int)
vegetables["Carrots"] = 21
vegetables["Peppers"] = 0
d := Data{fruits, vegetables}
p := Payload{d}
return json.MarshalIndent(p, "", " ")
}
And this is the error I am getting
API_Sushant.go:31: syntax error: unexpected string literal, expecting semicolon or newline or }
Can anybody tell me whats the error plz ....
答案1
得分: 2
你的示例中有一些小的拼写错误。在修复这些错误后,你的示例在我这里运行时没有出现“unexpected string literal”错误。另外,如果你想将JSON写入http.ResponseWriter
,你应该将fmt.Println
更改为fmt.Fprintln
,如下面的第2部分所示。
(1)小的拼写错误
// 错误1:undefined: httpRequest
func serveRest(w http.ResponseWriter, r *httpRequest){
// 修正:
func serveRest(w http.ResponseWriter, r *http.Request){
// 错误2:cannot refer to unexported name fmt.println
fmt.println(w, string(response))
// 修正以消除错误。使用Fprintln来写入到 'w' http.ResponseWriter
fmt.Println(w, string(response))
// 错误3:undefined: http.HandleFucn
http.HandleFucn("/", serveRest)
// 修正
http.HandleFunc("/", serveRest)
(2)在HTTP响应中返回JSON
由于fmt.Println
写入标准输出,而fmt.Fprintln
写入提供的io.Writer,要在HTTP响应中返回JSON,请使用以下代码:
fmt.Fprintln(w, string(response))
英文:
There are a few minor typos in your example. After fixing those, your example ran for me without the unexpected string literal
error. Also, if you want to write the JSON to the http.ResponseWriter
, you should change fmt.Println
to fmt.Fprintln
as shown in part 2 below.
(1) Minor Typos
// Error 1: undefined: httpRequest
func serveRest(w http.ResponseWriter, r *httpRequest){
// Fixed:
func serveRest(w http.ResponseWriter, r *http.Request){
// Error 2: cannot refer to unexported name fmt.println
fmt.println(w, string(response))
// Fixed to remove error. Use Fprintln to write to 'w' http.ResponseWriter
fmt.Println(w, string(response))
// Error 3: undefined: http.HandleFucn
http.HandleFucn("/", serveRest)
// Fixed
http.HandleFunc("/", serveRest)
(2) Returning JSON in HTTP Response
Because fmt.Println
writes to standard output and fmt.Fprintln
writes to supplied io.Writer, to return the JSON in the HTTP response, use the following:
fmt.Fprintln(w, string(response))
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论