Go 构建多维阵列响应
我正在尝试创建这样的响应:Go 构建多维阵列响应,go,multidimensional-array,go-map,Go,Multidimensional Array,Go Map,我正在尝试创建这样的响应: "GameController" => [ "methods" => [ "get", "post", "put", "delete" ], ] 以下是我为此编写的脚本: 梅因,加油 package main import ( "fmt&
"GameController" => [
"methods" => [
"get",
"post",
"put",
"delete"
],
]
以下是我为此编写的脚本:
梅因,加油
package main
import (
"fmt"
"openapi/parse"
)
func main() {
controllers := []string{"GameController", "CardController", "ShuffleController"}
fmt.Println(parse.GetHTTPMethods(controllers))
}
get_http_methods.go
package parse
import (
"bufio"
"fmt"
"os"
"strings"
)
// GetHTTPMethods will return the available http methods of each controller
func GetHTTPMethods(controllers []string) map[string][]string {
allcontrollers := map[string][]string{}
for _, filename := range controllers {
allcontrollers[filename] = SearchMethod(filename)
}
return allcontrollers
}
//SearchMethod will read each controller and search for available http methods
func SearchMethod(filename string) map[string][]string {
path := "../hbapi/application/controllers/" + filename + ".php"
method := map[string][]string{}
f, err := os.Open(path)
if err != nil {
fmt.Println("Error : ", err)
os.Exit(1)
}
defer f.Close()
scanner := bufio.NewScanner(f)
for scanner.Scan() {
if strings.Contains(scanner.Text(), "Get") {
method["method"] = append(method["method"], "get")
}
if strings.Contains(scanner.Text(), "Post") {
method["method"] = append(method["method"], "post")
}
if strings.Contains(scanner.Text(), "Put") {
method["method"] = append(method["method"], "put")
}
if strings.Contains(scanner.Text(), "Delete") {
method["method"] = append(method["method"], "delete")
}
}
if err := scanner.Err(); err != nil {
fmt.Println("Error : ", err)
os.Exit(1)
}
return method
}
但此脚本显示以下错误。如何修复此错误?请给我一些建议
无法使用SearchMethod(文件名)(类型映射[string][]string)作为类型
[]分配中的字符串go
错误显示在这一行allcontrollers[filename]=
SearchMethod(文件名)
由于您定义var“allcontrollers”的方式,因此会出现该错误。您应该将其定义为以下内容:
allcontrollers := map[string](map[string][]string){}
这样,问题就可以解决了。由于定义var“allcontrollers”的方式,您会遇到这个错误。您应该将其定义为以下内容:
allcontrollers := map[string](map[string][]string){}
这样,问题就解决了。在最后一个文件中,不需要将方法保留为map[string][]string{},因为您只需要填充
方法
键。如果将函数签名更改为SearchMethod(filename string)[]string
和method:=[]string{}
,并改为附加到该签名,则该签名应按预期工作。或者,您只能更改:allcontrollers[filename]=SearchMethod(filename)[“method,但是,您没有使用SearchMethod的其余部分返回了映射键。将var方法更改为method:=[]字符串{}
不允许我这样追加:method[“method”]=append(method[“method”],“post”)
。它正在显示非整数切片索引“方法”
error这实际上修复了错误,但最终响应中缺少索引“方法”allcontrollers[filename]=SearchMethod(filename)[“method”]
Response:map[BrandController:[get]BrowserController:[get post put delete]MemberController:[get post put]]
您可以创建另一个包含字符串数组的结构。请参见上一个文件,由于只填充方法
键,因此不需要将方法保留为map[string][]string{}。如果将函数签名更改为SearchMethod(filename string)[]string
和method:=[]string{}
,并改为附加到该签名,则该签名应按预期工作。或者,您只能更改:allcontrollers[filename]=SearchMethod(filename)[“method,但是,您没有使用SearchMethod的其余部分返回了映射键。将var方法更改为method:=[]字符串{}
不允许我这样追加:method[“method”]=append(method[“method”],“post”)
。它正在显示非整数切片索引“方法”
error这实际上修复了错误,但最终响应中缺少索引“方法”allcontrollers[filename]=SearchMethod(filename)[“method”]
Response:map[BrandController:[get]BrowserController:[get post put delete]MemberController:[get post put]]
您可以创建另一个包含字符串数组的结构。再见,非常感谢!这解决了我的问题。非常感谢!这解决了我的问题。