当前位置: 首页 > news >正文

【Golang星辰图】Go语言游戏开发:选择合适的库加速你的开发过程

打造出色的游戏体验:使用Go库进行游戏和图形开发

前言

Go语言通过其简洁、高效和并发性的特性,逐渐在开发领域中崭露头角。对于游戏和图形开发,Go也有一些优秀的库和引擎可供选择。本文将介绍几个流行的Go库,包括ebiten、raylib-go、pixel、glfw-go、go-sdl2和engo。这些库提供了各种功能,如窗口管理、绘图、输入处理等,可以帮助开发者快速构建各种类型的游戏和图形应用程序。

欢迎订阅专栏:Golang星辰图

文章目录

  • 打造出色的游戏体验:使用Go库进行游戏和图形开发
      • 前言
      • 1. ebiten
        • 1.1 功能介绍
        • 1.2 优势与用途
      • 2. raylib-go
        • 2.1 功能介绍
        • 2.2 优势与用途
      • 3. pixel
        • 3.1 功能介绍
        • 3.2 优势与用途
      • 4. glfw-go
        • 4.1 功能介绍
        • 4.2 优势与用途
      • 5. go-sdl2
        • 5.1 功能介绍
        • 5.2 优势与用途
      • 6. engo
        • 6.1 功能介绍
        • 6.2 优势与用途
      • 总结

1. ebiten

1.1 功能介绍

ebiten是一个用于2D游戏编程的Go库,它提供了绘制图形、处理输入、播放音频等游戏开发所需的功能。ebiten使用简单,具有高性能和跨平台的特性,适用于开发各种类型的2D游戏。

1.2 优势与用途
  • 简单易用:ebiten提供了简单且直观的API,易于学习和使用。
  • 高性能:ebiten使用底层图形库(如OpenGL和Vulkan)来加速绘图操作,具有出色的性能表现。
  • 跨平台支持:ebiten可以在多个操作系统上运行,包括Windows、macOS和Linux。
  • 音频支持:ebiten提供了用于音频播放和处理的API,使开发者可以轻松添加声音效果。

以下是一个简单的使用ebiten创建一个窗口并渲染一个基本图形的示例代码:

package mainimport ("github.com/hajimehoshi/ebiten""github.com/hajimehoshi/ebiten/ebitenutil"
)const (screenWidth  = 640screenHeight = 480
)func update(screen *ebiten.Image) error {return nil
}func draw(screen *ebiten.Image) {ebitenutil.DebugPrint(screen, "Hello, Ebiten!")
}func main() {ebiten.Run(update, screenWidth, screenHeight, 1, "Hello, Ebiten!")
}

上述示例代码创建了一个窗口,然后通过update函数更新游戏逻辑,draw函数绘制图形。在draw函数中,我们使用了ebitenutil.DebugPrint来在当前帧上绘制文本。在main函数中,使用ebiten.Run来启动游戏循环。

2. raylib-go

2.1 功能介绍

raylib-go是一个用于2D和3D游戏开发的Go库,它是raylib C库的Go绑定。raylib-go提供了一系列函数和结构体,用于图形渲染、物理模拟、输入处理等游戏开发所需的功能。它具有简单易用、高性能和跨平台的特点。

2.2 优势与用途
  • 简单易用:raylib-go提供了简洁而直观的API,易于学习和使用。
  • 高性能:raylib-go使用底层图形库(如OpenGL)来加速图形渲染和物理模拟,具有出色的性能表现。
  • 跨平台支持:raylib-go可以在多个操作系统上运行,包括Windows、macOS和Linux。
  • 丰富的功能:raylib-go提供了一系列功能,如窗口管理、绘图、输入处理、音频播放等,满足开发各种类型的2D和3D游戏的需求。

以下是一个使用raylib-go创建一个窗口并渲染一个基本图形的示例代码:

package mainimport "github.com/gen2brain/raylib-go/raylib"func main() {screenWidth := 800screenHeight := 450raylib.InitWindow(screenWidth, screenHeight, "Hello, Raylib!")raylib.SetTargetFPS(60)for !raylib.WindowShouldClose() {raylib.BeginDrawing()raylib.ClearBackground(raylib.RayWhite)raylib.DrawText("Hello, Raylib!", 10, 10, 20, raylib.LightGray)raylib.EndDrawing()}raylib.CloseWindow()
}

