Golang中如何使用接口方法?
Golang中如何使用接口方法? 你好,
首先抱歉,我对Go语言还只是个新手。
我目前在服务器类中有以下代码:
package server
import "fmt"
type serverStarter interface {
StartServer()
}
type Webserver struct{}
func (w Webserver) StartServer() {
fmt.Printf("Starting server at port 8080\n")
}
func justATest() {
Webserver.StartServer()
}
这里我遇到了错误:server.go:18:24 not enough arguments in call to Webserver.StartServer
它需要什么参数呢?StartServer方法没有参数,只有一个接收器类型,如果我没看错的话?
我是不是需要先初始化我的Webserver?
比如用 w Webserver,然后在w上调用方法? 但是我该如何初始化一个空的结构体类型呢。
我使用了一个空结构体,因为我通常只是想让这个类型有东西来实现接口,也许有比空结构体类型更好的东西可以使用。
目前,我只是在尝试和摸索。
更多关于Golang中如何使用接口方法?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
Perschistence: 我是否需要先初始化我的Web服务器?
是的,你需要一个“Web服务器”的实例来访问你的方法。
更多关于Golang中如何使用接口方法?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
package main
import (
"fmt"
)
func New() Webserver{
return Webserver{}
}
type serverStarter interface {
StartServer()
}
type Webserver struct{}
func (w Webserver) StartServer() {
fmt.Printf("Starting server at port 8080\n")
}
func main() {
web := New()
web.StartServer()
}
在Go语言中,接口方法需要通过具体的实例来调用。你的代码中直接使用类型名调用方法,缺少了接收器实例。
以下是修正后的代码示例:
package main
import "fmt"
type serverStarter interface {
StartServer()
}
type Webserver struct{}
func (w Webserver) StartServer() {
fmt.Printf("Starting server at port 8080\n")
}
func justATest() {
// 创建Webserver实例
w := Webserver{}
// 通过实例调用方法
w.StartServer()
// 或者使用指针接收器版本
w2 := &Webserver{}
w2.StartServer()
}
func main() {
justATest()
}
如果你想让结构体真正为空,可以使用以下方式:
type Webserver struct{}
// 或者使用单例模式
var DefaultWebserver = Webserver{}
func justATest() {
DefaultWebserver.StartServer()
}
接口使用的完整示例:
func startServer(s serverStarter) {
s.StartServer()
}
func main() {
ws := Webserver{}
startServer(ws) // 传递Webserver实例给接口
// 或者
var starter serverStarter = Webserver{}
starter.StartServer()
}
空结构体在Go中是有效的类型,占用0字节内存,常用于只需要类型而不需要存储数据的场景。

