| # Go 1.1 "gotchas" | 
 |  | 
 | While Go 1.1 is compatible with Go 1.0, the [compatibility promise](http://golang.org/doc/go1compat.html) permits the Go authors to break existing programs if they were incorrect in the first place. | 
 |  | 
 | Here are a few ways in which the bug fixes in Go 1.1 may have broken your Go programs. | 
 |  | 
 |  | 
 | ## Unknown foo.Bar field in struct literal | 
 |  | 
 | Struct field names must not include package qualifiers. | 
 | For example, take this struct with an embedded ` *bytes.Buffer ` field: | 
 |  | 
 | ``` | 
 | type S struct { | 
 | 	*bytes.Buffer | 
 | } | 
 | ``` | 
 |  | 
 | In Go 1.0 the compiler would (incorrectly) accept this struct literal: | 
 |  | 
 | ``` | 
 | s := S{ | 
 | 	bytes.Buffer: new(bytes.Buffer), | 
 | } | 
 | ``` | 
 |  | 
 | Under Go 1.1 the compiler rejects this. | 
 | Instead you should use the field name without the package qualifier: | 
 |  | 
 | ``` | 
 | s := S{ | 
 | 	Buffer: new(bytes.Buffer), | 
 | } | 
 | ``` | 
 |  | 
 | ## Initialization loop | 
 |  | 
 | The Go 1.1 compiler now better detects initialization loops. | 
 |  | 
 | For instance, the following code compiled under Go 1.0. | 
 |  | 
 | ``` | 
 | var funcVar = fn | 
 |  | 
 | func fn() { | 
 | 	funcVar() | 
 | } | 
 | ``` | 
 |  | 
 | Such code must now use an ` init ` function for the variable assignment to avoid | 
 | the initialization loop. | 
 |  | 
 | ``` | 
 | var funcVar func() | 
 |  | 
 | func fn() { | 
 | 	funcVar() | 
 | } | 
 |  | 
 | func init() { | 
 | 	funcVar = fn | 
 | } | 
 | ``` | 
 |  | 
 | In particular, this affects users of App Engine's [delay package](https://developers.google.com/appengine/docs/go/taskqueue/delay). | 
 |  | 
 |  | 
 | ## Cannot fallthrough final case in switch | 
 |  | 
 | Go 1.0 permitted fallthrough in the final case of a switch statement: | 
 |  | 
 | ``` | 
 | switch { | 
 | case false: | 
 | 	fallthrough // fall through to 'true' case | 
 | case true: | 
 | 	fallthrough // fall through to... nowhere? | 
 | } | 
 | ``` | 
 |  | 
 | A language change affecting [return requirements](http://golang.org/doc/go1.1#return) led us to make the superfluous fallthrough illegal. | 
 |  | 
 | The fix is to remove such statements from your code. | 
 |  | 
 |  | 
 | ## Duplicate argument name in parameters and return values | 
 |  | 
 | A compiler bug permitted function type declarations with parameters and return values of the same name. This would compile under Go 1.0: | 
 |  | 
 | ``` | 
 | type T func(a int) (a int) | 
 | ``` | 
 |  | 
 | Under Go 1.1, the compiler gives an error: | 
 |  | 
 | ``` | 
 | 	duplicate argument a | 
 | ``` | 
 |  | 
 | The fix is to rename the arguments so that they use different names. | 
 |  | 
 |  | 
 | ## Package "go" forbidden | 
 |  | 
 | The import path "go" is now reserved. If you have a package in your workspace | 
 | whose import path is "go", you will need to rename it and move it somewhere | 
 | else. | 
 |  | 
 | While it was permitted, it is a bad idea to use this import path. | 
 | The standard library includes "go/parser", "go/ast", and so on. | 
 | It's posssible that a "go" package might be introduced in a future Go release, | 
 | making your "go" package unusable. | 
 |  | 
 | Please read [How to write Go code](http://golang.org/doc/code.html) for more | 
 | details about import paths. |