上述示例代码创建了一个窗口,然后通过循环更新和绘制图形。在循环中,我们使用ClearBackground函数清空屏幕,并使用DrawText函数在屏幕上绘制文本。在main函数中,使用InitWindow函数初始化窗口,SetTargetFPS函数设置帧率,BeginDrawing函数开始绘制,EndDrawing函数结束绘制。

raylib-go可以用于开发各种类型的2D和3D游戏,包括平台游戏、角色扮演游戏、射击游戏等。它提供了丰富的功能和易于使用的API,使游戏开发变得简单而快速。

3. pixel

3.1 功能介绍

pixel是一个用于2D游戏开发的Go库,它提供了简单的API和工具,用于处理绘图、动画、碰撞检测等游戏开发所需的功能。pixel使用基于OpenGL的渲染引擎来实现高性能的图形渲染,并支持跨平台开发。

3.2 优势与用途
  • 简单易用:pixel提供了简洁清晰的API设计,易于学习和使用。
  • 高性能:pixel使用基于OpenGL的渲染引擎,具有出色的图形渲染性能。
  • 跨平台支持:pixel可以在多个操作系统上运行,包括Windows、macOS和Linux。
  • 碰撞检测支持:pixel提供了简单的碰撞检测功能,方便开发者处理游戏中的碰撞逻辑。

以下是一个使用pixel创建一个窗口并绘制一个基本图形的示例代码:

package mainimport ("github.com/faiface/pixel""github.com/faiface/pixel/pixelgl""golang.org/x/image/colornames"
)func run() {cfg := pixelgl.WindowConfig{Title:  "Hello, Pixel",Bounds: pixel.R(0, 0, 800, 600),VSync:  true,}win, err := pixelgl.NewWindow(cfg)if err != nil {panic(err)}for !win.Closed() {win.Clear(colornames.White)win.Update()}
}func main() {pixelgl.Run(run)
}

上述示例代码创建了一个窗口,然后通过循环清空窗口并更新。在循环中,我们使用Clear方法将窗口背景色设置为白色,然后使用Update方法更新窗口。

pixel适用于开发各种类型的2D游戏,包括休闲游戏、平台游戏、解谜游戏等。它提供了简单而直观的API,使得开发者可以专注于游戏逻辑的实现,而无需过多关注底层的图形渲染。

4. glfw-go

4.1 功能介绍

glfw-go是Go语言的GLFW库的绑定,它提供了创建窗口、处理输入事件、渲染图形等功能,适用于2D和3D游戏开发。glfw-go使用了底层的OpenGL库,具有高性能和跨平台的特点。

4.2 优势与用途
  • 跨平台支持:glfw-go可以在多个操作系统上运行,包括Windows、macOS和Linux。
  • 简单易用:glfw-go提供了简洁清晰的API,易于学习和使用。
  • 高性能:glfw-go使用底层的OpenGL库来加速图形渲染,并且支持现代图形API如Vulkan等。
  • 输入事件处理:glfw-go提供了处理鼠标、键盘等输入事件的功能,方便开发者处理游戏中的交互逻辑。

以下是一个使用glfw-go创建一个窗口并绘制一个基本图形的示例代码:

package mainimport ("github.com/go-gl/gl/v4.1-core/gl""github.com/go-gl/glfw/v3.3/glfw"
)// 定义窗口尺寸
const (width  = 800height = 600
)func init() {// 初始化GLFWif err := glfw.Init(); err != nil {panic(err)}// 设置OpenGL版本号glfw.WindowHint(glfw.ContextVersionMajor, 4)glfw.WindowHint(glfw.ContextVersionMinor, 1)glfw.WindowHint(glfw.OpenGLProfile, glfw.OpenGLCoreProfile)glfw.WindowHint(glfw.OpenGLForwardCompatible, glfw.True)
}func main() {// 创建窗口window, err := glfw.CreateWindow(width, height, "Hello, GLFW", nil, nil)if err != nil {panic(err)}defer glfw.Terminate()// 设置当前上下文window.MakeContextCurrent()// 初始化OpenGLif err := gl.Init(); err != nil {panic(err)}// 渲染循环for !window.ShouldClose() {// 清空颜色缓冲gl.ClearColor(0.2, 0.3, 0.3, 1.0)gl.Clear(gl.COLOR_BUFFER_BIT)// 交换缓冲区和处理事件window.SwapBuffers()glfw.PollEvents()}
}

