Re: [go-nuts] formatting question/issue

2018-04-10 Thread Jan Mercl
On Tue, Apr 10, 2018 at 1:32 AM Alex Dvoretskiy 
wrote:

> Why there is no difference if the last comma exists?

Because the language specification allows to omit the last comma before the
closing '}':

LiteralValue = "{" [ ElementList [ "," ] ] "}" .

See: https://golang.org/ref/spec#LiteralValue

-- 

-j

-- 
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.


[go-nuts] TCP connection reuse when doing HTTP

2018-04-10 Thread Sun Frank
Hi guys:

my question is how to reuse underlying TCP connection when doing a lot of 
frequent short HTTP requests using golang?

I tried things from stackoverflow and other blogs including:

https://stackoverflow.com/questions/17948827/reusing-http-connections-in-golang
https://awmanoj.github.io/tech/2016/12/16/keep-alive-http-requests-in-golang/

they say the key is to close resp.Body, here's my test code(as the answer 
from stackoverflow):

 
// init HTTPClient
func init() {
   httpClient = createHTTPClient()
}
const (
MaxIdleConnections int = 10
RequestTimeout int = 5
)
// createHTTPClient for connection re-use
func createHTTPClient() *http.Client {
   client := &http.Client{
   Transport: &http.Transport{
   MaxIdleConnsPerHost: MaxIdleConnections,
   },
   Timeout: time.Duration(RequestTimeout) * time.Second,
   }
return client
}
func httpClientCode() {
var endPoint string = "http://localhost:8080/doSomething";
for i := 0; i < 3; i++ {
req, err := http.NewRequest("POST", endPoint, bytes.NewBuffer([]byte
("Post this data")))
if err != nil {
log.Fatalf("Error Occured. %+v", err)
}
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
response, err := httpClient.Do(req)
if err != nil && response == nil {
log.Fatalf("Error sending request to API endpoint. %+v", err)
} else {
io.Copy(ioutil.Discard, response.Body)
response.Body.Close()
}
}
}

then I start a http server:  
python3 -m http.server 8080
and then i start package capture:
sudo tcpdump -i lo -s 0 -w /tmp/p1.pcap dst port 8080
then run: go run main.go, i still got 3 times of TCP handshake, even after 
i change MaxIdleConnections to 1




any thoughts?  thx

-- 
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.


Re: [go-nuts] TCP connection reuse when doing HTTP

2018-04-10 Thread Alex Efros
Hi!

On Tue, Apr 10, 2018 at 06:14:46AM -0700, Sun Frank wrote:
> my question is how to reuse underlying TCP connection when doing a lot of 
> frequent short HTTP requests using golang?

This happens by default: https://play.golang.org/p/XnzQoGqQlno

> they say the key is to close resp.Body

Yes, but any correct code should close all resources.
Not closing resp.Body is just one of ways how bad code may break things
(like reuse of TCP connections).

> then I start a http server:  
> python3 -m http.server 8080
> and then i start package capture:
> sudo tcpdump -i lo -s 0 -w /tmp/p1.pcap dst port 8080
> then run: go run main.go, i still got 3 times of TCP handshake, even after 
> i change MaxIdleConnections to 1

- MaxIdleConnections doesn't limit amount of connections client may open.
- New connections may open because server closes old ones, not because of
  client setup.
- Server may close connections for many reasons, for ex. if it see header
  "Connection: close" with protocol HTTP/1.1 or if it see protocol
  HTTP/1.0 without "Connection: keep-alive" or a lot of other reasons.

-- 
WBR, Alex.

-- 
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.


[go-nuts] net.Conn not returning error upon Write after being closed from far side.

2018-04-10 Thread pierspowlesland
Hi

I'm trying to understand what is going on under the hood here.

I would expect a net.Conn after being closed from the far side, to issue an 
error if the near side then tries to write to it. On my local machine an 
error is returned on the second write, on the go playground all writes 
succeed.

The test is shown below and is also here 
- https://play.golang.org/p/EFYX_ZehMKs 

Thanks for any insight,

