While TinyGo supports a big subset of the Go language, not everything is supported yet.
Here is a list of features that are supported:
switchnildefer
Concurrency
At the time of writing (2019-11-27), support for goroutines and channels works for the most part. Support for concurrency on ARM microcontrollers is complete but may have some edge cases that don’t work. Support for other platforms (such as WebAssembly) is a bit more limited: calling a blocking function may for example allocate heap memory.
Cgo
import "C"#cgo
Reflection
reflect
Maps
Support for maps is not yet complete but is usable. You can use any type as a value, but only some types are acceptable as map keys. Also, they have not been optimized for performance and will cause linear lookup times in some cases.
Types supported as map keys include strings, integers, pointers, and structs/arrays that contain only these types.
Standard library
Due to the above missing pieces and because parts of the standard library depend on the particular compiler/runtime in use, many packages do not yet compile. See the list of compiling packages here (but note that “compiling” does not imply that works entirely).
Garbage collection
While not directly a language feature (the Go spec doesn’t mention it), garbage collection is important for most Go programs to make sure their memory usage stays in reasonable bounds.
runtime.GC()
-print-allocs=.
recover
recoverpanicrecover
recoverdefer