我有两个.go文件 - client.go(包含主要基金)和logic.go。其中一个包含从客户端调用时需要执行的函数。 {
client.go -
package main
func main() {
// url is the url of the server to which the REST call has to be sent to fetch the response
client := NewClient(url)
client.DummyFunc()
}
logic.go
import (
"fmt"
)
func DummyFunc(){
// Logic here which returns the json response
}
}
我试图理解在Go中这可能是一个很好的面向对象方式。由于Go有自己的对象继承/组合/封装风格,你可以建议我这样做,因为我是这种语言的新手。
另外,我想在我的client.go和logic.go中的main函数应该包含其他实用程序函数,可以从我的client.go文件调用。
答案 0 :(得分:1)
在解决OO方式之前,client.go
是否需要保留main
功能? logic.go
是否需要与client.go
分开?此外,logic.go
必须是包的一部分。我很难找到为简洁而遗漏的东西而不是可能遗漏的东西。
我将如何做事:
main.go(两种情况都是一样的)
package main
import "client"
func main() {
client := client.Client { ClientUrl: url } // This takes the place of NewClient(url)
client.DummyFunc()
}
client.go
package client
type Client struct {
ClientUrl string
}
func (c Client) DummyFunc() {
// Logic here which returns the JSON response
}
如果您希望将logic
与client
分开,则可以执行此操作。
client.go
package client
type Client struct {
ClientUrl string
Logic // An anonymous field let's you call Logic functions
}
logic.go
package client
type Logic struct {
// Fields
}
func (l Logic) DummyFunc() {
// Logic here which returns the JSON response
}
请注意,由于我们在Logic
结构中保持Client
匿名,因此我们可以致电DummyFunc
。
您可以在此处看到更多示例:http://golangtutorials.blogspot.com/2011/06/inheritance-and-subclassing-in-go-or.html
EDIT ---------------------------------------------- ----------
这有点尴尬,但这里有client.go
主要功能,logic.go
是独立的。如果您在logic
中添加更多功能,则client
将能够调用所有其他功能。
client.go
package main
import "logic"
type Client struct {
ClientUrl string
logic.Logic
}
func main() {
client := client.Client { ClientUrl: url } // This takes the place of NewClient(url)
client.DummyFunc()
}
logic.go
package logic
import "fmt"
type Logic struct {
// Fields
}
func (l Logic) DummyFunc() {
fmt.Printf("In DummyFunc\n")
}
话虽如此,我不确定这是最好的方法。如果logic
没有任何字段,那么将它作为单独的结构是没有意义的。我将其作为client
的函数,正如我在原帖中的第一个案例中指出的那样。