package main
 
import (
    "time"
    "fmt"
)
 
const (
    chan_size = 1000
    cycle_count = 1000
)
 
var (
    v_ch = make(chan t, chan_size)
    p_ch = make(chan *t, chan_size)
)
 
type t struct {
    a uint
    b uint
}
 
func fill_v() {
    for i := 0; i < chan_size; i++ {
        b := t{a:3, b:5}
        v_ch <- b
    }
}
 
func fill_p() {
    for i := 0; i < chan_size; i++ {
        b := t{a:3, b:5}
        p_ch <- &b
    }
}
 
func measure_f(f func()) int64 {
    f();
    elapsed 
:= time.
Since(start
)    return elapsed.Nanoseconds()
}
 
func main() {
 
    var v_nanos int64 = 0
    var p_nanos int64 = 0
    for i := 0; i<cycle_count; i++ {
        v_nanos += measure_f(fill_v);
        for i := 0; i < chan_size; i++ {
            _ = <- v_ch
        }
    }
    for i := 0; i<cycle_count; i++ {
        p_nanos += measure_f(fill_p);
        for i := 0; i < chan_size; i++ {
            _ = <- p_ch
        }
    }
    fmt.Println(
        "v:",v_nanos/cycle_count, 
        " p:", p_nanos/cycle_count, 
        "ratio (v/p):", float64(v_nanos)/float64(p_nanos))
}
				cGFja2FnZSBtYWluCgppbXBvcnQgKAogICAgInRpbWUiCiAgICAiZm10IgopCgpjb25zdCAoCiAgICBjaGFuX3NpemUgPSAxMDAwCiAgICBjeWNsZV9jb3VudCA9IDEwMDAKKQoKdmFyICgKICAgIHZfY2ggPSBtYWtlKGNoYW4gdCwgY2hhbl9zaXplKQogICAgcF9jaCA9IG1ha2UoY2hhbiAqdCwgY2hhbl9zaXplKQopCgp0eXBlIHQgc3RydWN0IHsKICAgIGEgdWludAogICAgYiB1aW50Cn0KCmZ1bmMgZmlsbF92KCkgewogICAgZm9yIGkgOj0gMDsgaSA8IGNoYW5fc2l6ZTsgaSsrIHsKICAgICAgICBiIDo9IHR7YTozLCBiOjV9CiAgICAgICAgdl9jaCA8LSBiCiAgICB9Cn0KCmZ1bmMgZmlsbF9wKCkgewogICAgZm9yIGkgOj0gMDsgaSA8IGNoYW5fc2l6ZTsgaSsrIHsKICAgICAgICBiIDo9IHR7YTozLCBiOjV9CiAgICAgICAgcF9jaCA8LSAmYgogICAgfQp9CgpmdW5jIG1lYXN1cmVfZihmIGZ1bmMoKSkgaW50NjQgewogICAgc3RhcnQgOj0gdGltZS5Ob3coKQogICAgZigpOwogICAgZWxhcHNlZCA6PSB0aW1lLlNpbmNlKHN0YXJ0KQogICAgcmV0dXJuIGVsYXBzZWQuTmFub3NlY29uZHMoKQp9CgpmdW5jIG1haW4oKSB7CgogICAgdmFyIHZfbmFub3MgaW50NjQgPSAwCiAgICB2YXIgcF9uYW5vcyBpbnQ2NCA9IDAKICAgIGZvciBpIDo9IDA7IGk8Y3ljbGVfY291bnQ7IGkrKyB7CiAgICAgICAgdl9uYW5vcyArPSBtZWFzdXJlX2YoZmlsbF92KTsKICAgICAgICBmb3IgaSA6PSAwOyBpIDwgY2hhbl9zaXplOyBpKysgewogICAgICAgICAgICBfID0gPC0gdl9jaAogICAgICAgIH0KICAgIH0KICAgIGZvciBpIDo9IDA7IGk8Y3ljbGVfY291bnQ7IGkrKyB7CiAgICAgICAgcF9uYW5vcyArPSBtZWFzdXJlX2YoZmlsbF9wKTsKICAgICAgICBmb3IgaSA6PSAwOyBpIDwgY2hhbl9zaXplOyBpKysgewogICAgICAgICAgICBfID0gPC0gcF9jaAogICAgICAgIH0KICAgIH0KICAgIGZtdC5QcmludGxuKAogICAgICAgICJ2OiIsdl9uYW5vcy9jeWNsZV9jb3VudCwgCiAgICAgICAgIiBwOiIsIHBfbmFub3MvY3ljbGVfY291bnQsIAogICAgICAgICJyYXRpbyAodi9wKToiLCBmbG9hdDY0KHZfbmFub3MpL2Zsb2F0NjQocF9uYW5vcykpCn0=