Skip to content

函数代码如下:

go
package main

  

import (

    "fmt"

    "log"

    "net/http"

)

  

type dollars float32

  

func (d dollars) String() string{

    return fmt.Sprintf("%.2f", d)

}

  

type database map[string]dollars

  

func (db database) list (w http.ResponseWriter, req *http.Request){

    for item, price := range db {

        fmt.Fprintf(w, "%s:%s\n", item, price)

    }

}

  

func main(){

    db := database{"shose":50, "socks":5}

    http.HandleFunc("/list", db.list)

    log.Fatal(http.ListenAndServe("localhost:8000", nil))

}

问题分析:list函数中的req *http.Request没有显示的调用过,但编译器并没有相应的提示和报错

原因:

  • Go 语言中,当一个函数或方法是用来满足某个接口,或者作为特定类型(如 Http.Handlefunc)的回调时,即使函数体内部没有显式使用所有参数,编译器或 linter 通常也不会将其标记为 "not used"
  • 在这个例子中:这个方法被用作http.HandleFunc("/list", db.list) 的第二个参数。而 HandFunc期望的第二个参数是一个具有func(http.ResponseWriter, *http.Request) 签名的函数,因此为了让 list 函数正确使用,必须匹配相应的签名类型。

菜就多练

本站访客数 人次 本站总访问量