Piers

func TestDetectClosedConnectionWhenWriting(t *testing.T) {
listener, err := net.Listen("tcp", ":0")
if err != nil {
t.Fatal(err)
}

wait := make(chan struct{})
go func() {
conn, err := listener.Accept()
if err != nil {
t.Fatal(err)
}
err = conn.Close()
if err != nil {
t.Fatal(err)
}
wait <- struct{}{}
}()

conn, err := net.Dial("tcp", listener.Addr().String())
if err != nil {
t.Fatal(err)
}
<-wait
for i := 0; i < 100; i++ {
println(i)
_, err = conn.Write([]byte("b"))
if err != nil {
break
}
}
if err == nil {
t.Fatal("expecting error to be returned when writing")
}
t.Fatal("expecting error to be a permanent net.OpError")
}




-- 
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.


[go-nuts] Re: After one goroutine completed, does the thread its binded will be destroyed?

2018-04-10 Thread Pelon Lee
Thanks you! I'll see that code. 

在 2018年4月10日星期二 UTC+8上午7:32:51,Keith Randall写道:
>
> Tamás is right.  In the case you show, M1 will pick up G2 and work on it.  
> In general, the M (OS thread) finds another goroutine to run, and if it 
> can't find one it parks itself until more goroutines show up.
>
> The code is in src/runtime/proc.go:findrunnable, which calls stopm.
>
> We've been contemplating destroying Ms that have been waiting around for a 
> long time with nothing to do, but we haven't implemented that yet.
>
> On Monday, April 9, 2018 at 2:03:54 PM UTC-7, Tamás Gulácsi wrote:
>>
>> AFAIK it'll be parked fir another goroutine.
>
>

-- 
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.


Re: [go-nuts] net.Conn not returning error upon Write after being closed from far side.

2018-04-10 Thread Janne Snabb
Your TCP FIN is still in transit or not yet processed by the other TCP
stack when you issue the first write.

TCP is not synchronous even if running on same host.


Janne Snabb
sn...@epipe.com

On 2018-04-10 17:58, pierspowlesl...@gmail.com wrote:
> Hi
> 
> I'm trying to understand what is going on under the hood here.
> 
> I would expect a net.Conn after being closed from the far side, to issue
> an error if the near side then tries to write to it. On my local machine
> an error is returned on the second write, on the go playground all
> writes succeed.
> 
> The test is shown below and is also here
> - https://play.golang.org/p/EFYX_ZehMKs 
> 
> Thanks for any insight,
> 
> Piers
> 
> |
> func TestDetectClosedConnectionWhenWriting(t *testing.T) {
> listener, err := net.Listen("tcp", ":0")
> if err != nil {
> t.Fatal(err)
> }
> 
> wait := make(chan struct{})
> go func() {
> conn, err := listener.Accept()
> if err != nil {
> t.Fatal(err)
> }
> err = conn.Close()
> if err != nil {
> t.Fatal(err)
> }
> wait <- struct{}{}
> }()
> 
> conn, err := net.Dial("tcp", listener.Addr().String())
> if err != nil {
> t.Fatal(err)
> }
> <-wait
> for i := 0; i < 100; i++ {
> println(i)
> _, err = conn.Write([]byte("b"))
> if err != nil {
> break
> }
> }
> if err == nil {
> t.Fatal("expecting error to be returned when writing")
> }
> t.Fatal("expecting error to be a permanent net.OpError")
> }
> 
> |
> 
> 
> 
> -- 
> 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.

-- 
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.


Re: [go-nuts] net.Conn not returning error upon Write after being closed from far side.

2018-04-10 Thread Alex Efros
Hi!

On Tue, Apr 10, 2018 at 07:58:29AM -0700, pierspowlesl...@gmail.com wrote:
> I'm trying to understand what is going on under the hood here.

SO_LINGER (see socket(7)) delay happens. Add this after Accept():

conn, err := listener.Accept()
if err == nil {
err = conn.(*net.TCPConn).SetLinger(0)
}

