Go中的面向对象 - 结构/组合/封装

时间:2014-11-16 06:34:10

标签: json oop struct go composition

我有两个.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文件调用。

1 个答案:

答案 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
}

如果您希望将logicclient分开,则可以执行此操作。

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的函数,正如我在原帖中的第一个案例中指出的那样。