Golang模板与API开发的比较

Golang模板与API开发的比较 我是Go语言的新手……已经学完了基础知识,现在为了我的Web应用项目,开始学习用Go制作Web应用程序……我的问题是应该选择哪种方式……(再次说明我是新手,所以了解不多)是使用Go模板还是用Go创建API。在Go中构建Web应用,哪种方式更好?另外,使用模板和创建API之间有什么区别?

11 回复

好的,现在我明白了……感谢您的帮助:)

更多关于Golang模板与API开发的比较的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


所以从初学者的角度来看,我应该先学习模板然后再学习API,还是可以同时学习它们?

感谢您的回复……那么模板确实是构建 Go Web 应用程序的正确选择……但使用模板是否比 API 更好?或者从学习角度来看,选择模板方案更合适?

Sibert:

模板服务于你的静态网站(至少我的情况如此)。但API服务于动态部分(来自SQL服务器等数据)

不对。 模板与API的区别与你的数据库无关,而是与你如何渲染HTML有关。

在任何Web应用程序中使用模板都是良好的实践,因为它能使代码更加清晰。但你也可以在模板中使用API调用。因此,我认为没有理由只采用单一方向,因为你的应用程序中肯定需要两者兼顾。

如果可以的话,建议同时学习它们。两者有很多相似之处,一个用于处理HTML,另一个用于处理JSON。在以下代码之前,它们的写法非常相似:

tmpl.Execute(w, "about.html", data)
json.NewEncoder(w).Encode(data)

基本上,应用程序分为两种类型:一种是普通应用程序,用户在不同页面之间导航;另一种是单页面应用程序(SPA)。这两种应用程序都可以使用模板,并且推荐使用模板。如果SPA主要使用后端的API端点,那么在任何应用程序中包含API调用也是很常见的。因此,我认为你可以同时考虑这两种类型。

此外,对于传统的(服务器端)应用程序,至少也要考虑使用 gorilla 工具包,否则在处理页面间的会话时会非常痛苦

Ridham_Sharma: 那么从初学者的角度来看,我应该先学习模板然后再学习API,还是可以同时学习?

我也是新手,但接触过模板和API。据我所知,它们的功能不同。模板用于提供静态网站服务(至少我的情况如此),而API则负责动态部分(如从SQL服务器获取数据等)。

理论上你可以仅使用模板构建网站,但API能让网站实现更灵活的实时动态效果。

我个人的学习路径是先掌握模板,然后再补充API部分。

仅供参考

// 代码示例保留原样

这实际上取决于您的应用程序或您想要构建/学习的内容。正如@geosoft1所提到的,基本上有两种方法:

1 - SPA方法 如今构建API端点是一种相当常见的方法。通常,如果您有多个用户界面(a)iOS/Android b)Web界面 c)控制台应用程序),您会希望使用这种方法。

在这种情况下构建API将允许您的界面与后端API端点交互,并共享大量通用代码。

2 - 服务器端方法 传统上,Web应用程序一直是服务器端应用程序。很多时候您会听到这被称为"MVC"(模型-视图-控制器)。

在这种模式下,您有一个Web应用程序来处理应用程序的所有内容(渲染模板、处理表单提交、过滤表格数据等)。您点击网页上的按钮,它会提交到服务器进行一些处理。您点击链接,服务器会为整个应用程序重新渲染该链接信息的模板。

这两种方法都没有优劣之分。每种方法都有其优缺点。您会看到越来越多的开发人员倾向于API和SPA实现,因为这是最流行的。但服务器端方法是一种非常直接且简单的入门方式,可以构建一个具有实际功能的应用程序。

在Go语言中,选择使用模板还是API来构建Web应用主要取决于你的应用需求和架构目标。作为新手,理解两者的区别和适用场景很重要。下面我将详细解释,并提供代码示例帮助你快速上手。

Go模板与API的区别

  • Go模板(如html/template包):用于服务器端渲染(SSR),生成动态HTML页面。模板允许你将数据嵌入到HTML中,直接在服务器上渲染完整的页面,然后发送给客户端。这种方式适合内容驱动的应用,如博客、新闻网站或需要SEO友好的页面。
  • Go API(通常使用net/http包或框架如Gin):构建RESTful或GraphQL API,返回结构化数据(如JSON),由前端(如JavaScript框架)处理渲染。这种方式适合单页应用(SPA)、移动应用后端或需要前后端分离的场景。

哪种方式更好?

  • 如果你是新手且项目简单(如个人博客或小型信息展示网站),Go模板更容易上手,因为它减少了前端复杂性,所有逻辑在Go中处理。
  • 如果项目需要复杂交互、实时更新或计划与移动端集成,API方式更灵活,但需要额外学习前端技术。

代码示例

示例1:使用Go模板渲染页面

这个例子使用html/template包创建一个简单Web服务器,渲染动态HTML页面。

package main

import (
    "html/template"
    "net/http"
)

type PageData struct {
    Title string
    Name  string
}

func main() {
    tmpl := template.Must(template.ParseFiles("template.html"))
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        data := PageData{
            Title: "Go模板示例",
            Name:  "新手开发者",
        }
        tmpl.Execute(w, data) // 渲染模板并发送响应
    })
    http.ListenAndServe(":8080", nil)
}

模板文件template.html(放在同一目录):

<!DOCTYPE html>
<html>
<head>
    <title>{{.Title}}</title>
</head>
<body>
    <h1>Hello, {{.Name}}!</h1>
    <p>这是一个使用Go模板渲染的页面。</p>
</body>
</html>

运行后,访问http://localhost:8080会显示动态内容。

示例2:使用Go创建API

这个例子使用标准库net/http构建一个简单的REST API,返回JSON数据。

package main

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

type User struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}

func main() {
    http.HandleFunc("/api/user", func(w http.ResponseWriter, r *http.Request) {
        user := User{
            ID:   1,
            Name: "Go开发者",
        }
        w.Header().Set("Content-Type", "application/json")
        json.NewEncoder(w).Encode(user) // 返回JSON响应
    })
    http.ListenAndServe(":8080", nil)
}

运行后,访问http://localhost:8080/api/user会返回JSON数据:{"id":1,"name":"Go开发者"}。前端可以使用JavaScript的fetch或axios来消费这个API。

总结

  • Go模板:简单直接,适合服务器渲染,减少客户端依赖。
  • Go API:灵活,支持前后端分离,但需要额外前端工作。

根据你的项目需求选择:从模板开始学习基础,或直接使用API构建现代应用。两者都可以用Go标准库实现,上手后你可以结合使用(例如,在模板中嵌入API调用)。

回到顶部