> I would expect a net.Conn after being closed from the far side, to issue an 
> error if the near side then tries to write to it. On my local machine an 
> error is returned on the second write, on the go playground all writes 
> succeed.

Playground doesn't support TCP, and there is write buffering which
postpone returning related error.

https://play.golang.org/p/JTAetL9no2y

This example correctly output error in playground:
0
2009/11/10 23:00:00 set tcp 0.0.0.0:2->127.0.0.1:3: Protocol not available
and correctly works outside of playground:
0
1
2
3
4
write tcp 127.0.0.1:38900->127.0.0.1:33199: write: connection reset by peer
(on very slow system it may output few more numbers because time.Sleep is
not really suitable for synchronization).

-- 
WBR, Alex.

-- 
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.


[go-nuts] Sorting slice of structs

2018-04-10 Thread Sankar
Hi

I have the following code:

type Point struct {
Xint
Name string
}

arr := []Point{
Point{1, "One"},
Point{3, "Three"},
Point{2, "Two"},
Point{4, "Four"},
}

log.Println("Before Sorting: ", arr)
sort.Slice(arr, func(i, j int) bool {
return arr[i].X < arr[i].X
})
log.Println("After Sorting: ", arr)

I wanted to see the slice of Point objects to be sorted after I called the 
sort function, but the slice remains unchanged. 

The play url is: 
https://play.golang.org/p/9KHfyL0xzVP

Any help on how I can get arr sorted in the above code ?

Thanks.

-- 
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.


Re: [go-nuts] Sorting slice of structs

2018-04-10 Thread Michael Jones
Change I i to I j

On Tue, Apr 10, 2018 at 11:29 AM Sankar  wrote:

> Hi
>
> I have the following code:
>
> type Point struct {
> Xint
> Name string
> }
>
> arr := []Point{
> Point{1, "One"},
> Point{3, "Three"},
> Point{2, "Two"},
> Point{4, "Four"},
> }
>
> log.Println("Before Sorting: ", arr)
> sort.Slice(arr, func(i, j int) bool {
> return arr[i].X < arr[i].X
> })
> log.Println("After Sorting: ", arr)
>
> I wanted to see the slice of Point objects to be sorted after I called the
> sort function, but the slice remains unchanged.
>
> The play url is:
> https://play.golang.org/p/9KHfyL0xzVP
>
> Any help on how I can get arr sorted in the above code ?
>
> Thanks.
>
> --
> 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.
>
-- 
Michael T. Jones
michael.jo...@gmail.com

-- 
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.


Re: [go-nuts] Sorting slice of structs

2018-04-10 Thread Burak Serdar
Simple mistake.

You have:
sort.Slice(arr, func(i, j int) bool {
return arr[i].X < arr[i].X
})

Instead use:
sort.Slice(arr, func(i, j int) bool {
return arr[i].X < arr[j].X
})

On Tue, Apr 10, 2018 at 12:28 PM, Sankar  wrote:
> Hi
>
> I have the following code:
>
> type Point struct {
> Xint
> Name string
> }
>
> arr := []Point{
> Point{1, "One"},
> Point{3, "Three"},
> Point{2, "Two"},
> Point{4, "Four"},
> }
>
> log.Println("Before Sorting: ", arr)
> sort.Slice(arr, func(i, j int) bool {
> return arr[i].X < arr[i].X
> })
> log.Println("After Sorting: ", arr)
>
> I wanted to see the slice of Point objects to be sorted after I called the
> sort function, but the slice remains unchanged.
>
> The play url is:
> https://play.golang.org/p/9KHfyL0xzVP
>
> Any help on how I can get arr sorted in the above code ?
>
> Thanks.
>
> --
> 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.

-- 
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.


Re: [go-nuts] Sorting slice of structs

2018-04-10 Thread Jan Mercl
On Tue, Apr 10, 2018 at 8:29 PM Sankar  wrote:

> Any help on how I can get arr sorted in the above code ?

Just a typo: https://play.golang.org/p/vhbo8OIrh-H

-- 

-j

-- 
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.


Re: [go-nuts] Sorting slice of structs

