【Gin-Web】Bluebell社区项目梳理3:社区相关接口开发
本文目录
- 一、接口详情
- 1. 获取分类社区列表接口
- 2. 根据id查询社区
- 二、值类型与引用类型
一、接口详情
跟社区有关的接口详情如下。

1. 获取分类社区列表接口
首先是Controller层,然后跳转到Logic层业务逻辑的开发。

这是Logic层,再做一次跳转,到DAO层转发。

下面是DAO层的查询代码。

这是对应的实体接收。

在调用 db.Select 时,我们传递了 &communityList,即 communityList 的地址(一个指针)。&communityList 是 communityList 的地址,db.Select 方法通过这个地址直接操作 communityList。
db.Select 方法会使用这个指针来填充查询结果。具体来说,它会根据查询结果的每一行,创建一个 models.Community 对象,并将这些对象的指针存储到 communityList 切片中。
然后再逐渐返会给controller层,让其写会Response。
2. 根据id查询社区

然后到Controller层。

strconv.ParseUint:这是 Go 标准库中的函数,用于将字符串转换为无符号整数。(也就是把字符串转换为64位整型)
communityIdStr:要转换的字符串。
10:表示字符串是基于 10 进制的数字(即普通的整数格式)。
64:表示目标整数的位大小,这里是 64 位,因此转换结果是一个 uint64 类型的值。



这里有个点,需要注意,我们new了一个community接收,但是在上面获取社区分类的时候没有new,这是为什么呢?
在 GetCommunityList 中,communityList 是一个切片,db.Select 会自动初始化并填充数据,因此不需要显式初始化。
在 GetCommunityByID 中,community 是一个结构体指针,需要显式初始化(使用 new),因为 db.Get 需要一个有效的指针来填充数据。
这里就需要回顾Go的语法知识了。
在 Go 中,切片是一个引用类型,其零值是 nil。当你声明一个切片变量时,它默认初始化为 nil。然而,切片有一个重要的特性:它可以在运行时动态分配内存。这意味着即使你没有显式初始化切片,只要传递切片的地址给一个函数(如 db.Select),这个函数就可以通过指针直接操作切片,动态地为其分配内存并填充数据。
结构体指针需要显式初始化,因为结构体是一个值类型,而指针需要指向一个具体的内存地址。如果你声明了一个结构体指针但没有初始化,它的值将是 nil,这意味着它不指向任何有效的内存地址。因此,当你需要将查询结果映射到结构体中时,必须先初始化这个结构体指针。
二、值类型与引用类型
在 Go 语言中,类型可以分为两大类:值类型(Value Types) 和 引用类型(Reference Types)。它们的主要区别在于存储方式、复制行为以及如何在内存中管理数据。
值类型是指存储实际数据值的类型。在 Go 中,以下类型属于值类型:基本类型:如 int、float64、bool、string 等。
当值类型的变量被赋值或传递给函数时,会进行值的拷贝。这意味着每次赋值或传递都会创建一个新的副本。
a := 10
b := a // b 是 a 的一个副本,修改 b 不会影响 a
值类型的变量通常存储在栈(stack)上,内存分配和释放由编译器管理,效率较高。
引用类型是指存储指向数据的引用(或指针)的类型。在 Go 中,以下类型属于引用类型:
切片(slice)、映射(map)、通道(channel)、指针(pointer)、接口(interface)。
引用类型的变量存储的是数据的内存地址,而不是数据本身。实际的数据存储在堆(heap)上。
例如,一个切片变量其本质存储的是指向底层数组的指针、长度和容量。
当引用类型的变量被赋值或传递给函数时,只复制引用(指针),而不是数据本身。这意味着多个变量可能指向同一个底层数据。
a := []int{1, 2, 3}
b := a // b 和 a 指向同一个底层数组,修改 b 会影响 a
引用类型的数据通常存储在堆上,内存分配和释放由 Go 的垃圾回收器(Garbage Collector, GC)管理。
假设一个程序的内存布局如下(从低地址到高地址):

