# Prior Discussion

## Background

This page links to prior discussion on various topics.

The page complements the [official FAQ](https://go.dev/doc/faq). While the official FAQ contains things which are frequently asked and contains answers, this page contains things that have been repeatedly asked, but maybe not frequently, and only needs to link to one or more previous threads.  Over time, these entries may graduate to entries in the official FAQ.

**Editors:** When editing this page, please don't change the titles of sections, as that breaks the #anchors in URLs. You can rearrange, though. Feel free to add entries at will. There is no requirement for code or English review here.

## Asked Questions & Prior Discussion

### Panics on sends or closes of closed channel

See https://github.com/golang/go/issues/11344#issuecomment-117862884

### Thread-local, Goroutine-local storage

TODO

### Add explicit int-to-bool conversions

Rejected, see 
https://github.com/golang/go/issues/9367#issuecomment-143128337

### Add mechanism to silence vet warnings

Rejected, see discussion in https://github.com/golang/go/issues/17058

### Add vet warning for unused function arguments

Rejected, see https://github.com/golang/go/issues/7892#issuecomment-66094282

### Make go get more verbose / add a progress bar

Rejected, see
https://github.com/golang/go/issues/17959
https://github.com/golang/go/issues/18388#issuecomment-268315634

### Shorten error handling / return sugar

Rejected, see
https://github.com/golang/go/issues/16225

### Support symlinks in go toolchain / environment variables

Rejected, see
https://github.com/golang/go/issues/15507

### Make unused imports/variables a warning, not an error

Rejected.

### Add warnings to the Go compiler

Experience in large projects has shown that warnings pile up until people ignore all warnings, so warnings only add noise and no value (or are actively harmful in that they hide bugs). See https://go.dev/doc/faq#unused_variables_and_imports 

### Weak references

Unlikely to be added. See discussion at https://groups.google.com/forum/#!topic/golang-nuts/PYWxjT2v6ps, and https://groups.google.com/forum/?pli=1#!topic/golang-nuts/MMWXRANh0-g which points out that `sync.Pool` is a specific form of weak reference.