2018-04-10 Thread Sankar
ah damn. Thanks  everyone :)

On Wednesday, 11 April 2018 00:05:00 UTC+5:30, Jan Mercl wrote:
>
>
> On Tue, Apr 10, 2018 at 8:29 PM Sankar  > wrote:
>
> > Any help on how I can get arr sorted in the above code ?
>
> Just a typo: https://play.golang.org/p/vhbo8OIrh-H
>
> -- 
>
> -j
>

-- 
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.


Re: [go-nuts] Fixing the version of protoc-gen-go

2018-04-10 Thread Amit Chandak
Thanks Stephan, that worked

Amit

On Tuesday, March 27, 2018 at 5:38:39 AM UTC-7, Stephan Renatus wrote:
>
> Hi Amit,
>
> have you tried this?
>
> go install ./vendor/github.com/golang/protobuf/protoc-gen-go
>
> Also note that you might have to add a required statement to Gopkg.toml 
> to avoid having the binary's code pruned, see 
> https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md#package-graph-rules-required-and-ignored
>
> HTH
> Stephan
>

-- 
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.


[go-nuts] Re: [ANN] Gomail v2: sending emails faster

2018-04-10 Thread leeas via golang-nuts
Is there a way to send an email AS a group member? Currently, I am able to 
do so via the Gmail Web Client. But I can't figure out a way to do it via 
my 3rd party client (Airmail 3), or standard Go (via net/smtp).

Hence, I was wondering if there was a way to send as a group.

On Wednesday, September 2, 2015 at 6:55:26 AM UTC-5, Alexandre Cesaro wrote:
>
> Hi,
>
> I just released the second version of Gomail 
> .
>
> There are quite a few backward-incompatible changes 
>  since 
> Gomail v1 but it brings lots of good stuff:
>
>- A great focus was placed on performances. Gomail v2 is way more 
>efficient than Gomail v1 to send a large number of emails (see the 
>Daemon  
>or Newsletter 
> 
>examples).
>- The API is now clearer and way more flexible.
>- The documentation  improved 
>and many examples were added.
>- All existing issues have been closed.
>- The minimum Go version is now 1.2 instead of 1.3. No external 
>dependencies are used with Go 1.5.
>
> More info on Github: https://github.com/go-gomail/gomail
>

-- 
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.


Re: [go-nuts] Sorting slice of structs

2018-04-10 Thread Michael Jones
We all saw it immediately ... because ... we remember having done it too.
:-)

On Tue, Apr 10, 2018 at 11:38 AM, Sankar  wrote:

> ah damn. Thanks  everyone :)
>
> On Wednesday, 11 April 2018 00:05:00 UTC+5:30, Jan Mercl wrote:
>>
>>
>> On Tue, Apr 10, 2018 at 8:29 PM Sankar  wrote:
>>
>> > Any help on how I can get arr sorted in the above code ?
>>
>> Just a typo: https://play.golang.org/p/vhbo8OIrh-H
>>
>> --
>>
>> -j
>>
> --
> 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.
>



-- 
Michael T. Jones
michael.jo...@gmail.com

-- 
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.


Re: [go-nuts] TCP connection reuse when doing HTTP

2018-04-10 Thread Sun Frank
Hi Alex: 

thanks for your answer, really helped me.

As you mentioned, the connection was indeed closed by the server side: in 
the packages captured, the server side sent the FIN first; seems like that 
python's HTTP module and nginx all close the conenction on server side

i wrote a simple http server, which do not close the connection, shows the 
TCP connection was reused:





thx again, Have a nice day!
B.R.