栈通常位于内存的高地址区域。
栈的增长方向是从高地址向低地址增长(向下增长)。
栈内存由编译器自动管理,用于存储局部变量、函数调用的上下文信息等。
堆通常位于内存的低地址区域。
堆的增长方向是从低地址向高地址增长(向上增长)。
堆内存由程序员通过动态内存分配函数(如 malloc 或 Go 中的 new 和 make)管理,用于存储动态分配的数据。
栈的内存分配和释放非常快,因为它使用的是连续的内存块,且由编译器自动管理。
堆的内存分配和释放相对复杂,因为它是动态的,需要垃圾回收器或程序员手动管理。
栈的大小通常有限(例如几 MB),并且由操作系统限制,以防止栈溢出攻击。因此适合放小的数据。
堆的大小通常更大,由程序动态分配,适合存储大型数据结构。适合存储大型或动态数据。
相关文章:
【Gin-Web】Bluebell社区项目梳理3:社区相关接口开发
本文目录 一、接口详情1. 获取分类社区列表接口2. 根据id查询社区 二、值类型与引用类型 一、接口详情 跟社区有关的接口详情如下。 1. 获取分类社区列表接口 首先是Controller层,然后跳转到Logic层业务逻辑的开发。 这是Logic层,再做一次跳转&#…...
Unity 聊天气泡根据文本内容适配
第一步 拼接UI 1、对气泡图进行九宫图切割 2、设置底图pivot位置和对齐方式 pivot位置:(0,1) 对齐方式:左上对齐 3、设置文本pivot位置和对齐方式,并挂上布局组件 pivot设置和对齐方式和底图一样&#…...
对学习编程语言的一些理解
目录 一、代码运行的过程 二、跨平台的实现 1)C/C 2)C# 3)Java 三、总结 一、代码运行的过程 开发程序无论使用何种编程语言,至少都需要经历编码、编译、连接和运行这么4个过程,C语言是这样,Java语言…...
MySQL MHA 部署全攻略:从零搭建高可用数据库架构
文章目录 1.MHA介绍2.MHA组件介绍3.集群规划4.服务器初始化5.MySQL集群部署5.1 安装MySQL集群5.2 配置一主两从5.3 测试MySQL主从5.4 赋予MHA用户连接权限 6.安装MHA环境6.1 安装MHA Node6.2 安装MHA Manager 7.配置MHA环境8.MySQL MHA高可用集群测试8.1 通过VIP连接MySQL8.2模…...
windows怎样查看系统信息(处理器等)
首先打开命令行工具 win R 输入 cmd, 输入 msinfo32 ,然后回车 这个页面就可以看到 电脑的锐龙版就是 AMD 芯片 酷睿版就是 intel 芯片...
007 HBuilderX提示IDE service port disabled. To use CLI Call, open IDE
描述 微信小程序 工具的服务端口已关闭 解决方案 在HBuider的菜单“运行”选择“运行到小程序模拟器-微信开发者工具”时,步骤如图: 提示:IDE service port disabled. To use CLI Call, open IDE -> Settings -> Security Settings,…...
计算机网络之TCP的可靠传输
上一篇内容可能比较多,显得比较杂乱,这一篇简单总结一下TCP是靠什么实现可靠传输的吧。 校验和 TCP是端到端的传输,由发送方计算校验和,接收方进行验证,目的是为了验证TCP首部和数据在发送过程中没有任何改动&#x…...
Python爬虫系列教程之第十四篇:爬虫项目部署、调度与监控系统
大家好,欢迎继续关注本系列爬虫教程! 在前面的文章中,我们已经详细讲解了如何构建爬虫、如何处理反爬、如何实现分布式爬虫以及如何使用 Scrapy 框架开发高效的爬虫项目。随着项目规模的不断扩大,如何将爬虫项目稳定部署到生产环境…...
线程与进程的深入解析及 Linux 线程编程
在操作系统中,进程和线程是进行并发执行的两种基本单位。理解它们的区别和各自的特点,能够帮助开发者更好地进行多任务编程,提高程序的并发性能。本文将探讨进程和线程的基础概念,及其在 Linux 系统中的实现方式,并介绍…...
在ubuntu上用Python的openpyxl模块操作Excel的案例
文章目录 安装模块读取Excel数据库取数匹配数据和更新Excel数据 在Ubuntu系统的环境下基本职能借助Python的openpyxl模块实现对Excel数据的操作。 安装模块 本次需要用到的模块需要提前安装(如果没有的话) pip3 install openpyxl pip3 install pymysql在操作前,需…...
【OS安装与使用】part6-ubuntu 22.04+CUDA 12.4运行MARL算法(多智能体强化学习)
文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 下载源码并安装2.2.2 安装缺失的依赖项2.2.3 训练执行MAPPO算法实例 三、疑问四、总结 一、待解决问题 1.1 问题描述 已配置好基础的运行环境,尝试运行MARL算法。 1…...
【Python爬虫(35)】解锁Python多进程爬虫:高效数据抓取秘籍
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
HarmonyOS 开发套件 介绍 ——上篇
HarmonyOS 开发套件 介绍 ——上篇 在当今科技飞速发展的时代,操作系统作为智能设备的核心,其重要性不言而喻。而HarmonyOS,作为华为推出的全新操作系统,正以其独特的魅力和强大的功能,吸引着越来越多的开发者和用户的…...
Linux 高级篇 日志管理、定制自己的Linux系统、备份与恢复
一、日志管理 (1)基本介绍 日志文件是重要的系统信息文件,记录了如用户登录、系统启动、系统安全、邮件及各种服务等相关重要系统事件在安全方面,日志也至关重要,它能记录系统日常发生的各类事情,可用于检…...
deepseek与其他大模型配合组合
DeepSeek与其他大模型的配合组合,展现了其在多个领域中的强大应用潜力和灵活性。以下是对DeepSeek与其他大模型配合组合的详细分析: 一、DeepSeek与华知大模型的组合 背景介绍: 华知大模型是同方知网与华为联手打造的,具备全学科…...
经验分享—WEB渗透测试中遇到加密内容的数据包该如何测试!
经验分享—WEB渗透测试中遇到加密内容的数据包该如何测试! 01 加解密的意义 现阶段的渗透测试让我发现越来越多的系统不只是在漏洞修补方面做了功夫,还对一些参数进行加密,干扰爬虫或者渗透测试的进行。 在我小白阶段看到下图这种加密方式…...
JUC并发—9.并发安全集合四
大纲 1.并发安全的数组列表CopyOnWriteArrayList 2.并发安全的链表队列ConcurrentLinkedQueue 3.并发编程中的阻塞队列概述 4.JUC的各种阻塞队列介绍 5.LinkedBlockingQueue的具体实现原理 6.基于两个队列实现的集群同步机制 4.JUC的各种阻塞队列介绍 (1)基于数组的阻塞…...
JSON格式,C语言自己实现,以及直接调用库函数(一)
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。以下为你提供不同场景下常见的 JSON 格式示例。 1. 简单对象 JSON 对象是由键值对组成,用花括号 {} 包裹&…...
MinkowskiEngine安装(CUDA11.8+torch2.0.1+RTX4070TI)
1、背景 1)因为项目要用这个库:MinkowskiEngine,Minkowski Engine — MinkowskiEngine 0.5.3 documentation 然后就用了之前安装好 MinkowskiEngine 的torch1.8.1,cuda11.1的环境。 2)自己的代码出现cuda不支持torch用gpu进行矩…...
Spring监听器Listener
目录 1、Spring监听器简介 2、事件(Event) 3、监听器(Listener) 3、事件发布器 4、监听器使用 4.1、自定义事件 4.2、自定义监听器 4.3、发布事件 4.4、测试 4.5、使用注解方式监听 4.6、异步事件处理 5、总结 1、Spri…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
零、关于开发思路 (一)拿到工作任务,先理清楚需求 1.逻辑部分 不放过原型里说的每一句话,有疑惑的部分该问产品/测试/之前的开发就问 2.页面部分(含国际化) 整体看过需要开发页面的原型后,分类一下哪些组件/样式可以复用,直接提取出来使用 (时间充分的前提下,不…...
