go语言的基础语法请教

如题,

package main  
  
import (  
    "io"  
    "net/http"  
)  
  
type a struct{}  
  
func (*a) ServeHTTP(w http.ResponseWriter, r *http.Request) {  
    path := r.URL.String() //获得访问的路径  
    io.WriteString(w, path)  
}  
  
func main() {  
    http.ListenAndServe(":8080", &a{})//第2个参数需要实现Hander接口的struct,a满足  
}  

今天刚刚开始学 go 语言,有很多不懂的地方,路过的大神快救救我

这里定义了一个type a struct{} 为什么要定一个这样的type ?

为什么listenANDserve是 a 的地址,而不是a的指针?

func (*a) 这样写了以后为什么会认为 a 是一个实现了ServeHTTP 的struct?

阅读 2.3k
2 个回答
  1. 这样写就像C里面的typedef一样,定义了一个类型struct{},起了个名字叫a

2.你的意思是指针和地址不是一个概念吗?实际在这里既不是a的地址,也不是a的指针。它实际是a类型的初始化了的一个变量(这里说变量不太准确)的地址(也就是指针)

3.语法,这样写有点像c++里面在类外定义成员函数一样

问题1:不是一定要定义这样的一个结构体,只是你这样子的实现方式 需要这么定义而已;
问题2:其实不需要地址,可以这样子`func (a) ServeHTTP(w http.ResponseWriter, r *http.Request) {

path := r.URL.String() //获得访问的路径  
io.WriteString(w, path)  

}

func main() {

http.ListenAndServe(":8080", a{})//第2个参数需要实现Hander接口的struct,a满足  

} `
问题3:其实ListenAndServe方法,你往里面追踪你会发现,只要是任何实现了ServeHTTP方法的任何结构体都可以作为第二个参数来处理这个hander

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题