在 2018年4月10日星期二 UTC+8下午10:58:04,Alex Efros写道:
>
> Hi! 
>
> On Tue, Apr 10, 2018 at 06:14:46AM -0700, Sun Frank wrote: 
> > my question is how to reuse underlying TCP connection when doing a lot 
> of 
> > frequent short HTTP requests using golang? 
>
> This happens by default: https://play.golang.org/p/XnzQoGqQlno 
>
> > they say the key is to close resp.Body 
>
> Yes, but any correct code should close all resources. 
> Not closing resp.Body is just one of ways how bad code may break things 
> (like reuse of TCP connections). 
>
> > then I start a http server:   
> > python3 -m http.server 8080 
> > and then i start package capture: 
> > sudo tcpdump -i lo -s 0 -w /tmp/p1.pcap dst port 8080 
> > then run: go run main.go, i still got 3 times of TCP handshake, even 
> after 
> > i change MaxIdleConnections to 1 
>
> - MaxIdleConnections doesn't limit amount of connections client may open. 
> - New connections may open because server closes old ones, not because of 
>   client setup. 
> - Server may close connections for many reasons, for ex. if it see header 
>   "Connection: close" with protocol HTTP/1.1 or if it see protocol 
>   HTTP/1.0 without "Connection: keep-alive" or a lot of other reasons. 
>
> -- 
> WBR, Alex. 
>

-- 
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.


[go-nuts] Anyway to print the exact cql query being executed against db

2018-04-10 Thread Raju
Hi,

Assuming my query using an iterator looks like this. Is there any way to 
print the exact cql query that is finally executed on Cassandra side when 
iter.Scan() is called?

My iter query is returning empty results, but when I manually search using 
the cql query in my database table in Cassandra, I am getting records 
returned. I have a feeling the query I am creating is somehow incorrect. I 
would like to debug

Thanks
Raju


// list all tweets
iter := session.Query(`SELECT id, text FROM tweet WHERE timeline = ?`, 
"me").Iter()
for iter.Scan(&id, &text) {
fmt.Println("Tweet:", id, text)
}
if err := iter.Close(); err != nil {
log.Fatal(err)
}

-- 
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.


[go-nuts] Re: Anyway to print the exact cql query being executed against db

2018-04-10 Thread Raju
By the way, I am using gocql package - https://github.com/gocql/gocql



On Tuesday, April 10, 2018 at 9:39:23 PM UTC-7, Raju wrote:
>
> Hi,
>
> Assuming my query using an iterator looks like this. Is there any way to 
> print the exact cql query that is finally executed on Cassandra side when 
> iter.Scan() is called?
>
> My iter query is returning empty results, but when I manually search using 
> the cql query in my database table in Cassandra, I am getting records 
> returned. I have a feeling the query I am creating is somehow incorrect. I 
> would like to debug
>
> Thanks
> Raju
>
>
>   // list all tweets
>   iter := session.Query(`SELECT id, text FROM tweet WHERE timeline = ?`, 
> "me").Iter()
>   for iter.Scan(&id, &text) {
>   fmt.Println("Tweet:", id, text)
>   }
>   if err := iter.Close(); err != nil {
>   log.Fatal(err)
>   }
>
>

-- 
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.


[go-nuts] Re: formatting question/issue

2018-04-10 Thread Henry
I believe the first example (the one without the last comma) is when you 
want to put everything on the same line. The second example (the one with 
the last comma) is when you want to split the items into separate lines. 
They each have different uses. It is awkward to see this `{ 'A', 'B', 'C', 
'E', }` when they are put on the same line. So I disagree that the last 
comma should be obligatory.

Your example could use a better line separation to add clarity. 
https://play.golang.org/p/Eat4p3pBzAM


On Tuesday, April 10, 2018 at 6:32:45 AM UTC+7, Alex Dvoretskiy wrote:

> Hello Golangnuts,
>
> Why there is no difference if the last comma exists?
>
> {'A', 'B', 'C', 'E'}  
> or
> {'A', 'B', 'C', 'E',}
>
> both are valid.
>
>
> Sometimes it causes little troubles. For example, the second snippet 
> wouldn't compile, because of different formatting. But these two snippets 
> are identical technically. So, you have to add this last comma to keep the 
> formatting you want. Which can be annoying.
>
> https://play.golang.org/p/4Vav9n2_NIc
>
> https://play.golang.org/p/pr2h6_FBxFn
>
>
> I think it's very good idea to make the last comma obligatory.
>

-- 
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.