1. Урок 1.00:12:10
    2.0 - Creating a code directory and a git repo
  2. Урок 2.00:13:13
    2.1 - A basic web application
  3. Урок 3.00:10:03
    2.1 [ASIDE] - What is a web request?
  4. Урок 4.00:09:15
    2.2 - Explaining our web application in detail
  5. Урок 5.00:10:33
    2.3 - Dynamic reloading
  6. Урок 6.00:08:03
    3.1 - Setting the Content-Type header
  7. Урок 7.00:08:27
    3.2 - Adding a contact page
  8. Урок 8.00:07:35
    3.3 - Adding a 404 page
  9. Урок 9.00:15:20
    3.4 - net/http's ServeMux
  10. Урок 10.00:07:48
    3.5 - github.com/julienschmidt's httprouter
  11. Урок 11.00:07:07
    3.6 - Gorilla Web Toolkit's mux package
  12. Урок 12.00:09:57
    3.7 - Implementing the gorilla/mux router
  13. Урок 13.00:07:11
    3.Ex0 - Exercises overview
  14. Урок 14.00:05:35
    3.Ex1 - Adding an FAQ page
  15. Урок 15.00:05:25
    3.Ex2 - Adding a 404 page
  16. Урок 16.00:07:44
    3.Ex3 - Using httprouter
  17. Урок 17.00:07:22
    4.0 - What are templates?
  18. Урок 18.00:14:51
    4.1 - Our first HTML template
  19. Урок 19.00:07:24
    4.2 - Code injection and contextual encoding
  20. Урок 20.00:03:34
    4.Ex0 - Exercises overview
  21. Урок 21.00:03:12
    4.Ex1 - Rendering a custom field
  22. Урок 22.00:06:03
    4.Ex2 - Rendering additional data attributes
  23. Урок 23.00:04:09
    4.Ex3 - Rendering with nested structures
  24. Урок 24.00:02:58
    5.0 - Intro to the MVC videos
  25. Урок 25.00:13:17
    5.1 - What is MVC?
  26. Урок 26.00:05:59
    5.2 - Walking through a web request with MVC
  27. Урок 27.00:06:36
    5.Ex0 - Exercises
  28. Урок 28.00:11:58
    6.0 - Creating our first view
  29. Урок 29.00:05:49
    6.1 - Creating the contact view
  30. Урок 30.00:08:44
    6.2 - Named and nested templates
  31. Урок 31.00:08:39
    6.3 - Creating the View type
  32. Урок 32.00:12:31
    6.4 - Using the View type
  33. Урок 33.00:25:13
    6.5 - Creating a Bootstrap layout
  34. Урок 34.00:12:46
    6.6 - Adding a navigation bar
  35. Урок 35.00:17:04
    6.7 - Cleaning up our code by globbing template files
  36. Урок 36.00:09:51
    6.8 - Simplifying our view rendering logic
  37. Урок 37.00:03:50
    6.9 - Moving our footer to the bootstrap layout
  38. Урок 38.00:04:43
    6.10 - Summary
  39. Урок 39.00:13:37
    7.0 - Creating the signup page
  40. Урок 40.00:13:56
    7.1 - Wrapping the signup form in a bootstrap panel
  41. Урок 41.00:03:30
    7.2 - Adding a signup link to the navbar
  42. Урок 42.00:14:19
    7.3 - An introduction to REST
  43. Урок 43.00:29:05
    7.4 - Creating our first controller - the users controller
  44. Урок 44.00:22:39
    7.5 - CRUD, HTTP verbs with Gorilla mux, and the create action
  45. Урок 45.00:13:05
    7.6 - Parsing the signup form (parsing POST forms)
  46. Урок 46.00:19:56
    7.7 - Parsing forms with gorilla schema
  47. Урок 47.00:14:27
    7.8 - DRYing up our form parsing code
  48. Урок 48.00:15:24
    7.9 - Creating a controller for our mostly static pages
  49. Урок 49.00:13:31
    7.10 - Making views easier to create
  50. Урок 50.00:05:05
    8.0 - What does it mean to persist data?
  51. Урок 51.00:07:50
    8.1 - Web applications use databases to persist data
  52. Урок 52.00:03:08
    8.2 - We will be using PostgreSQL
  53. Урок 53.00:06:09
    8.3 - SQL has many great educational resources
  54. Урок 54.00:04:38
    8.4 - Postgres is scalable and relatively easy to use
  55. Урок 55.00:07:37
    8.5 - Setting up and connecting to Postgres
  56. Урок 56.00:07:16
    8.6 - SQL basics and creating tables to interact with
  57. Урок 57.00:18:24
    8.7 - Connecting to our database with Go's sql package
  58. Урок 58.00:15:52
    8.8 - Writing records to our database with Go's sql package
  59. Урок 59.00:12:59
    8.9 - Querying for records with Go's sql package
  60. Урок 60.00:15:31
    8.10 - Handling relational data with Go's sql package
  61. Урок 61.00:08:27
    8.11 - Setting up GORM
  62. Урок 62.00:14:19
    8.12 - Creating our first model with GORM
  63. Урок 63.00:13:35
    8.13 - Creating records and logging with GORM
  64. Урок 64.00:16:42
    8.14 - Querying records with GORM
  65. Урок 65.00:12:18
    8.15 - Error handling with GORM
  66. Урок 66.00:11:15
    8.16 - Relational data with GORM
  67. Урок 67.00:09:27
    9.1 - Creating the User model
  68. Урок 68.00:19:10
    9.2 - Creating the UserService
  69. Урок 69.00:07:22
    9.3 - The create user method
  70. Урок 70.00:16:12
    9.4 - What does a model test look like?
  71. Урок 71.00:26:11
    9.5 - Finishing the UserService implementation
  72. Урок 72.00:25:02
    9.6 - Connecting models and controllers
  73. Урок 73.00:14:20
    10.0 - An intro to building an auth system
  74. Урок 74.00:13:37
    10.1 - Store hashes, not passwords
  75. Урок 75.00:10:40
    10.2 - Implementing bcrypt hashing
  76. Урок 76.00:05:27
    10.3 - Using passwords from the signup form
  77. Урок 77.00:14:28
    10.4 - Salt and pepper
  78. Урок 78.00:14:00
    10.5 - Creating the login form
  79. Урок 79.00:17:55
    10.6 - Authenticating users
  80. Урок 80.00:19:41
    11.0 - Remembering users and creating our first cookie
  81. Урок 81.00:05:44
    11.1 - Viewing cookies via code
  82. Урок 82.00:09:04
    11.2 - Creating cookies on login and signup
  83. Урок 83.00:19:42
    11.3 - Securing our cookies from tampering
  84. Урок 84.00:13:09
    11.4 - Generating remember tokens
  85. Урок 85.00:07:29
    11.4 [ASIDE] - Why 32 bytes?
  86. Урок 86.00:16:28
    11.5 - Writing a remember token hasher
  87. Урок 87.00:19:29
    11.6 - Hashing remember tokens on user creation and update
  88. Урок 88.00:15:10
    11.7 - Storing remember tokens in cookies
  89. Урок 89.00:07:33
    11.8 - Securing our cookies from XSS
  90. Урок 90.00:10:50
    11.9 - Securing our cookies from theft and CSRF
  91. Урок 91.00:14:03
    12.0 - Validating and normalizing
  92. Урок 92.00:08:41
    12.1 - Static types vs interfaces
  93. Урок 93.00:11:43
    12.1 [ASIDE] - Emebedding, interfaces, and chaining
  94. Урок 94.00:18:11
    12.2 - The UserDB interface
  95. Урок 95.00:17:55
    12.3 - The UserService interface
  96. Урок 96.00:21:46
    12.4.0 - Organizing validation code
  97. Урок 97.00:07:04
    12.4.1 - Remember token normalizer
  98. Урок 98.00:04:31
    12.4.2 - Ensuring remember tokens are set on create
  99. Урок 99.00:06:59
    12.4.3 - Ensuring a valid ID on delete
  100. Урок 100.00:09:45
    12.5.0 - Converting emails to lowercase and trimming whitespace
  101. Урок 101.00:04:11
    12.5.1 - Requiring email addresses
  102. Урок 102.00:16:28
    12.5.2 - Verifying emails match a pattern
  103. Урок 103.00:10:09
    12.5.3 - Verifying an email address isn't taken
  104. Урок 104.00:15:12
    12.6 - Validating and normalizing passwords
  105. Урок 105.00:12:41
    12.7 - Validating and normalizing remember tokens
  106. Урок 106.00:06:08
    13.1 - Bootstrap alerts
  107. Урок 107.00:05:19
    13.2 - Dynamic alerts
  108. Урок 108.00:05:09
    13.3 - Only show alerts when necessary
  109. Урок 109.00:10:25
    13.4 - Creating the views.Data type
  110. Урок 110.00:13:11
    13.5 - Handling signup errors
  111. Урок 111.00:18:02
    13.6 - Only display public errors
  112. Урок 112.00:09:45
    13.7 - Handling login errors
  113. Урок 113.00:11:42
    13.8 - Handling rendering errors
  114. Урок 114.00:04:36
    14.0 - Intro to the gallery chapter
  115. Урок 115.00:07:31
    14.1 - The gallery model
  116. Урок 116.00:07:49
    14.2 - Sharing a GORM connection and the GalleryService
  117. Урок 117.00:06:12
    14.3 - Utilizing our shared GORM connection (the Services type)
  118. Урок 118.00:07:47
    14.4 - Moving close to the Services type
  119. Урок 119.00:05:55
    14.5 - Implementing the GalleryService
  120. Урок 120.00:09:35
    14.6 - Creating the galleries controller
  121. Урок 121.00:06:26
    14.7 - Implementing the Gallery create action
  122. Урок 122.00:15:23
    14.8 - Gallery validators and normalizers
  123. Урок 123.00:20:13
    14.9 - Requiring users to be logged in to view specific pages
  124. Урок 124.00:15:57
    14.10 - Adding users to the request context
  125. Урок 125.00:35:59
    14.11 - Rendering individual galleries
  126. Урок 126.00:13:39
    14.12 - Galleries edit action
  127. Урок 127.00:06:35
    14.13 - Galleries update action
  128. Урок 128.00:05:21
    14.14 - GalleryService update method
  129. Урок 129.00:13:01
    14.15 - Gallery delete action
  130. Урок 130.00:22:26
    14.16 - Gallery index action
  131. Урок 131.00:35:12
    14.17 - Navbar updates
  132. Урок 132.00:25:23
    15.1 - File upload HTML form
  133. Урок 133.00:24:49
    15.2 - File upload handler
  134. Урок 134.00:18:50
    15.3 - The ImageService and create method
  135. Урок 135.00:16:04
    15.4 - Finding images by Gallery ID
  136. Урок 136.00:21:58
    15.5 - Rendering images
  137. Урок 137.00:32:52
    15.6 - Deleting images
  138. Урок 138.00:19:51
    16.1 - Error cleanup
  139. Урок 139.00:07:59
    16.2 - Serving static assets
  140. Урок 140.00:26:13
    16.3 - CSRF protection
  141. Урок 141.00:06:36
    16.4 - Don't lookup the user when serving static assets
  142. Урок 142.00:07:46
    16.5 - URL encoding image path bug
  143. Урок 143.00:23:06
    16.6 - Starting with config variables
  144. Урок 144.00:21:55
    16.7 - Functional options for services
  145. Урок 145.00:15:54
    16.8 - Loading a JSON config
  146. Урок 146.00:06:29
    16.9 - Setting up a droplet (server) on Digital Ocean
  147. Урок 147.00:07:53
    16.10 - Installing postgres on our prod server
  148. Урок 148.00:13:36
    16.11 - Caddy server
  149. Урок 149.00:32:28
    16.12 - Deploy script
  150. Урок 150.00:13:40
    17.1 - Deleting cookies and logging out users
  151. Урок 151.00:18:10
    17.2 - Redirecting with alerts
  152. Урок 152.00:34:29
    17.3 - Emailing users
  153. Урок 153.00:12:26
    17.4 - Persisting form data
  154. Урок 154.00:29:17
    17.5.1 - Resetting passwords - Creating the pwReset DB table
  155. Урок 155.00:24:30
    17.5.2 - Resetting passwords - Implementing UserService methods
  156. Урок 156.00:05:08
    17.5.3 - Resetting passwords - Form HTML templates
  157. Урок 157.00:20:59
    17.5.4 - Resetting passwords - Controller updates
  158. Урок 158.00:21:04
    17.5.5 - Resetting passwords - Sending emails and building links
  159. Урок 159.00:06:34
    18.1 - Intro to OAuth
  160. Урок 160.00:13:07
    18.2 - Setting up a Dropbox Application
  161. Урок 161.00:09:16
    18.3 - Go's OAuth2 Package
  162. Урок 162.00:16:28
    18.4 - Dropbox OAuth Spike (Part 1)
  163. Урок 163.00:11:59
    18.5 - Dropbox OAuth Spike (Part 2)
  164. Урок 164.00:09:22
    18.6.1 - Persisting OAuth Tokens - Explaining the Token
  165. Урок 165.00:35:46
    18.6.2 - Persisting OAuth Tokens - OAuth Model
  166. Урок 166.00:13:17
    18.6.3 - Persisting OAuth Tokens - Connecting It All
  167. Урок 167.00:17:51
    18.7 - Making Dropbox API Calls
  168. Урок 168.00:09:29
    18.8 - Refactoring to Controllers
  169. Урок 169.00:12:23
    18.9 - Generic OAuth Controller
  170. Урок 170.00:20:08
    19.1 - Intro to the Dropbox SDK
  171. Урок 171.00:15:20
    19.2 - Custom Dropbox Package
  172. Урок 172.00:54:28
    19.3 - Dropbox Chooser
  173. Урок 173.00:33:53
    Mark Bates - Go Buffalo
  174. Урок 174.00:35:15
    Joe Fitzgerald & Zac Bergquist - Atom + Go
  175. Урок 175.00:27:18
    Matt Holt - Caddy & Securing your Server
  176. Урок 176.00:35:24
    Michael Hartl - Learning Just Enough
  177. Урок 177.00:28:35
    Ryan Patterson - Technical Interviews
  178. Урок 178.00:42:36
    Mattan Griffel - Learning to Code
  179. Урок 179.00:41:20
    Charlie Guo - Doing the Unscalable
  180. Урок 180.00:42:58
    Ryan Jackson - Starting a Tech Company
  181. Урок 181.00:40:05
    Adam Wathan - Testing and More