go - 语法错误函数返回值

标签 go

func main(){
    ...

    err := http.ListenAndServe(":9000", access_log(r))
    if err != nil {
        log.Fatal("HTTP server: ", err)
    }
}

func access_log(r http.Handler) {
    f, err := os.OpenFile("log/access.log", os.O_CREATE | os.O_WRONLY | os.O_APPEND, 0666)
    if err != nil {
        log.Panic("Access log: ", err)
    }

    return handlers.LoggingHandler(io.Writer(f), r)
}

错误

# command-line-arguments
./main.go:71: access_log(r) used as value
./main.go:83: too many arguments to return

最佳答案

func access_log(r) 没有定义参数 r 的类型。

一旦你定义了它,编译应该就可以进行了。

./main.go:83: too many arguments to return

定义的函数没有返回值,因此出错。

如果加上handlers#LoggingHandler的返回类型,那就是 http.Handler

func access_log(r) http.Handler {
   ...
   // Then you can return:
   return handlers.LoggingHandler(io.Writer(f), r)
}

关于go - 语法错误函数返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29602990/

相关文章:

multithreading - Go 中的并发读取/关闭,以跨平台的方式

Go strings.Replace(input, "\n", "", -1) 无法识别

Go - 从重定向的 .txt 文件获取输入时,Scanf 和 ReadString 与换行符发生冲突

go - $ fyne package -os linux ... 结果是 : bash: fyne: command not found

go - 如何使用 net Conn Read 方法继续阅读

pointers - 分配的指针字段变为 <nil>

go - tyk 无法在 Windows 上构建

concurrency - 与 google go 中的 channel 共享资源

go - 转到股票行情示例未选择 'done'情况?

go - 两个字符串具有相同的指针地址