从网页调用Golang程序的实现方法

从网页调用Golang程序的实现方法 是否有专门关于HTML/JavaScript与Go程序之间接口的文档?具体来说,我希望在网页提交时启动一个Go程序。虽然可以通过监听程序实现,但这要求Go程序已经在运行。

3 回复

HTML页面与服务器之间的接口称为HTTP,它需要一个HTTP服务器来运行。

更多关于从网页调用Golang程序的实现方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


一种常见的方式是通过HTTP接口将Go程序作为Web服务暴露,然后由前端JavaScript调用。以下是具体实现示例:

1. Go后端服务:

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "time"
)

// 处理表单提交的处理器
func submitHandler(w http.ResponseWriter, r *http.Request) {
    // 解析表单数据
    if err := r.ParseForm(); err != nil {
        http.Error(w, "表单解析失败", http.StatusBadRequest)
        return
    }
    
    name := r.FormValue("name")
    email := r.FormValue("email")
    
    // 模拟处理逻辑
    result := fmt.Sprintf("收到提交:姓名=%s, 邮箱=%s, 时间=%v", 
        name, email, time.Now().Format("2006-01-02 15:04:05"))
    
    // 返回JSON响应
    response := map[string]string{
        "status":  "success",
        "message": result,
    }
    
    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(response)
}

func main() {
    // 注册路由
    http.HandleFunc("/api/submit", submitHandler)
    
    // 可选:提供静态文件服务(HTML页面)
    http.Handle("/", http.FileServer(http.Dir("./static")))
    
    fmt.Println("服务启动在 :8080")
    http.ListenAndServe(":8080", nil)
}

2. HTML前端页面(static/index.html):

<!DOCTYPE html>
<html>
<head>
    <title>调用Go程序示例</title>
</head>
<body>
    <form id="submitForm">
        <input type="text" name="name" placeholder="姓名" required>
        <input type="email" name="email" placeholder="邮箱" required>
        <button type="submit">提交</button>
    </form>
    
    <div id="result"></div>

    <script>
        document.getElementById('submitForm').addEventListener('submit', async (e) => {
            e.preventDefault();
            
            const formData = new FormData(e.target);
            const data = Object.fromEntries(formData.entries());
            
            try {
                const response = await fetch('http://localhost:8080/api/submit', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/x-www-form-urlencoded',
                    },
                    body: new URLSearchParams(data)
                });
                
                const result = await response.json();
                document.getElementById('result').innerHTML = 
                    `<p>状态: ${result.status}</p><p>消息: ${result.message}</p>`;
            } catch (error) {
                document.getElementById('result').innerHTML = 
                    `<p style="color:red">请求失败: ${error.message}</p>`;
            }
        });
    </script>
</body>
</html>

3. 使用WebSocket实现实时通信:

// Go WebSocket服务端
package main

import (
    "net/http"
    "github.com/gorilla/websocket"
)

var upgrader = websocket.Upgrader{
    CheckOrigin: func(r *http.Request) bool { return true },
}

func wsHandler(w http.ResponseWriter, r *http.Request) {
    conn, _ := upgrader.Upgrade(w, r, nil)
    defer conn.Close()
    
    for {
        // 读取前端消息
        messageType, msg, err := conn.ReadMessage()
        if err != nil {
            break
        }
        
        // 处理消息并返回响应
        response := "Go程序处理结果: " + string(msg)
        conn.WriteMessage(messageType, []byte(response))
    }
}

func main() {
    http.HandleFunc("/ws", wsHandler)
    http.ListenAndServe(":8080", nil)
}

4. 使用Gin框架的REST API示例:

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    r := gin.Default()
    
    r.POST("/api/process", func(c *gin.Context) {
        var request struct {
            Data string `json:"data" binding:"required"`
        }
        
        if err := c.ShouldBindJSON(&request); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        
        // 处理业务逻辑
        result := "处理后的数据: " + request.Data
        
        c.JSON(http.StatusOK, gin.H{
            "result": result,
            "status": "completed",
        })
    })
    
    r.Run(":8080")
}

这些示例展示了通过HTTP接口、WebSocket和REST API实现网页与Go程序交互的典型方法。Go程序作为常驻服务运行,前端通过标准网络协议与之通信。

回到顶部