Skip to content
Andrew Gerrand edited this page Dec 10, 2014 · 1 revision

Introduction

This wiki entry will try to document the rationales behind some important language decisions besides what's included in the Go FAQ and Effective Go.

Language Features

Why method receiver's base type cannot be pointer or interface?

Reference: https://groups.google.com/forum/#!topic/golang-nuts/aqTwXHaSC_Y

Go doesn't allow receiver's base type to be pointer to avoid possible ambiguity. Suppose you have:

type T blah
type P *T

func (t *T) String() string { ... }
func (p P) String() string { ... }

var p P

Then the meaning of the expression (*p).String() is ambiguous, because it can refer to both (*T).String and P.String.

Go doesn't allow receiver's base type to be interfaces, because interfaces already have methods. (TODO)

Memory Model

Standard Library

Clone this wiki locally