Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
go_tour_notes [2018/04/13 10:35] – [Basic method] rpjdaygo_tour_notes [2018/04/14 08:57] (current) – [Refresher: pointer-based function] rpjday
Line 684: Line 684:
 You can only declare a method with a receiver whose type is defined in the same package as the method. You //cannot// declare a method with a receiver whose type is defined in another package (which includes the built-in types such as ''int''). You can only declare a method with a receiver whose type is defined in the same package as the method. You //cannot// declare a method with a receiver whose type is defined in another package (which includes the built-in types such as ''int'').
  
-==== Pointer receivers ====+===== Methods with pointer receivers ====
 + 
 +==== Refresher: call-by-value ==== 
 + 
 +Call-by-value function, which makes a //copy// of the argument:
  
 <code> <code>
 +package main
 +
 +import (
 +        "fmt"
 +)
 +
 type Vertex struct { type Vertex struct {
- X, Y float64+        X, Y float64
 } }
  
-func (v Vertex) Abs() float64 +func Scale(v Vertex, f float64Vertex 
- return math.Sqrt(v.X*v.X + v.Y*v.Y)+        v.X = v.X * 
 +        v.Y = v.Y * 
 +        return v
 } }
  
-func (v *Vertex) Scale(f float64) { +func main() { 
- v.X v.X * f +        :Vertex{3, 4} 
- v.Y = v.Y * f+        fmt.Println(v
 +        fmt.Println(Scale(v, 10)) 
 +        fmt.Println(v)
 } }
 +
 +{3 4}
 +{30 40}
 +{3 4}
 </code> </code>
 +
 +==== Refresher: pointer-based function ====
 +
 +Pointer-based call:
 +
 +<code>
 +package main
 +
 +import (
 +        "fmt"
 +)
 +
 +type Vertex struct {
 +        X, Y float64
 +}
 +
 +func Scale(v *Vertex, f float64) {
 +        v.X = v.X * f
 +        v.Y = v.Y * f
 +}
 +
 +func main() {
 +        v := Vertex{3, 4}
 +        fmt.Println(v)
 +        Scale(&v, 10)
 +        fmt.Println(v)
 +}
 +
 +{3 4}
 +{30 40}
 +</code>
 +
 +Notes about the above:
 +
 +  * Even if the arg is a pointer, Go allows you to use "." to dereference.
 +  * You cannot support both variations of that function
  • go_tour_notes.1523615732.txt.gz
  • Last modified: 2018/04/13 10:35
  • by rpjday