diff options
author | Rob Pike <r@golang.org> | 2010-06-28 15:59:54 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2010-06-28 15:59:54 -0700 |
commit | 928d4436de1c2877c388eab4ea83baaa76ce19da (patch) | |
tree | 3023bea04a3623a09d881c92953cbd5ee207e328 /src | |
parent | 2e258e4d7d5776741079b4b741b9e9dc9e476719 (diff) | |
download | golang-928d4436de1c2877c388eab4ea83baaa76ce19da.tar.gz |
netchan: allow chan of basic types now that gob can handle such
R=rsc
CC=golang-dev
http://codereview.appspot.com/1741041
Diffstat (limited to 'src')
-rw-r--r-- | src/pkg/netchan/export.go | 2 | ||||
-rw-r--r-- | src/pkg/netchan/import.go | 5 | ||||
-rw-r--r-- | src/pkg/netchan/netchan_test.go | 33 |
3 files changed, 16 insertions, 24 deletions
diff --git a/src/pkg/netchan/export.go b/src/pkg/netchan/export.go index ea1d63fb9..203741cd7 100644 --- a/src/pkg/netchan/export.go +++ b/src/pkg/netchan/export.go @@ -225,7 +225,7 @@ func checkChan(chT interface{}, dir Dir) (*reflect.ChanValue, os.Error) { // Despite the literal signature, the effective signature is // Export(name string, chT chan T, dir Dir) // where T must be a struct, pointer to struct, etc. -// TODO: fix gob interface so we can eliminate the need for pT, and for structs. +// TODO: fix reflection so we can eliminate the need for pT. func (exp *Exporter) Export(name string, chT interface{}, dir Dir, pT interface{}) os.Error { ch, err := checkChan(chT, dir) if err != nil { diff --git a/src/pkg/netchan/import.go b/src/pkg/netchan/import.go index 454e265b2..d2fd23473 100644 --- a/src/pkg/netchan/import.go +++ b/src/pkg/netchan/import.go @@ -136,7 +136,7 @@ func (imp *Importer) Import(name string, chT interface{}, dir Dir, pT interface{ // err := imp.ImportNValues("name", ch, Recv, new(myType), 1) // if err != nil { log.Exit(err) } // fmt.Printf("%+v\n", <-ch) -// TODO: fix gob interface so we can eliminate the need for pT, and for structs. +// TODO: fix reflection so we can eliminate the need for pT. func (imp *Importer) ImportNValues(name string, chT interface{}, dir Dir, pT interface{}, n int) os.Error { ch, err := checkChan(chT, dir) if err != nil { @@ -147,9 +147,6 @@ func (imp *Importer) ImportNValues(name string, chT interface{}, dir Dir, pT int if _, ok := rt.(*reflect.PtrType); !ok { return os.ErrorString("not a pointer:" + rt.String()) } - if _, ok := reflect.Indirect(reflect.NewValue(pT)).(*reflect.StructValue); !ok { - return os.ErrorString("not a pointer to a struct:" + rt.String()) - } imp.chanLock.Lock() defer imp.chanLock.Unlock() _, present := imp.chans[name] diff --git a/src/pkg/netchan/netchan_test.go b/src/pkg/netchan/netchan_test.go index 01fc0f327..98799be91 100644 --- a/src/pkg/netchan/netchan_test.go +++ b/src/pkg/netchan/netchan_test.go @@ -6,43 +6,38 @@ package netchan import "testing" -type value struct { - i int - s string -} - const count = 10 // number of items in most tests const closeCount = 5 // number of items when sender closes early func exportSend(exp *Exporter, n int, t *testing.T) { - ch := make(chan value) - err := exp.Export("exportedSend", ch, Send, new(value)) + ch := make(chan int) + err := exp.Export("exportedSend", ch, Send, new(int)) if err != nil { t.Fatal("exportSend:", err) } for i := 0; i < n; i++ { - ch <- value{23 + i, "hello"} + ch <- 23+i } close(ch) } func exportReceive(exp *Exporter, t *testing.T) { - ch := make(chan value) - err := exp.Export("exportedRecv", ch, Recv, new(value)) + ch := make(chan int) + err := exp.Export("exportedRecv", ch, Recv, new(int)) if err != nil { t.Fatal("exportReceive:", err) } for i := 0; i < count; i++ { v := <-ch - if v.i != 45+i || v.s != "hello" { - t.Errorf("export Receive: bad value: expected 4%d, hello; got %+v", 45+i, v) + if v != 45+i { + t.Errorf("export Receive: bad value: expected 4%d; got %d", 45+i, v) } } } func importReceive(imp *Importer, t *testing.T) { - ch := make(chan value) - err := imp.ImportNValues("exportedSend", ch, Recv, new(value), count) + ch := make(chan int) + err := imp.ImportNValues("exportedSend", ch, Recv, new(int), count) if err != nil { t.Fatal("importReceive:", err) } @@ -54,20 +49,20 @@ func importReceive(imp *Importer, t *testing.T) { } break } - if v.i != 23+i || v.s != "hello" { - t.Errorf("importReceive: bad value: expected %d, hello; got %+v", 23+i, v) + if v != 23+i { + t.Errorf("importReceive: bad value: expected %d; got %+d", 23+i, v) } } } func importSend(imp *Importer, t *testing.T) { - ch := make(chan value) - err := imp.ImportNValues("exportedRecv", ch, Send, new(value), count) + ch := make(chan int) + err := imp.ImportNValues("exportedRecv", ch, Send, new(int), count) if err != nil { t.Fatal("importSend:", err) } for i := 0; i < count; i++ { - ch <- value{45 + i, "hello"} + ch <- 45+i } } |