上述示例代码使用glfw-go创建了一个窗口,然后通过循环在窗口中绘制图形。在渲染循环中,我们使用gl.ClearColor函数设置背景颜色,并使用gl.Clear函数清空颜色缓冲。最后使用window.SwapBuffers方法交换缓冲区并处理输入事件。

glfw-go适用于开发各种类型的2D和3D游戏,包括模拟器、射击游戏、角色扮演游戏等。它提供了与底层OpenGL库交互的功能,使得开发者可以更加灵活地控制图形渲染和交互逻辑。

5. go-sdl2

5.1 功能介绍

go-sdl2是SDL2的Go语言绑定库,它为开发2D游戏和图形应用程序提供了跨平台的功能。go-sdl2库提供了窗口管理、图形渲染、音频处理、输入事件处理等功能。

5.2 优势与用途
  • 跨平台支持:go-sdl2可以在多个操作系统上运行,包括Windows、macOS和Linux。
  • 简单易用:go-sdl2提供了简单且直观的API,易于学习和使用。
  • 高性能:go-sdl2使用底层的SDL2库来加速图形渲染和音频处理,具有出色的性能表现。
  • 输入事件处理:go-sdl2提供了处理键盘、鼠标等输入事件的功能,方便开发者处理游戏中的交互逻辑。

以下是一个使用go-sdl2创建一个窗口并渲染一个基本图形的示例代码:

package mainimport ("github.com/veandco/go-sdl2/sdl"
)func main() {// 初始化SDL2err := sdl.Init(sdl.INIT_EVERYTHING)if err != nil {panic(err)}defer sdl.Quit()// 创建窗口window, err := sdl.CreateWindow("Hello, SDL2", sdl.WINDOWPOS_UNDEFINED, sdl.WINDOWPOS_UNDEFINED,800, 600, sdl.WINDOW_SHOWN)if err != nil {panic(err)}defer window.Destroy()// 创建渲染器renderer, err := sdl.CreateRenderer(window, -1, sdl.RENDERER_ACCELERATED)if err != nil {panic(err)}defer renderer.Destroy()// 渲染循环running := truefor running {for event := sdl.PollEvent(); event != nil; event = sdl.PollEvent() {switch event.(type) {case *sdl.QuitEvent:running = false}}// 清空渲染器renderer.SetDrawColor(255, 255, 255, 255)renderer.Clear()// 绘制图形renderer.SetDrawColor(255, 0, 0, 255)renderer.DrawPoint(400, 300)// 更新渲染器renderer.Present()}
}

上述示例代码使用go-sdl2创建了一个窗口,并通过渲染循环来绘制图形。在循环中,我们使用renderer.SetDrawColor函数设置绘图颜色,使用renderer.Clear函数清空渲染器,使用renderer.DrawPoint函数绘制一个点,最后使用renderer.Present函数更新渲染器。

go-sdl2适用于开发各种类型的2D游戏和图形应用程序,包括平台游戏、动画、界面设计等。它提供了包括窗口管理、图形渲染、音频处理、输入事件处理等功能,使得开发者可以方便地创建交互丰富的应用程序。

6. engo

6.1 功能介绍

engo是一个用于2D游戏开发的Go引擎,它提供了一系列工具和API,用于处理实体组件系统、物理模拟、图形渲染等游戏开发所需的功能。engo基于ECS(Entity-Component-System)架构,可以快速构建复杂的游戏逻辑。

6.2 优势与用途
  • ECS架构:engo采用ECS架构,将游戏逻辑拆分为实体、组件和系统,使开发者能够更好地组织代码、增加复用性,并能轻松处理游戏中的实体交互和事件系统。
  • 高性能:engo使用底层的OpenGL库进行图形渲染,并提供了物理模拟、碰撞检测等功能,具备优秀的性能。
  • 跨平台支持:engo可以在多个操作系统上运行,包括Windows、macOS和Linux。
  • 插件系统:engo提供了插件系统,可以方便地扩展功能,如音频处理、粒子效果、动画等。

以下是一个使用engo创建一个窗口并渲染一个基本图形的示例代码:

package mainimport ("log""engo.io/ecs""engo.io/engo""engo.io/engo/common"
)// 创建一个自定义系统
type GameScene struct{}func (*GameScene) Type() string { return "GameScene" }func (*GameScene) Preload() {}func (*GameScene) Setup(u engo.Updater) {w, _ := u.(*ecs.World)// 创建一个实体engo.NewEntity([]string{"RenderSystem"}...)
}func (*GameScene) Update(dt float32) {}func (*GameScene) Remove(ecs.BasicEntity) {}func main() {opts := engo.RunOptions{Title:  "Hello, Engo",Width:  800,Height: 600,}engo.Run(opts, &GameScene{})
}

