A Simple Blog with Go

I built a simple / basic web blog with Go / GoLang along with a CMS / admin panel to manage its content. Here are the steps I did.
Front-End
It is server-side rendering. That means the back-end (GoLang) is rendering the HTML using the Go template. You can visit this article for more explanation about the Go template.
I created a plain HTML/CSS web without any JavaScript framework or library, just TailwindCSS. You can clone the repository on https://github.com/aristorinjuang/blog-frontend.
I created 6 pages. These pages are enough for a basic blog along with its CMS.
- A front-end that is also the list of articles
- An article details page
- A dashboard that is also the list of articles in the admin panel
- A page to create an article or post
- A login page
- A registration page
Back-End
I integrated the front-end into the back-end. Powered by GoLang and MySQL. I don't use any framework such as Echo, Mux, etc. Here are the Go modules that I use.
module github.com/aristorinjuang/blog
go 1.16
require (
github.com/go-sql-driver/mysql v1.5.0
github.com/google/uuid v1.2.0
github.com/gosimple/slug v1.9.0
github.com/joho/godotenv v1.3.0
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83
)
Database
I created two tables for this blog. I think they are enough for a basic blog.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
Assets
The only asset for this project is tailwind.css. I put it in the assets folder.
Helpers
The only helper I had for this project is to validate an email. I put it on the helpers folder.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Here are the unit tests for it.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
|
Views
This project is on Model-View-Controller (MVC) architectural pattern. I already have the HTML pages. I converted them to be Go templates. They can be called View. You can view them on GitHub for more details.
Model
I don't use GORM. I created my Object-Relational Mapping (ORM) itself.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 |
|
Controller
The controller handles HTTP requests. Sessions are stored in Cookies. Each action depends on the HTTP method. It's quite messy without any framework.
Conclusion

The main goal here is to demonstrate how GoLang is also cool enough to create a server-side web rendering. Without any library of a framework, ORM, view, or testing. You can clone this project on https://github.com/aristorinjuang/blog.
I think PHP is the best for server-side web rendering. But PHP needs PHPUnit to handle the tests and GoLang can handle it natively.