Golang与Angular在Web开发中的选择:哪个更适合作为前端技术?
Golang与Angular在Web开发中的选择:哪个更适合作为前端技术? 我正在为一个三层Web应用程序选择工具。虽然对Angular和Go的了解有限,但我至少发现了两种主要的实现方式:
1. Angular方式
据我所知,Angular需要Web服务器(如nginx)才能运行。优点是拥有大量扩展Angular功能的模块。缺点则是存在对其他模块的依赖以及版本兼容性问题。

2. Go方式
Go不需要单独的Web服务器,可以根据这个网站来创建整个网站

我的问题是:
-
我的理解是否正确,这两种方式都能正常工作?
-
每种方式各有什么优缺点?速度如何?复杂性怎样?可维护性如何?
-
对于创建Web应用程序(主要是CRUD操作)还有其他建议吗?
欢迎任何意见!
更多关于Golang与Angular在Web开发中的选择:哪个更适合作为前端技术?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
如果你真的想要真诚的建议,那么我建议你在前端使用VUE.js而不是Angular,后端选择Go语言。
更多关于Golang与Angular在Web开发中的选择:哪个更适合作为前端技术?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Sibert:
我该如何理解这一点?
你应该将其理解为"直接用Go替代你的nginx"。
// 代码示例保留原样
func main() {
fmt.Println("hello world")
}
NobbZ:
你应该这样理解:“直接把 Go 当作你的 nginx 来用”。
我最初的问题是问该用 Go 做前端还是用 Angular 做前端。那么把 Go 也用作前端是不是一个好的选择呢?
你可以使用Go作为后端,Angular作为前端。为什么要把Go和Angular视为不同的方式呢?当然,在后端使用Go时,你不需要另外的网页服务器。
创建网页应用的其他建议
使用Go作为后端处理端点、数据库操作,并使用模板来提供包含HTML、JS(含Angular代码)和CSS的网页。关于创建网络服务,网上有大量资源可供参考。
我虽然没有实际使用过,但认为可以在前端将Go作为WebAssembly来使用。
Sibert: 我该如何理解这一点?
用Go编写自己的Web服务器和端点。在Go中编写Web服务器是非常简单的任务。某些端点可以暴露数据,有些端点则返回对应特定模板的网页。这些网页将包含HTML、CSS、JS和Angular代码。同时使用Angular的$http服务,你可以轻松调用程序中的其他端点。
Sibert: 据我所知Angular需要Web服务器(nginx)才能工作。
完全不需要。Angular可以下载并包含在你的Web项目中,也可以直接从CDN在线使用。
geosoft1 说: 你可以使用 Go 作为后端,Angular 作为前端。为什么你认为 Go 和 Angular 是相互独立的方案?当然,在后端使用 Go 时,你不需要其他 Web 服务器。
由于我不是专家,我认为将 Go 用作前端和将 Angular 用作前端是两种不同的路径。我只是好奇是否也可以将 Go 用作前端。
geosoft1 说: 使用 Go 作为端点、数据库操作和模板的后端,以提供包含 HTML、JS(带有 Angular 代码)和 CSS 的网页。
我应该如何理解这一点?是使用一个 Go 层同时处理前端和 REST 吗?还是使用独立的层?或者是 Angular 的方式?
提出这个问题的目的是想弄清楚 Go 的方式是否可行,以及每种路径的优缺点……
你好,
简单的答案是肯定的,你可以使用这两种方法中的任意一种。我一直在尝试Go的WebAssembly支持,虽然它非常新,但确实能工作……不过有一些注意事项。
如果你想尝试,我的应用已经发布在我的网站上:http://jayts.com/vp/
(稍后我会提供游戏玩法说明,但如果你不熟悉这种流行的赌场游戏,现在可以先搜索"视频扑克策略"之类的关键词。目前我能说的是,你也可以使用键盘来玩游戏,如果打开开发者工具,还可以在调试控制台中玩游戏。按键A-I选择不同版本的视频扑克。游戏控制台版本的手册在这里:https://github.com/Yaoir/Go-VideoPoker。)
我正在整理源代码,准备发布到GitHub上。希望这能帮助其他Go程序员了解Go的WebAssembly支持,并激励他们尝试使用。
我对Go和WebAssembly感到兴奋,因为现在可以用Go同时进行客户端和服务器端开发(“全栈”),而无需编写任何JavaScript代码!而且很明显,未来情况只会变得更好(可能很快)。这真的很酷。但现实地说,我们现在的情况是:
JavaScript:自20世纪90年代就已存在,每个浏览器都有一个可靠的JavaScript引擎,而且由于JavaScript代码的编译,它比过去快得多。几乎所有关于DOM操作、事件处理等的文档都提供JavaScript示例,因为长期以来这是唯一的方法。在过去的20年里,为JavaScript程序员编写了各种框架和库,包括Angular、Vue、React等。
Go:WebAssembly支持只有几个月的历史,其文档是这样描述的:
这个包是实验性的。它目前的范围仅允许测试运行,但尚未为用户提供全面的API。它不受Go兼容性承诺的约束。
可用的框架或库有限或没有,所以就像仅限于纯JavaScript一样。我见过一些公司用纯JavaScript(没有框架)开发Web应用,但这很少见。
话虽如此,我真的很享受用Go编写Web应用。用Go似乎可以(尽管更复杂)完成任何可以用JavaScript完成的事情,对于任何现在开始开发网站的人来说,选择Go进行服务器端和客户端编程将是一个大胆的举动。整个项目可以用一种语言完成,这种语言在许多方面都比JavaScript好得多,而且未来随着WebAssembly的发展,这可能会真正带来回报。
所以这是常见的情况:早期采用者承担风险,但如果事情顺利,会获得最大的回报。
你的理解基本正确,但需要澄清一些关键点。Go和Angular在Web开发中扮演不同角色:Go主要用于后端服务,而Angular是前端框架。以下是针对你问题的详细回答。
1. 理解是否正确?
是的,两种方式都能工作,但它们是互补的:
- Angular方式:Angular作为前端框架,需要一个Web服务器(如nginx或Go后端)来提供静态文件和处理API请求。Go可以作为后端API服务器,与Angular前端配合。
- Go方式:Go可以单独用于构建完整的Web应用,包括后端逻辑和前端服务(通过模板引擎如
html/template),但Go本身不是前端框架,不适合构建复杂的前端交互。
2. 优缺点、速度、复杂性和可维护性
Angular + Go后端(分离架构)
- 优点:
- 前端丰富性:Angular提供强大的单页应用(SPA)功能,如数据绑定、组件化和丰富的UI库,适合复杂前端交互。
- 生态系统:有大量第三方模块(如Angular Material)加速开发。
- 可维护性:前后端分离,团队可以并行开发,代码更模块化。
- 性能:Angular通过优化(如懒加载)提升前端性能;Go后端高效处理并发请求。
- 缺点:
- 复杂性:需要管理两个独立项目(前端和后端),增加部署和配置复杂性(如CORS处理)。
- 依赖问题:Angular依赖Node.js生态系统,可能遇到版本兼容性问题。
- 学习曲线:需掌握TypeScript和Angular框架。
示例:Go后端提供API,Angular前端消费API。
// Go后端示例:简单的CRUD API
package main
import (
"encoding/json"
"net/http"
)
type Item struct {
ID int `json:"id"`
Name string `json:"name"`
}
var items []Item
func main() {
http.HandleFunc("/api/items", handleItems)
http.ListenAndServe(":8080", nil)
}
func handleItems(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
switch r.Method {
case "GET":
json.NewEncoder(w).Encode(items)
case "POST":
var item Item
json.NewDecoder(r.Body).Decode(&item)
items = append(items, item)
json.NewEncoder(w).Encode(item)
}
}
Angular前端使用HttpClient调用此API。
纯Go方式(使用模板引擎)
- 优点:
- 简单性:单一代码库,无需额外Web服务器(Go内置HTTP服务器),部署简单。
- 性能:Go编译为本地代码,处理请求速度快,适合高并发场景。
- 无依赖:不依赖外部前端框架,减少版本兼容问题。
- 可维护性:对于简单CRUD应用,代码结构直接。
- 缺点:
- 前端限制:Go的模板引擎(如
html/template)功能有限,不适合构建动态前端应用,缺乏现代SPA特性。 - 复杂性:对于复杂UI,需手动处理JavaScript,开发效率低。
- 生态系统:前端工具和库较少。
- 前端限制:Go的模板引擎(如
示例:Go使用模板渲染HTML。
package main
import (
"html/template"
"net/http"
)
func main() {
tmpl := template.Must(template.ParseFiles("index.html"))
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
data := struct{ Title string }{Title: "My Go Web App"}
tmpl.Execute(w, data)
})
http.ListenAndServe(":8080", nil)
}
对应HTML模板文件index.html:
<!DOCTYPE html>
<html>
<head>
<title>{{.Title}}</title>
</head>
<body>
<h1>Welcome to {{.Title}}</h1>
</body>
</html>
速度比较
- 后端性能:Go在并发处理上优势明显,适合高负载API。
- 前端性能:Angular通过优化(如AOT编译)提供快速渲染,但初始加载可能较慢;Go模板渲染简单快速,但交互性差。
复杂性
- Angular + Go:中等至高,取决于应用规模。
- 纯Go:低至中等,适合简单应用。
可维护性
- Angular + Go:高,分离架构便于测试和更新。
- 纯Go:中等,代码可能混杂前后端逻辑。
3. 其他建议
对于CRUD Web应用:
- 如果应用需要丰富的前端交互(如实时更新、复杂表单),推荐Angular + Go后端。使用Go构建RESTful API,Angular处理UI。
- 如果应用简单,以内容展示为主,纯Go方式足够,使用数据库驱动(如
database/sql)和模板。 - 考虑其他选项:对于前端,React或Vue.js可能更轻量;对于后端,Go可与任何前端框架集成。
示例:Go与数据库交互的CRUD操作。
// 使用database/sql进行数据库操作(以MySQL为例)
package main
import (
"database/sql"
"fmt"
"log"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "user:password@/dbname")
if err != nil {
log.Fatal(err)
}
defer db.Close()
// 示例:查询数据
rows, err := db.Query("SELECT id, name FROM items")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
err = rows.Scan(&id, &name)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, Name: %s\n", id, name)
}
}
总之,选择取决于需求:复杂前端用Angular + Go,简单应用用纯Go。两者在性能上均表现良好,Go确保后端效率。


