Compare commits
9 Commits
be2c3ae178
...
v1.3.0
Author | SHA1 | Date | |
---|---|---|---|
cf8aea5115 | |||
c510646c84 | |||
a4366c7395 | |||
073dfafb28 | |||
3fa5cf46d2 | |||
bd8b015f44 | |||
5a1cd77676 | |||
012906eee2 | |||
2a705483d9 |
22
.gitignore
vendored
22
.gitignore
vendored
@ -1,4 +1,26 @@
|
|||||||
|
# GoWeb specific
|
||||||
env.json
|
env.json
|
||||||
logs/
|
logs/
|
||||||
*.log
|
*.log
|
||||||
|
|
||||||
|
# Binaries for programs and plugins
|
||||||
|
*.exe
|
||||||
|
*.exe~
|
||||||
|
*.dll
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
|
||||||
|
# Test binary, built with `go test -c`
|
||||||
|
*.test
|
||||||
|
|
||||||
|
# Output of the go coverage tool, specifically when used with LiteIDE
|
||||||
|
*.out
|
||||||
|
|
||||||
|
# Dependency directories
|
||||||
|
vendor/
|
||||||
|
|
||||||
|
# Go workspace file
|
||||||
|
go.work
|
||||||
|
|
||||||
|
# IDE files
|
||||||
/.idea
|
/.idea
|
59
README.md
Normal file
59
README.md
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
# GoWeb 🌐
|
||||||
|
|
||||||
|
GoWeb is a simple Go web framework that aims to only use the standard library. The overall file structure and
|
||||||
|
development flow is inspired by larger frameworks like Laravel. It is partially ready for smaller projects if you are
|
||||||
|
fine with getting your hands dirty, but I plan on having it ready to go for more serious projects when it hits version
|
||||||
|
2.0.
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
## Current features 🚀
|
||||||
|
|
||||||
|
- Routing/controllers
|
||||||
|
- Templating
|
||||||
|
- Simple database migration system
|
||||||
|
- CSRF protection
|
||||||
|
- Minimal user login/registration + sessions
|
||||||
|
- Config file handling
|
||||||
|
- Entire website compiles into a single binary (~10mb) (excluding env.json)
|
||||||
|
- Minimal dependencies (just standard library, postgres driver, and experimental package for bcrypt)
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
## When to use 🙂
|
||||||
|
|
||||||
|
- You need to build a dynamic web application with persistent data
|
||||||
|
- You need to build a dynamic website using Go and need a good starting point
|
||||||
|
- You need to build an API in Go and don't know where to start
|
||||||
|
- Pretty much any use-case where you would use Laravel, Django, or Flask
|
||||||
|
|
||||||
|
## When not to use 🙃
|
||||||
|
|
||||||
|
- You need a static website (see [Hugo](https://gohugo.io/))
|
||||||
|
- You need a simple blog (see [Hugo](https://gohugo.io/))
|
||||||
|
- You need a simple site for your projects' documentation (see [Hugo](https://gohugo.io/))
|
||||||
|
|
||||||
|
## How to use 🤔
|
||||||
|
|
||||||
|
1. Clone
|
||||||
|
2. Run `go get` to install dependencies
|
||||||
|
3. Copy env_example.json to env.json and fill in the values
|
||||||
|
4. Run `go run main.go` to start the server
|
||||||
|
5. Start building your app!
|
||||||
|
|
||||||
|
## How to contribute 👨💻
|
||||||
|
|
||||||
|
- Open an issue on GitHub if you find a bug or have a feature request.
|
||||||
|
- [Email](mailto:contact@mpatterson.xyz) me a patch if you want to contribute code.
|
||||||
|
- Please include a good description of what the patch does and why it is needed, also include how you want to be
|
||||||
|
credited in the commit message.
|
||||||
|
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
### License and disclaimer 😤
|
||||||
|
|
||||||
|
- You are free to use this project under the terms of the MIT license. See LICENSE for more details.
|
||||||
|
- You and you alone are responsible for the security and everything else regarding your application.
|
||||||
|
- It is not required, but I ask that when you use this project you give me credit by linking to this repository.
|
||||||
|
- I also ask that when releasing self-hosted or other end-user applications that you release it under
|
||||||
|
the [GPLv3](https://www.gnu.org/licenses/gpl-3.0.html) license. This too is not required, but I would appreciate it.
|
2
go.mod
2
go.mod
@ -4,5 +4,5 @@ go 1.20
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/lib/pq v1.10.7
|
github.com/lib/pq v1.10.7
|
||||||
golang.org/x/crypto v0.6.0
|
golang.org/x/crypto v0.7.0
|
||||||
)
|
)
|
||||||
|
4
go.sum
4
go.sum
@ -1,4 +1,4 @@
|
|||||||
github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
|
github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw=
|
||||||
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc=
|
golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A=
|
||||||
golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58=
|
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
|
||||||
|
@ -23,7 +23,7 @@ func GetRoutes(app *app.App) {
|
|||||||
}
|
}
|
||||||
staticHandler := http.FileServer(http.FS(staticFS))
|
staticHandler := http.FileServer(http.FS(staticFS))
|
||||||
http.Handle("/static/", http.StripPrefix("/static/", staticHandler))
|
http.Handle("/static/", http.StripPrefix("/static/", staticHandler))
|
||||||
log.Println("Serving static files from embedded FS")
|
log.Println("Serving static files from embedded file system /static")
|
||||||
|
|
||||||
// Pages
|
// Pages
|
||||||
http.HandleFunc("/", getController.ShowHome)
|
http.HandleFunc("/", getController.ShowHome)
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<input name="csrf_token" type="hidden" value="{{ .CsrfToken }}">
|
<input name="csrf_token" type="hidden" value="{{ .CsrfToken }}">
|
||||||
|
|
||||||
<label for="username">Username:</label><br>
|
<label for="username">Username:</label><br>
|
||||||
<input id="username" name="username" type="text" value="John"><br><br>
|
<input id="username" name="username" type="text" placeholder="John"><br><br>
|
||||||
<label for="password">Password:</label><br>
|
<label for="password">Password:</label><br>
|
||||||
<input id="password" name="password" type="password"><br><br>
|
<input id="password" name="password" type="password"><br><br>
|
||||||
<input type="submit" value="Submit">
|
<input type="submit" value="Submit">
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
<input name="csrf_token" type="hidden" value="{{ .CsrfToken }}">
|
<input name="csrf_token" type="hidden" value="{{ .CsrfToken }}">
|
||||||
|
|
||||||
<label for="username">Username:</label><br>
|
<label for="username">Username:</label><br>
|
||||||
<input id="username" name="username" type="text" value="John"><br><br>
|
<input id="username" name="username" type="text" placeholder="John"><br><br>
|
||||||
<label for="password">Password:</label><br>
|
<label for="password">Password:</label><br>
|
||||||
<input id="password" name="password" type="password"><br><br>
|
<input id="password" name="password" type="password"><br><br>
|
||||||
<input type="submit" value="Submit">
|
<input type="submit" value="Submit">
|
||||||
|
Reference in New Issue
Block a user