采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
大家好,为什么我把post函数改写了一下,提示“invalid receiver Poster (pointer or interface type)”。这样写有什么问题吗?
请帖一下完整代码。也可以考虑贴到https://play.studygolang.com/ 里
请问单看这段代码的问题是什么呢?我就是将课程中的post函数改写了一下,其他没有变 package main import ( "fmt" "gotest/interface/mock" "gotest/interface/real" "time" ) type Retriever interface { //interface 里面全是函数,不需要加func关键字 Get(url string) string } type Poster interface{ Post(url string, form map[string] string) string } //把很多接口拼成一个接口 type RetrieverPoster interface{ Retriever Poster } const url = "http://www.imooc.com" func download(r Retriever) string { return r.Get(url) } func post(poster Poster) { poster.Post(url,map[string]string{ "name": "yhang", "course":"golang", }) } func session(s RetrieverPoster) string{ s.Post(url, map[string]string{ "contents":"another fake imooc website!", }) return s.Get(url) } func inspect(r Retriever){ fmt.Println("Inspecting",r) fmt.Printf("> %T %v\n", r, r) switch r.(type){ case *mock.Retriever: fmt.Println("this is mock one") case *real.Retriever: fmt.Println("this is real one") } }
回复 Eldin_Zhou: 同学贴的这段代码没有问题,已经改对了。 错误的代码是:func (poster Poster) post() { 正确的代码是:func post(poster Poster) { 这里括号在函数名前表示特殊的参数,叫做接收者,也就是出错信息里的receiver。它说了,Poster不能作为receiver,因为它是接口。 只有自定义类型才能用这种“接收者”的方式定义方法,请参考第4章结构体和方法。
登录后可查看更多问答,登录/注册
语法+分布式爬虫实战 为转型工程师量身打造
4.2k 14
1.2k 1
2.5k 1
1.6k 12
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号