将结构映射到go中的函数

将结构映射到go中的函数,go,Go,我无法确定是什么语法错误阻止我将路由结构映射到函数 我得到这个错误: ./main.go:24:26:语法错误:意外{,应为( ./main.go:25:8:语法错误:意外{,应为逗号或) 类型不是func,而是func() 您需要处理url.Parse的错误 有一个重构代码: import ( "net/url" ) type Route struct{ filepath string url url.URL } func hello(){

我无法确定是什么语法错误阻止我将路由结构映射到函数

我得到这个错误:

./main.go:24:26:语法错误:意外{,应为(

./main.go:25:8:语法错误:意外{,应为逗号或)

  • 类型不是
    func
    ,而是
    func()
  • 您需要处理
    url.Parse
    的错误
  • 有一个重构代码:

    import (
        "net/url"
    )
    
    type Route struct{
        filepath string
        url url.URL
    }
    
    func hello(){
        fmt.Println("Hello World")
    }
    
    func main() {
    
        routes := map[Route]func{
            Route{url.Parse("/home"), "/var/www/index.html"} : hello
        }
    
    }
    

    如果您不知道输入配置,使用panic的解决方案可能不是最好的。

    第一个错误是告诉您需要什么,
    func
    不是一个类型,但是
    func()
    是。我找到了一些。url.Parse(/home”)返回err,而url。它试图为一个2参数的路由结构返回3个参数。Structs没有“参数”,路径和URL在结构声明中的顺序错误,URL.Parse返回一个
    *URL.URL
    和一个
    错误
    ,而不是
    URL.URL
    。您可能需要签出包含大量基本信息的。
    package main
    
    import (
        "fmt"
        "net/url"
    )
    
    type Route struct {
        filepath string
        url      *url.URL
    }
    
    func hello() {
        fmt.Println("Hello World")
    }
    
    func mustParse(rawURL string) *url.URL {
        parsedURL, err := url.Parse(rawURL)
        if err != nil {
            panic(err)
        }
        return parsedURL
    }
    
    func main() {
    
        routes := map[Route]func(){
    
            Route{"/var/www/index.html", mustParse("/home")}: hello,
        }
    
        fmt.Printf("routes: %+v\n", routes)
    
    }