Index
A
- API key
- about / API key
- API program
- design goals / A simple main function to serve our API
- testing, curl used / Testing our API using curl
- running / Running the solution
- append built-in function / Reading from MongoDB
- Application Programming Interface (API) / Writing a package using TDD
- Archiver interface
- about / Obvious interfaces?
- arguments
- parsing / Parsing arguments
- paths, listing / Listing the paths
- string representations / String representations for your own types
- paths, adding / Adding paths
- paths, removing / Removing paths
- authentication providers
- informing about app / Tell the authentication providers about your app
- authentication wrapper handler
- creating / Handlers all the way down
- authorization, with Twitter
- about / Authorization with Twitter
- connection, extracting / Extracting the connection
- environment variables, reading / Reading environment variables
- Available program
- about / Five simple programs, Available
- code file / Available
- building / Available
- running / Available
- avatar picture, uploading
- uploading / Uploading an avatar picture
- user identification / User identification
- upload form / An upload form
- upload, handling / Handling the upload
- images, serving / Serving the images
- avatar implementation, for local files / The Avatar implementation for local files
- different file types, supporting / Supporting different file types
- code, refactoring / Refactoring and optimizing our code
- code, optimizing / Refactoring and optimizing our code
- avatars, from authentication server
- implementing / Avatars from the authentication server
- avatar URL, obtaining / Getting the avatar URL
- avatar URL, transmitting / Transmitting the avatar URL
- adding, to user interface / Adding the avatar to the user interface
- avatar URL process, Gravatar
- abstracting / Abstracting the avatar URL process
- authentication service / The authentication service and avatar's implementation
- avatar implementation / The authentication service and avatar's implementation
- implementation, using / Using an implementation
- Gravatar implementation / Gravatar implementation
B
- backup package
- writing / Backup package
- Archiver interface / Obvious interfaces?
- ZIP, implementing / Implementing ZIP
- filesystem modification, checking / Has the filesystem changed?
- changes, checking for / Checking for changes and initiating a backup
- backup, initiating / Checking for changes and initiating a backup
- hardcoding / Hardcoding is OK for a short while
- Big Hugh Thesaurus
- URL / Synonyms
- Bootstrap
C
- chat application
- authentication wrapper handler, creating / Handlers all the way down
- social sign-in page, creating / Making a pretty social sign-in page
- endpoints, with dynamic paths / Endpoints with dynamic paths
- logging out / Logging out
- updating / Making things prettier
- chat room
- modeling / Modeling a chat room and clients on the server, Modeling a room
- client, modeling / Modeling the client
- concurrency programming, idiomatic Go used / Concurrency programming using idiomatic Go
- turning, into HTTP handler / Turning a room into an HTTP handler
- helper functions, using for removing complexity / Use helper functions to remove complexity
- creating / Creating and using rooms
- using / Creating and using rooms
- code, avatar implementation
- refactoring / Refactoring and optimizing our code
- optimizing / Refactoring and optimizing our code
- concrete types, replacing with interfaces / Replacing concrete types with interfaces
- interfaces, changing in test-driven way / Changing interfaces in a test-driven way
- existing implementations, fixing / Fixing existing implementations
- global variables, versus fields / Global variables versus fields
- new design, implementing / Implementing our new design
- tiding up / Tidying up and testing
- testing / Tidying up and testing
- code, tracing
- about / Tracing code to get a look under the hood
- packages, writing with TDD / Writing a package using TDD
- trace package, using / Using our new trace package
- making optional / Making tracing optional
- package APIs, cleaning / Clean package APIs
- command-line programs
- Sprinkle / Five simple programs
- Domainify / Five simple programs
- Coolify / Five simple programs
- Synonyms / Five simple programs
- Available / Five simple programs
- combining / Composing all five programs
- super program, building / One program to rule them all
- command-line tools
- pipe design / Pipe design for command-line tools
- Coolify program
- about / Five simple programs, Coolify
- code file / Coolify
- building / Coolify
- running / Coolify
- counter program
- about / System design, Counting votes
- database, connecting to / Connecting to the database
- messages, consuming in NSQ / Consuming messages in NSQ
- database, updating / Keeping the database updated
- Ctrl+C, responding to / Responding to Ctrl + C
- running / Running our solution
- cross-browser resource sharing
- about / Cross-browser resource sharing
- curl
- about / Testing our API using curl
- used, for testing API / Testing our API using curl
D
- daemon backup tool
- about / The daemon backup tool
- duplicated structures / Duplicated structures
- data, caching / Caching data
- infinite loops / Infinite loops
- filedb records, updating / Updating filedb records
- data
- sharing, between handlers / Sharing data between handlers
- database session
- about / Database session
- DisposaBoy
- URL / Sublime Text 3
- domainfinder super program
- building / One program to rule them all
- Domainify program
- about / Five simple programs, Domainify
- building / Domainify
- running / Domainify
- top-level domains, making configurable / Exercise – making top-level domains configurable
- DRY (Don't Repeat Yourself)
- about / Database session
E
- endpoints, handling
- about / Handling endpoints
- tags, used for adding metadata to structs / Using tags to add metadata to structs
- many operations, with single handler / Many operations with a single handler
- polls, reading / Reading polls
- poll, creating / Creating a poll
- poll, deleting / Deleting a poll
- CORS support / CORS support
- enumerators
- about / Enumerators in Go
- checklist, for writing / Enumerators in Go
- writing / Enumerators in Go
- test-driven enumerator / Test-driven enumerator
- environment
- installing / Installing the environment
- NSQ / NSQ
- MongoDB / MongoDB
- starting / Starting the environment
- ErrNoAvatarURL error / Abstracting the avatar URL process
- external logging in
- implementing / Implementing external logging in
- logging in / Logging in
- response from provider, handling / Handling the response from the provider
- user data, presenting / Presenting the user data
- messages, augmenting with additional data / Augmenting messages with additional data
F
- filepath.Walk function
- about / Implementing ZIP
- filesystem backup
- solution design / Solution design
- project structure / Project structure
- backup package, writing / Backup package
- user command-line tool / The user command-line tool
- daemon backup tool / The daemon backup tool
- testing / Testing our solution
G
- GetAvatarURL method / Abstracting the avatar URL process
- Go
- about / Installing Go
- installing / Installing Go
- C tools, installing / Installing the C tools
- downloading, from source / Downloading and building Go from the source
- building, from source / Downloading and building Go from the source
- configuring / Configuring Go
- GOPATH / Getting GOPATH right
- goauth2 package
- go build command / Properly building and executing Go programs
- go fmt command
- about / Go tools
- goimports tool
- about / Go tools
- gomniauth
- Google Places API
- URL / Project overview
- querying / Querying the Google Places API
- GOPATH
- about / Getting GOPATH right
- Go programs
- building / Properly building and executing Go programs
- executing / Properly building and executing Go programs
- Go standard library source code
- URL / Templates
- Go tools
- about / Go tools
- go vet tool
- about / Go tools
- Gravatar
- implementing / Implementing Gravatar
- avatar URL process, abstracting / Abstracting the avatar URL process
H
- handlePolls function / Handling endpoints
- handler functions
- wrapping / Wrapping handler functions
- API key / API key
- database session / Database session
- per request variables / Per request variables
- cross-browser resource sharing / Cross-browser resource sharing
- handler function wrappers
- used, for writing main function for API / Using handler function wrappers
- withCORS / Using handler function wrappers
- withVars / Using handler function wrappers
- withData / Using handler function wrappers
- withAPIKey / Using handler function wrappers
- handlePolls / Using handler function wrappers
- HTML client
- building / Building an HTML and JavaScript chat client
- http.HandleFunc function
- about / A simple web server
- http.Handler example / Abstracting the avatar URL process
- http.Request object
- about / Understanding the request
- HTTP methods / RESTful API design
I
- implementations, of profile pictures
- combining / Combining all three implementations
- interfaces
- about / Interfaces
- implementing / Implementing the interface
- is package / Test-driven enumerator
J
- JavaScript chat client
- building / Building an HTML and JavaScript chat client
M
- main function, for API
- writing / A simple main function to serve our API
- writing, handler function wrappers used / Using handler function wrappers
- mgo
- URL / MongoDB driver for Go
- MinGW project
- URL / Installing the C tools
- MongoDB
- about / System design, MongoDB
- URL / MongoDB
- installing / MongoDB
- installation, validating / MongoDB
- driver for Go / MongoDB driver for Go
N
- NewConsumer function / Consuming messages in NSQ
- NewTemplateHandler function / Doing things once
- NSQ
- about / System design, NSQ
- installing / NSQ
- installation, validating / NSQ
- driver for Go / NSQ driver for Go
- twittervotes program, publishing to / Publishing to NSQ
- nsqd program
- about / NSQ
- nsqlookupd program
- about / NSQ
O
- OAuth2
- about / OAuth2
- open source packages / Open source OAuth2 packages
P
- per request variables
- about / Per request variables
- pipe design, for command-line tools
- profile pictures, implementing
- avatars, from authentication server / Avatars from the authentication server
- public views, of Go structs
- controlling / Public views of Go structs
R
- random recommendations, generating
- about / Generating random recommendations
- Google Places API key / Google Places API key
- enumerators, in Go / Enumerators in Go
- Google Places API, querying / Querying the Google Places API
- recommendations, building / Building recommendations
- handlers, using query parameters / Handlers that use query parameters
- CORS / CORS
- random recommendations web service
- project overview / Project overview
- project design specifics / Project design specifics
- data, representing in code / Representing data in code
- public views of Go structs, controlling / Public views of Go structs
- random recommendations, generating / Generating random recommendations
- testing / Testing our API
- web application / Web application
- receive-only signal channel / Signal channels
- red-green testing
- about / Red-green testing
- request
- about / Understanding the request
- responding
- about / Responding
- RESTful API design
- about / RESTful API design
- design concepts / RESTful API design
S
- send-only signal channel
- about / Reading from Twitter
- signal channels
- about / Signal channels
- using / Signal channels
- social sign-in page, chat application
- creating / Making a pretty social sign-in page
- Sprinkle program
- about / Five simple programs, Sprinkle
- working / Sprinkle
- building / Sprinkle
- running / Sprinkle
- configurable transformations / Exercise – configurable transformations
- strings
- URL / Domainify
- Sublime Text 3
- about / Sublime Text 3
- URL / Sublime Text 3
- Synonyms program
- about / Five simple programs, Synonyms
- environment variables, using for configuration / Using environment variables for configuration
- web API, consuming / Consuming a web API
- domain suggestions / Getting domain suggestions
- system design
- about / System design
- database design / Database design
T
- templateHandler structure / Using your own handlers
- templates
- compiling / Doing things once
- templateHandler type, implementing / Using your own handlers
- using / Getting more out of templates
- Test-driven Development (TDD)
- Test-driven Development (TDD) approach / The authentication service and avatar's implementation
- tests, on save
- text/template package
- Top-level Domain (TLD) / Domainify
- Twitter
- about / System design
- twittervotes program
- about / System design, Votes from Twitter
- authorization / Authorization with Twitter
- MongoDB, reading from / Reading from MongoDB
- Twitter, reading from / Reading from Twitter
- signal channels / Signal channels
- publishing, to NSQ / Publishing to NSQ
- starting / Gracefully starting and stopping
- stopping / Gracefully starting and stopping
- testing / Testing
U
- unexported types
- returning / Unexported types being returned to users
- unit tests
- about / Unit tests
- user command-line tool
- building / The user command-line tool
- data persisting / Persisting small data
- arguments, parsing / Parsing arguments
- using / Using our new tool
W
- web
- about / System design
- web client, consuming API service
- about / A web client that consumes the API
- index page, showing poll list / An index page showing a list of polls
- new poll, creating / A page to create a new poll
- page, for viewing poll details / A page to show details of the poll
- web server
- about / A simple web server
- templates / Templates
- WHOIS specification
- URL / Available
Z
- ZIP
- implementing / Implementing ZIP