I have searched both in this group ( without a luck ) and in the Internet for possible ideas/answers and I end up with following points:
1. Structs are for representing things, they are things
2. Funcs are for performing actions, calculating things
3. Methods for performing actions on thing state
4. Methods to satisfy interface
Based on these points, let's have a "thing":
```
type Person struct {
weight float32 // pounds
height float32 // inches
}
```
And calculate BMI:
```
func CalculateBMI(weight float32 height float32) float32 {
return weight / (height * height) x 703
}
p := Person{157, 66}
CalculateBMI(p.weight, p.height)
```
However if I would want for example to implement some kind of interface I would be forced to use method over func, but it looks weird to me for some reason:
```
interface BMICalculator {
CalculateBMI() float32
}
// Satisfies BMICalculator
func (p * Person) CalculateBMI() float32 {
return p.weight / (p.height * p.height) x 703
}
```