go - modrpc/info GitHub Wiki
- Golang website: https://golang.org
- Github: https://github.com/golang
- Go Language Spec: https://golang.org/ref/spec
- Effective Go: https://golang.org/doc/effective_go.html#package-names
- Golang wiki: https://github.com/golang/go/wiki
- ```Go proverbs: https://go-proverbs.github.io
- GopherCon: https://gophercon.com/
- Gotham: http://gothamgo.com
- GopherAcademy: https://blog.gopheracademy.com -- contains GopherCon/Advent conferences info
- Golanglibs.com
- Rob Pike: http://herpolhode.com/rob
- Rob on WHYs of design decisions
- NewSqueak: precursor to Go https://swtch.com/~rsc/thread/newsqueak.pdf
- NewSqueak talk: https://www.youtube.com/watch?v=hB05UFqOtFA&list=WL&index=43
- Lectures on Concurrency: #1 #3 #5
- Russ Cox: https://swtch.com/~rsc/
- Dave Cheney: http://dave.cheney.net/about
- Golang criticisms:
- http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/ 50 shades of Go -- gotchas and common mistakes
- Go for Distributed Systems: https://talks.golang.org/2013/distsys.slide#20
- https://github.com/mvcode/tunny
- Google App Engine w/ Go: https://blog.golang.org/appengine-dec2013
- Go Network Programming: https://www.gitbook.com/book/jannewmarch/network-programming-with-go-golang-/details
- go/token: defines lexical tokens of Go
- go/scanner: tokenizes an input stream and records file position info
- go/ast: defines AST datatypes
- go/parser: recursive-descent parser which constructs AST
- go/constant: representations and arithmetic operations for the values of compile-time constant expressions
- go/types: type checking
- Lexical Scanning in Go Talk: https://talks.golang.org/2011/lex.slide#1
- Nice intro: https://github.com/golang/example/tree/master/gotypes gotypes-local
- Go type checker does three things:
-
identifier resolution: for every name in the program, determines which declration the name refers to
- i.e. ast.Ident -> var/type/func/const/etc. (compiler object)
- type deduction: for every expression in the program, determines what type that expression has
- constant evaluation: for every constant epxression in the program, determines the value of constant
-
identifier resolution: for every name in the program, determines which declration the name refers to
- go/types.Info
- Info.Types map[ast.Expr]TypeAndValue:
- expr -> types OR constexpr -> values
- Info.Defs map[*ast.Ident]Object
- Info.Types map[ast.Expr]TypeAndValue:
- Bootstraping: go15bootstrap go13compiler go13linker
- Go building steps
- Russ Cox' impl note on Go data structs: http://research.swtch.com/godata -- difference between
make([]int, 0)
andnew([]int)
- Russ Cox' impl note on Go interfaces: http://research.swtch.com/interfaces
- Go Blog: Arrays, slices (and strings): The mechanics of 'append' https://blog.golang.org/slices
- Go Blog: Strings, bytes, runes and characters in Go https://blog.golang.org/strings
- IPC mechanism based on CSP channels
- Processes communicate/synchronize through channels (not directly writing to them)
- this allows to encapsulate all sync/comm inside channel implementation?
- Behavior is similar to SV mailbox only with blocking try/put
- Channel impl: http://dmitryvorobev.blogspot.com/2016/08/golang-channels-implementation.html
- See plan9 source for C implementation of channel.: /home/cjeong/work/tools/sys-plan9/sys/src/libthread
- Go assembly
- Go runtime symbols
- Contiguous stacks
- C stacks
- GCC spilt stacks: https://gcc.gnu.org/wiki/SplitStacks
- Stack frames and FP: http://www.backerstreet.com/red/stack_frames.htm
- Stack-based buffer overflow: http://www.tenouk.com/Bufferoverflowc/Bufferoverflow4.html
- Go runtime walkthrough
-
Scalable go scheduler doc
- Morsing's blog (easier to understand): https://morsmachine.dk/go-scheduler
- runtime/proc.go: current scheduler impl
- work stealing scheduler
- original scheduler impl
- Analysis of go scheduler
- Slides:
- Demystifying Go scheduler
- Go scheduler: covers C runtime
- Morsing's blog: https://morsmachine.dk/netpoller
- StackOverflow: How to Stop a Goroutine
- Curious channels: http://dave.cheney.net/2013/04/30/curious-channels
- Stopping goroutine by closing a channel
- another stopper
- Can we create some Erlang-link type of cascaded cancellation scheme?
- Stop/resume goroutines
- Tunny: Go library for spawning and managing a goroutine pool
- Profiling Go Programs
- Pattern for optimizing Go
- Debugging performance issues in Go
- Go Stringer -- AST walk
-
Using GDB with Go
go build -gcflags "-N -l" -o gdb_sandbox main.go
gdb gdb_sandbox
- https://github.com/GoogleCloudPlatform/google-cloud-go/wiki/Iterator-Guidelines
- https://godoc.org/google.golang.org/api/iterator
- Whispering Gosphers: Go-based p2p networking
- Parse.com: Go-based web-app backend service
- SliceTricks - Slices than linked lists
- Lexer: https://talks.golang.org/2011/lex.slide
- token emitter/consumer -- python-like coroutine