/* * Simple structure. */ package main import "fmt" import "math" /* * The Point again. */ type Point struct { x, y float64 } /* * Go allows methods to declare a "receiver," which allows them to be * called as methods of the recevier's type. */ func (p *Point) to_s() string { return fmt.Sprintf("(%g,%g)", p.x, p.y) } func (from *Point) distance(to *Point) float64 { dx := from.x - to.x dy := from.y - to.y return math.Sqrt(dx*dx + dy*dy) } func main() { // Create a point by declaration. var origin Point fmt.Println(origin.to_s()) var p1 Point = Point{4.8,-3.11} p2 := Point{y: -3.0, x: 4.1} fmt.Println(p1.to_s(), "to", p2.to_s(), "is", p1.distance(&p2)) var p3 *Point = new(Point) *p3 = Point{y: 3.2} var p4 *Point = new(Point) *p4 = Point{5.1,2.2} fmt.Println(p3.to_s(), "to", p4.to_s(), "is", p3.distance(p4)) }