How do I add a function call to a golang structure?
I have the following go code that I need to get the interfaces:
https://play.golang.org/p/A29etweYN_
to provide the following output:
Gate: Evaluation ID U0 NOR true 0 0
Gate: Evaluation ID U1 NOR false 0 1
Gate: Evaluation ID U2 NOR false 1 0
Gate: Evaluation ID U3 NOR false 1 1
I find it hard to understand why the commented line
//OutputY: gateNor(InputA,InputB)
doesn't work - gateNor is the function I want to call and add to the Gate structure
What would be a more elegant way to implement this?
type Gate struct {
Id string
Funct string
InputA string
InputB string
OutputY string
}
func (g *Gate) Notify() error {
fmt.Printf("Gate: Evaluation ID %s %s %s %s %s\n",
g.Id,
g.Funct,
g.OutputY,
g.InputA,
g.InputB,
)
return nil
}
gate0 := &Gate{
Id: "U0",
Funct: "NOR",
InputA: "0",
InputB: "0",
OutputY: gateNor("0", "0"),
//OutputY: gateNor(InputA,InputB),
}
gateNor returns the string true for input A = 0 and InputB = 0, for structure gate0 (ID U0) the following output works:
Gate: Evaluation ID U0 NOR true 0 0
source to share
For example,
gate0 := &Gate{
Id: "U0",
Funct: "NOR",
InputA: "0",
InputB: "0",
}
gate0.OutputY = gateNor(gate0.InputA, gate0.InputB)
Or, more elegantly,
func NewNORGate(id, a, b string) *Gate {
gate := &Gate{
Id: id,
Funct: "NOR",
InputA: a,
InputB: b,
}
gate.OutputY = gateNor(gate.InputA, gate.InputB)
return gate
}
func main() {
gate0 := NewNORGate("U0", "0", "0")
gate1 := NewNORGate("U1", "0", "1")
gate2 := NewNORGate("U2", "1", "0")
gate3 := NewNORGate("U3", "1", "1")
GetEvaluation(gate0)
GetEvaluation(gate1)
GetEvaluation(gate2)
GetEvaluation(gate3)
}
https://play.golang.org/p/WC-jlV-jqd
Or, most elegant,
func NewNORGate(id, a, b string) *Gate {
gate := &Gate{
Id: id,
Funct: "NOR",
InputA: a,
InputB: b,
}
gate.OutputY = gateNor(gate.InputA, gate.InputB)
return gate
}
func main() {
GetEvaluation(NewNORGate("U0", "0", "0"))
GetEvaluation(NewNORGate("U1", "0", "1"))
GetEvaluation(NewNORGate("U2", "1", "0"))
GetEvaluation(NewNORGate("U3", "1", "1"))
}
source to share
Maybe not too elegant, but I would rather define a method
add function call to golang structure
type Gate struct {
Id string
Funct string
InputA string
InputB string
}
func (g Gate) OutputY()string{
return gateNor(g.InputA, g.InputB)
}
and
g.OutputY()
lazy on demand. g.OutputY()
not much harder than g.OutputY
that, and laziness can make a difference in the case of tough calculations. Also on request, you get the agreed value g.OutputY()
. What do you suppose maintain g.Output
after say change g.InputA="1"
?
source to share