【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…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

c++第七天 继承与派生2
这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分:派生类构造函数与析构函数 当创建一个派生类对象时,基类成员是如何初始化的? 1.当派生类对象创建的时候,基类成员的初始化顺序 …...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
go 里面的指针
指针 在 Go 中,指针(pointer)是一个变量的内存地址,就像 C 语言那样: a : 10 p : &a // p 是一个指向 a 的指针 fmt.Println(*p) // 输出 10,通过指针解引用• &a 表示获取变量 a 的地址 p 表示…...