This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
язык_программирования_golang [2023/05/04 09:24] val |
язык_программирования_golang [2025/01/12 06:20] (current) val [golangci-lint] |
||
---|---|---|---|
Line 1: | Line 1: | ||
====== Язык программирования Golang ====== | ====== Язык программирования Golang ====== | ||
+ | * [[http://golang-book.ru/|Введение в программирование на Go]] | ||
* [[https://www.digitalocean.com/community/tutorials/how-to-build-and-install-go-programs|How To Build and Install Go Programs]] | * [[https://www.digitalocean.com/community/tutorials/how-to-build-and-install-go-programs|How To Build and Install Go Programs]] | ||
- | * [[https://habr.com/ru/articles/647255/|Рекомендации по работе с Docker для Golang-разработчиков (Multistage Building)]] | ||
* [[https://www.systutorials.com/how-to-get-the-hostname-of-the-node-in-go/|How to get the hostname of the node in Go?]] | * [[https://www.systutorials.com/how-to-get-the-hostname-of-the-node-in-go/|How to get the hostname of the node in Go?]] | ||
+ | |||
+ | * [[https://min.io/docs/minio/linux/developers/go/minio-go.html|MinIO Go Client SDK for Amazon S3 Compatible Cloud Storage]] | ||
<code> | <code> | ||
- | client1:~/gowebd# cat main.go | + | student@client1:~$ sudo apt install golang-go |
+ | </code> | ||
+ | ===== Web приложение ===== | ||
+ | <code> | ||
+ | student@client1:~$ mkdir gowebd | ||
+ | |||
+ | student@client1:~$ cd gowebd/ | ||
+ | |||
+ | student@client1:~/gowebd$ cat main.go | ||
</code><code> | </code><code> | ||
package main | package main | ||
Line 17: | Line 27: | ||
) | ) | ||
+ | const ver = "ver1.1" | ||
func main() { | func main() { | ||
http.HandleFunc("/", HelloServer) | http.HandleFunc("/", HelloServer) | ||
- | fmt.Printf("Starting server at port 8080\n") | + | fmt.Printf("Starting server at port 80\n") |
- | if err := http.ListenAndServe(":8080", nil); err != nil { | + | if err := http.ListenAndServe(":80", nil); err != nil { |
log.Fatal(err) | log.Fatal(err) | ||
} | } | ||
Line 27: | Line 38: | ||
func HelloServer(w http.ResponseWriter, r *http.Request) { | func HelloServer(w http.ResponseWriter, r *http.Request) { | ||
- | name, err := os.Hostname() | + | hostname, err := os.Hostname() |
if err != nil { | if err != nil { | ||
panic(err) | panic(err) | ||
} | } | ||
- | fmt.Fprint(w, "Hello world from " + name + "\n") | + | fmt.Fprint(w, "Hello world from gowebd on " + hostname + " " + ver + "\n") |
} | } | ||
</code><code> | </code><code> | ||
- | client1:~/gowebd# cat Dockerfile | + | student@client1:~/gowebd$ sudo go run main.go |
- | </code><code> | + | |
- | FROM golang | + | |
- | #FROM golang as builder | + | |
- | WORKDIR /build | + | student@client1:~/gowebd$ go mod init gowebd |
- | COPY main.go . | + | |
- | RUN go mod init gowebd | + | |
- | RUN go build -o /gowebd | + | |
- | #FROM alpine | + | student@client1:~/gowebd$ sudo go build -o /usr/local/sbin/gowebd |
- | #COPY --from=builder /gowebd /gowebd | + | |
+ | student@client1:~/gowebd$ sudo /usr/local/sbin/gowebd | ||
+ | </code> | ||
+ | ===== golangci-lint ===== | ||
+ | |||
+ | * [[https://golangci-lint.run/welcome/quick-start/|golangci-lint.run quick-start]] | ||
+ | * [[https://blog.ildarkarymov.ru/posts/linters/|golangci-lint и внедрение его в большой проект]] | ||
+ | |||
+ | <code> | ||
+ | $ go mod init gowebd | ||
+ | или | ||
+ | $ cat go.mod | ||
+ | </code><code> | ||
+ | module gowebd | ||
+ | |||
+ | go 1.19 | ||
+ | </code><code> | ||
+ | ~/gowebd# time docker run --rm -v $(pwd):/app -w /app golangci/golangci-lint:v1.62.2 golangci-lint run --timeout=10m | ||
- | ENTRYPOINT ["/gowebd"] | + | main.go:11:7: const `ver2` is unused (unused) |
+ | const ver2 = "ver1.3" | ||
+ | ^ | ||
+ | real 1m28.670s | ||
</code> | </code> |