I essentially am trying to find an effective method in Go, preferably not 
too wordy, that lets me create an abstract data type, a struct, and a set 
of functions that bind to a different data type, and that I can write, 
preferably not in too much code, a change that allows the data type of the 
embedded data to be changed. It's basically kinda inheritance, but after 
much fiddling I found a hackish sorta way that isn't *too* boilerplate 
filled:

type nullTester func(*Bast, uint32) bool

type Bast struct {
  ...
  isNull    nullTester
  ...
 }

func isNull(b *Bast, d uint32) bool {
  return d == 0
}

func NewBast() (b *Bast) {
  ...
  b.isNull = isNull
  ...
}

// IsNull - tests if a value in the tree is null
func (b *Bast) IsNull(d uint32) bool {
  return b.isNull(b, d)
}


Now, bear in mind I haven't shown all of the code. But there is a slice 
array in the Bast struct, and I it is defined as an interface{} and isNull 
is one of a set of operators that have to be written to match the type used 
in the slice store, this might be a bad example because it doesn't actually 
act on the interface typed slice, but the point here is just this:

It does not appear to be possible to make the type specification from the 
top line match the function signature of the type-bound function in the 
bottom of the code snippet. I haven't been able to find anything that shows 
that a func type can have a method binding.

https://github.com/calibrae-project/bast/blob/master/pkg/bast/bast.go is 
where my WiP lives. This slightly hacky solution seems sound to me, I just 
don't like to be forced to use workarounds like this. If a type signature 
cannot be written that matches a method, yet I can do it this way, I don't 
see what purpose this serves as far as any kind of correctness and 
bug-resistance issues go. I would have to deal with a lot more potential 
bugs if I had to concretely implemennt this library for the sake of 1 slice 
and 7 functions out of a much larger library that conceptually is intended 
to only deal with comparable, mainly numerical values anyway.

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to