• Go语言Web开发入门指南


    Go语言Web开发入门指南

    欢迎来到Go语言的Web开发入门指南。Go语言因其出色的性能和并发支持而成为Web开发的热门选择。在本篇文章中,我们将介绍如何使用Go语言构建简单的Web应用程序,包括路由、模板、数据库连接和静态文件服务。

    准备工作

    在开始之前,确保你已经安装了Go语言的开发环境。如果尚未安装,请访问 Go官方网站 并按照指南进行安装。

    创建一个简单的Web服务器

    首先,让我们创建一个简单的Go程序,它将充当我们的Web服务器。创建一个名为main.go的文件,并输入以下内容:

    package main
    
    import (
        "fmt"
        "net/http"
    )
    
    func handler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Hello, Web!")
    }
    
    func main() {
        http.HandleFunc("/", handler)
        http.ListenAndServe(":8080", nil)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    上述代码创建了一个简单的HTTP服务器,它监听端口8080并在根路径(“/”)上提供一个处理函数。在浏览器中访问 http://localhost:8080,你将看到 “Hello, Web!”。

    路由

    在真实的Web应用中,我们通常需要更复杂的路由。我们可以使用第三方包来处理路由。一个常用的路由器是gorilla/mux。首先,安装它:

    go get -u github.com/gorilla/mux
    
    • 1

    然后,在你的main.go文件中使用它:

    package main
    
    import (
        "fmt"
        "net/http"
        "github.com/gorilla/mux"
    )
    
    func homeHandler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Welcome to the Home Page!")
    }
    
    func aboutHandler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Learn more about us on the About Page.")
    }
    
    func main() {
        r := mux.NewRouter()
        r.HandleFunc("/", homeHandler)
        r.HandleFunc("/about", aboutHandler)
    
        http.Handle("/", r)
    
        http.ListenAndServe(":8080", nil)
    }
    
    • 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

    上述代码中,我们使用了gorilla/mux包创建了一个更复杂的路由系统。我们有一个主页路由(“/”)和一个关于页面路由(“/about”)。

    模板

    在真实的Web应用中,我们通常需要渲染HTML页面。Go语言的html/template包可以帮助我们实现这一点。首先,创建一个名为templates的文件夹,并在其中创建一个HTML模板文件,比如index.html

    DOCTYPE html>
    <html>
    <head>
        <title>Go Web Apptitle>
    head>
    <body>
        <h1>{{.}}h1>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    接下来,在你的main.go中使用模板:

    package main
    
    import (
        "fmt"
        "html/template"
        "net/http"
        "github.com/gorilla/mux"
    )
    
    func homeHandler(w http.ResponseWriter, r *http.Request) {
        tmpl, err := template.ParseFiles("templates/index.html")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
    
        tmpl.Execute(w, "Welcome to the Home Page!")
    }
    
    func aboutHandler(w http.ResponseWriter, r *http.Request) {
        tmpl, err := template.ParseFiles("templates/index.html")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
    
        tmpl.Execute(w, "Learn more about us on the About Page.")
    }
    
    func main() {
        r := mux.NewRouter()
        r.HandleFunc("/", homeHandler)
        r.HandleFunc("/about", aboutHandler)
    
        http.Handle("/", r)
    
        http.ListenAndServe(":8080", nil)
    }
    
    • 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

    现在,我们的处理程序使用HTML模板来渲染页面。模板中的{{}}是模板语法,允许我们在页面中插入动态数据。在上述代码中,我们将欢迎消息作为动态数据传递给模板。

    数据库连接

    在Web应用中,通常需要与数据库进行交互。Go语言有丰富的数据库驱动程序,例如database/sql和各种数据库特定的驱动程序。以下是一个简单的示例,演示如何连接到SQLite数据库并执行查询:

    首先,安装SQLite驱动程序:

    go get github.com/mattn/go-sqlite3
    
    • 1

    然后,创建一个数据库连接并执行查询:

    package main
    
    import (
        "database/sql"
        "fmt"
        "net/http"
        "github.com/gorilla/mux"
        _ "github.com/mattn/go-sqlite3"
    )
    
    func viewHandler(w http.ResponseWriter, r *http.Request) {
        db, err := sql.Open("sqlite3", "mydb.db")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        defer db.Close()
    
        rows, err := db.Query("SELECT name FROM users")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
        defer rows.Close()
    
        var names []string
        for rows.Next() {
            var name string
            if err := rows.Scan(&name); err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
            names = append(names, name)
        }
    
        tmpl, err := template.ParseFiles("templates/index.html")
        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }
    
        tmpl.Execute(w, names)
    }
    
    func main() {
        r := mux.NewRouter()
        r.HandleFunc("/", viewHandler)
    
        http.Handle("/", r)
    
        http.ListenAndServe(":8080", nil)
    }
    
    • 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

    上述代码中,我们使用了SQLite数据库,并从表中查询用户的名称。查询结果通过模板渲染到页面中。

    静态文件服务

    Web应用通常需要提供静态文件,如CSS、JavaScript和图像。你可以使用http.FileServer来为你的应用提供静态文件服务。以下是一个示例:

    package main
    
    import (
        "fmt"
        "net/http"
        "github.com/gorilla/mux"
    )
    
    func homeHandler(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "Welcome to the Home Page!")
    }
    
    func main() {
        r := mux.NewRouter()
        r.HandleFunc("/", homeHandler)
    
        // 静态文件服务
        r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
    
        http.Handle("/", r)
    
        http.ListenAndServe(":8080", nil)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在上述代码中,我们创建了一个静态文件服务,它将所有以"/static/"开头的URL映射到static文件夹中的文件。

    总结

    通过这篇文章,你学习了如何使用Go语言构建一个简单的Web应用程序,包括路由、模板、数据库连接和静态文件

  • 相关阅读:
    图论基础 —— 概述
    计算机算法与分析--算法实现题1
    传染病学模型 | Matlab实现SEIR传染病学模型 (SEIR Epidemic Model)
    第二十二章 控制进程(三)
    Java学习----前端4
    ms-sql server sql 把逗号分隔的字符串分开
    CVE-2019-1388 UAC提权实战
    EasyExcel读写数字类型数据丢失精度解决方案
    大模型chatgpt4分析功能初探
    目标资产主动信息收集
  • 原文地址:https://blog.csdn.net/weixin_51151534/article/details/132725217