上述示例代码使用engo创建了一个窗口,并通过自定义系统来控制游戏的逻辑和渲染。在Setup方法中,我们可以创建实体并为其添加组件。在Update方法中,我们可以处理游戏逻辑的更新。在main函数中,通过调用engo.Run方法来启动游戏。

engo适用于开发各种类型的2D游戏,包括平台游戏、角色扮演游戏、策略游戏等。它提供了丰富的功能和灵活的架构,使游戏开发变得简单而快速。通过engo的ECS架构和插件系统,开发者可以轻松构建出复杂和富有交互性的游戏。

总结

通过对ebiten、raylib-go、pixel、glfw-go、go-sdl2和engo这六个Go库的介绍,我们了解到它们各自的功能和优势。ebiten和raylib-go提供了简单易用的API,适合快速开发2D游戏。pixel提供了一些基本的绘图和动画功能,适用于简单的2D游戏或图形应用程序。glfw-go和go-sdl2是对底层图形库的封装,提供了更底层的控制和更丰富的功能,适用于需要更高自定义性和灵活性的项目。engo基于ECS架构,提供了强大的拓展性和灵活性,适用于构建复杂的2D游戏。

综上所述,根据项目的特点和需求,选择适合自己的工具将能够提高开发效率并实现理想的游戏和图形应用。

相关文章:

【Golang星辰图】Go语言游戏开发:选择合适的库加速你的开发过程

打造出色的游戏体验:使用Go库进行游戏和图形开发 前言 Go语言通过其简洁、高效和并发性的特性,逐渐在开发领域中崭露头角。对于游戏和图形开发,Go也有一些优秀的库和引擎可供选择。本文将介绍几个流行的Go库,包括ebiten、raylib…...

51单片机-AT24C02(I2C总线)

目录 一,介绍及元件工作原理 7.时序结构(重要) 8.i2C总线数据帧(重要) 二,应用 一,介绍及元件工作原理 1.元件介绍 2.存储器 3.地址总线和数据总线 地址总线只能一次选中一行 4.引脚及应用…...

面试经典-MySQL篇

一、MySQL组成 MySQL数据库的连接池:由一个线程来监听一个连接上请求以及读取请求数据,解析出来一条我们发送过去的SQL语句SQL接口:负责处理接收到的SQL语句查询解析器:让MySQL能看懂SQL语句查询优化器:选择最优的查询…...

C#控制台贪吃蛇

Console.Write("");// 第一次生成食物位置 // 随机生成一个食物的位置 // 食物生成完成后判断食物生成的位置与现在的蛇的身体或者障碍物有冲突 // 食物的位置与蛇的身体或者障碍物冲突了,那么一直重新生成食物,直到生成不冲突…...

[小程序开发] 构造页面

一、Component方法 Component方法用于创建自定义组件,小程序页面也可以使用Component方法进行创建,从而实现复杂的页面逻辑开发。 使用Component方法构造页面,可以实现更加复杂的页面逻辑开发。 二、注意事项 1、要求.json文件中必须包含usi…...

安装Android Studio遇到Unable to access Android SDK add-on list的错误

第一次安装android studio的时候,提示:unable to access Android sdk add-on list 解决办法 这个错误一般是android studoi代理没有设置导致的,需要在setting里面设置: 点击Android Studio - Preferences,在 Appeara…...

EXCEL+PYTHON学习3

1) 遍历一个SHEET,无非就是两个循环,rows属性是取得所有行。 fn data3_16.xlsx wb openpyxl.load_workbook(fn) ws wb.active for row in ws.rows:for cell in row:print(cell.value, end )print() 2) 返回工作表的最小行数…...

Rabbit MQ详解

写在前面,由于Rabbit MQ涉及的内容较多,赶在春招我个人先按照我认为重要的内容进行一定总结,也算是个学习笔记吧。主要参考官方文档、其他优秀文章、大模型问答。自己边学习边总结。后面有时间我会慢慢把所有内容补全,分享出来也是希望可以给…...

uniapp 写安卓app,运行到手机端 调试

