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