[Go] basics and web

This commit is contained in:
2026-03-02 01:47:42 +01:00
parent c88211d161
commit d83f0833ec
11 changed files with 320 additions and 0 deletions

40
slides/go/commands.md Normal file
View File

@@ -0,0 +1,40 @@
## init
```sh
go mod tidy
go mod init hello
```
## Build
```sh
go build .
go tool dist list ## list arch
```
## Types
int32,ing64,
int -> depends on arch
rune -> utf char
string -> array of runes
### Other
```sh
ldd ./hello
ls -lah
strip hello
```
[online compiler](https://godbolt.org)
### Notes
- standard lib is huge
- [beginer go](https://gobyexample.com/)
- [advanced go](https://go.dev/ref/spec)

5
slides/go/go.mod Normal file
View File

@@ -0,0 +1,5 @@
module hello
go 1.24.3
require github.com/radovskyb/watcher v1.0.7 // indirect

BIN
slides/go/hello Executable file

Binary file not shown.

62
slides/go/main.go Normal file
View File

@@ -0,0 +1,62 @@
package main
import (
"net/http"
)
type Point struct {
x int
y int
}
type Boja int
const (
plava = iota //asc
zuta
crvena
)
const (
plava = iota << 1
zuta // 010
crvena // 100
)
type Vektor2d struct {
x int
y int
}
type Vektor3d struct {
x ,y, z int
}
type(p Point) D
type Vektor interface {
Duzina() float32
}
func main() {
p:= Vektor2d[
x:1,
y:1
]
fmt.Println(p.)
// web server
http.HandleFunc("/", a )
http.ListenAndServe(":8080", nil)
}
func a(w http.ResponseWriter, r *http.Request){
w.Write([]byte("Hello Web"))
}

45
slides/go/main1.go Normal file
View File

@@ -0,0 +1,45 @@
//go:build exclude
package main
import "fmt"
func main() {
var a int
var s string = "hello world " + "!!!"
var c = 5
a = a + 1
b := 1
b := []byte(a)
c := string(b)
_ = b
_ = c
fmt.Println("Hello Wordl", "qwe")
fmt.Println(s)
{
d = d
}
d := 5
f(d)
fmt.Println(a, "1")
// std lib
a : = []byte{1,2,3,4}
fmt.Println(hex.EncodeToString(a))
crypto.MD5.New()
}
func f(str *int) {
a=1
}

20
slides/go/server.go Normal file
View File

@@ -0,0 +1,20 @@
//go:build exclude
package main
import (
"net/http"
)
func main() {
// web server
http.HandleFunc("/", a )
http.ListenAndServe(":8080", nil)
}
func a(w http.ResponseWriter, r *http.Request){
w.Write([]byte("Hello Web"))
}

BIN
slides/go/webgo/dmz Executable file

Binary file not shown.

3
slides/go/webgo/go.mod Normal file
View File

@@ -0,0 +1,3 @@
module dmz
go 1.25.1

100
slides/go/webgo/main.go Normal file
View File

@@ -0,0 +1,100 @@
package main
import (
"encoding/json"
"html/template"
"fmt"
"net/http"
// "github.com/radovskyb/watcher"
)
func main(){
// w := watcher.New()
port := ":8080"
http.HandleFunc("/{$}", HtmlContentMiddleware(HomeHandler))
http.HandleFunc("/about", HtmlContentMiddleware(AboutHandler))
http.HandleFunc("GET /api", HtmlContentMiddleware(ApiHandler))
http.HandleFunc("POST /api", HtmlContentMiddleware(ApiHandler))
http.HandleFunc("/", NotFoundHandler)
fmt.Println("http://localhost"+port)
http.ListenAndServe(port, nil)
}
type handleFunc func(w http.ResponseWriter, r *http.Request)
func HtmlContentMiddleware(f handleFunc) handleFunc {
return func(w http.ResponseWriter, r *http.Request){
w.Header().Add("Content-Type", "text/html")
f(w,r)
}
}
func HomeHandler(w http.ResponseWriter, r *http.Request){
// data := struct{
// Name string
// }{
// Name: "Coja",
// }
temp := template.New("home")
temp.Parse(baseTemplate)
temp.Execute(w,messages)
// home := "<html><body><i>Hello world</i></body></html>"
// w.Header().Add("Content-Type", "text/html")
w.Write(temp)
}
func AboutHandler(w http.ResponseWriter, r *http.Request){
// w.Header().Add("Content-Type", "text/html")
w.Write([]byte("about"))
}
func NotFoundHandler(w http.ResponseWriter, r *http.Request){
// w.Header().Add("Content-Type", "text/html")
w.WriteHeader(http.StatusNotFound)
w.Write([]byte("404 Not Found"))
}
func ApiHandler(w http.ResponseWriter, r *http.Request){
w.Header().Add("Content-Type", "application/json")
w.WriteHeader(http.StatusNotFound)
// w.Write([]byte("[1,2,3]"))
var filteredMessages []Message
userParam := r.URL.Query().Get("user")
if userParam != ""{
for _ ,m:=range messages {
if userParam == m.User{
filteredMessages = append(filteredMessages, m)
}
}
} else{
filteredMessages = messages
}
json.NewEncoder(w).Encode(filteredMessages)
}
func NewMessageHandler(w http.ResponseWriter, r *http.Request){
var message Message
err := json.NewDecoder(r.Body).Decode(&message)
userParam := r.URL.Query().Get("user")
if err != nil{
w.WriteHeader(http.StatusBadRequest)
return
}
if userParam != ""{
w.WriteHeader(http.StatusBadRequest)
return
}
// messages.append(messages, message)
}

View File

@@ -0,0 +1,25 @@
package main
type Message struct {
Content string
User string
}
var messages []Message = []Message {
{
Content: "hi",
User: "dmz",
},
{
Content: "hello",
User: "admin",
},
{
Content: "sup?",
User: "dmz",
},
{
Content: "s3nd nud3s",
User: "admin",
},
}

View File

@@ -0,0 +1,20 @@
package main
var baseTemplate =`
<html>
<head>
<title>Home</title>
<style>
p {
background-color: #f4f4f4;
border-radius: 5px;
}
</syle>
</head>
<body>
{{range .}}
<p>{{.Content}} {{.Name}}</p>
{{end}}
</body>
</html>
`