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]]
您可以创建另一个包含字符串数组的结构。再见,非常感谢!这解决了我的问题。非常感谢!这解决了我的问题。