手机 设置》关于手机》点击版本号 4-5次,弹出手机锁屏页面,输入手机锁屏密码 2.手机 设置中 》搜索 开发人员选项 》 调试》打开USB调试 同页面 找到 选择USB配置》选择 MIDIhbuilder 编辑器 点击 》运行》运行到手机或模拟器》运行到Android App基座 》…...

uniapp 实现双击点赞出现特效

更新一下 老板改了需求要加上特效 1. 创建点赞按钮 首先&#xff0c;在你的页面中创建一个点赞按钮 全局点赞的话就写在最外面的标签就行了。你可以使用 <button> 组件或者自定义一个视图组件。 <template> <view class"container"> <but…...

分布式搜索引擎elasticsearch(2)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;[Domain Specific Language](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html)&#xff09;来定义查…...

如何实现一个栈或队列?

如何实现一个栈或队列&#xff1f; 栈&#xff08;Stack&#xff09;和队列&#xff08;Queue&#xff09;是两种常见的数据结构&#xff0c;它们在编程中经常被使用。下面我将分别解释如何使用Python来实现这两种数据结构。 1. 栈的实现 栈是一种后进先出&#xff08;LIF…...

STM32输入捕获频率和占空比proteus仿真失败

这次用了两天的时间来验证这个功能&#xff0c;虽然实验没有成功&#xff0c;但是也要记录一下&#xff0c;后面能解决了&#xff0c;回来再写上解决的办法&#xff1a; 这个程序最后的实验结果是读取到的CCR1和CCR2的值都是0&#xff0c;所以没有办法算出来频率和占空比。 还…...

Kafka-SSL笔记整理

创建密钥仓库以及CA 创建密匙仓库,用户存储证书文件keytool -keystore server.keystore.jks -alias hello_kafka -validity 100000 -genkey创建CAopenssl req -new -x509 -keyout ca-key -out ca-cert -days 100000将生成的CA添加到客户端信任库keytool -keystore client.trus…...

Mysql挂掉怎么办

思路 从库处理&#xff0c;relaylog&#xff0c;讲从库升级主库。 待主机恢复后&#xff0c;主机替换为从库。 具体操作 简介&#xff1a; 主库宕机 Master DOWN机-企业场景一主多从宕机从库切换主继续和从同步过程详解 登陆从库&#xff0c;show processlist; 查看两个线…...

《工厂模式(极简c++)》

本文章属于专栏《设计模式&#xff08;极简c版&#xff09;》 继续上一篇《设计原则》。本章简要说明工厂模式。本文分为模式说明、本质思想、实践建议、代码示例四个部分。 模式说明&#xff1a; 简单工厂模式 方案&#xff1a;对象不直接new&#xff0c;而是通过另一个类&am…...

前端学习笔记|JavaScript基础

JS基础 数据类型 基于动力节点视频。 Number、String、Boolean、object 强制转换 Number 强转,boolean强转(undefined、null、NaN都是转成false)&#xff0c;String强转 myAge Number("123445"); Boolean(0); String(123);parseInt、parseFloat 遇到非数字&…...

springcloud五大组件:Eureka:注册中心、Zuul:服务网关、Ribbon:负载均衡、Feign:服务调用、Hystix:熔断器

你提到的这些组件都是Spring Cloud生态系统中非常关键和常用的组件。但是&#xff0c;关于这些组件的命名&#xff0c;有一点需要更正&#xff1a; Eureka 应该是 Eureka 或者 Eureka Server&#xff1a;Eureka是Netflix开源的一个服务发现组件&#xff0c;它本身是一个基于RE…...

Python的Selenium库中的模块、类和异常的汇总

这些是 Selenium Python 库中的模块、类和异常&#xff0c;用于实现自动化 Web 浏览器测试和网页操作。以下是它们的简单解释&#xff1a;Python Module Index — Selenium 4.18.1 documentation 1. selenium.common.exceptions&#xff1a;包含了 Selenium 中可能出现的异常。…...

智慧交通:构建智慧城市的重要一环

随着信息技术的飞速发展&#xff0c;智慧城市已成为现代城市发展的重要方向。作为智慧城市的重要组成部分&#xff0c;智慧交通以其高效、便捷、环保的特性&#xff0c;成为推动城市现代化进程的关键力量。本文将从智慧交通的概念、发展现状、面临挑战以及未来趋势等方面&#…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

(十)学生端搭建

本次旨在将之前的已完成的部分功能进行拼装到学生端&#xff0c;同时完善学生端的构建。本次工作主要包括&#xff1a; 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建

【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...