Rationales

Alexey Palazhchenko edited this page Jan 25, 2017 · 2 revisions

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)

Select with closed channel

Issue #11344.

Send to closed channel

Issue #18511.

Memory Model

Standard Library

Clone this wiki locally
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.