Особенности структур в go

Методы на структурах в golang определяются на типе.
И если мы объявим типизированную переменную, даже не проинициализировав её, методы будут работать корректно до тех пор, пока мы не попытаемся обратиться к полям ресивера.
Вот пример; первые два вызова работают нормально, третий валится с паникой.

package main

import (
	"fmt"
)

type A struct {
	inner *int
}
func (a *A) Test1() string { 
	return "1" 
}
func (a *A) Test2() string { 
	return a.Test1() 
}
func (a *A) Test3() string { 
	if a.inner != nil {
		return "3"
	}
	return ""
}

func main() {
	var a *A
	fmt.Println("1", a.Test1())
	fmt.Println("2", a.Test2())
	fmt.Println("3", a.Test3())
}

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

LEAVE A COMMENT