【Go语言圣经2.6】
目标
概念
-
GOPATH模型
- GOPATH:GOPATH 是一个环境变量,指明 Go 代码的工作区路径。
- 工作区通常包含三个目录:
- src:存放源代码,按照导入路径组织。例如,包
gopl.io/ch2/tempconv
应存放在$GOPATH/src/gopl.io/ch2/tempconv
中。 - pkg:编译后生成的包文件(中间产物)。
- bin:可执行文件。
- src:存放源代码,按照导入路径组织。例如,包
- 在 GOPATH 模型中,包的导入路径直接对应于
src
目录下的子目录结构- 例如,
import "gopl.io/ch2/tempconv"
表示编译器将在$GOPATH/src/gopl.io/ch2/tempconv
下寻找该包的源代码。
- 例如,
-
Go module 模型(现代依赖管理方式)
- Go module
- Go module 是从 Go 1.11 开始引入的,不再强制要求代码必须放在 GOPATH 内。
- 每个模块有一个
go.mod
文件,其中定义了模块路径(作为导入路径的前缀)和依赖项及其版本。
- 模块根目录可以放在任意位置,
go.mod
中指定的模块路径决定了包的导入路径前缀。- 例如,如果
go.mod
声明模块为gopl.io/ch2/tempconv
,则该模块中的包可以直接用该路径导入,无需放在 GOPATH 内。
- 例如,如果
- 优势:
- 自动管理依赖版本,支持版本控制;
- 使得项目结构更灵活,不受 GOPATH 限制;
- 编译工具会根据
go.mod
自动解析和下载依赖。
- Go module
-
构建工具如何根据不同模型处理依赖和编译项目
- go build 命令
- 在 GOPATH 模型下,
go build
根据 GOPATH/src 中的目录结构找到并编译包; - 在 module 模型下,
go build
会读取当前目录或上级目录中的go.mod
文件来确定模块范围,并自动处理依赖。
- 在 GOPATH 模型下,
- 导入包时的区别
- 在 GOPATH 模型下,你的代码必须位于 GOPATH/src 中;
- 在 module 模型下,你可以在任何地方创建项目,依赖管理由
go.mod
文件控制。
- go build 命令
-
包的作用和意义
-
模块化与封装
Go 语言中的包类似于其他语言中的库或模块,其目的是将相关代码组织在一起,实现模块化编程。
- 封装:包内部的实现细节可以隐藏,仅公开需要被外部使用的部分。
- 单独编译和重用:每个包可以单独编译,也能在不同程序中复用,提高代码可维护性和协作效率。
-
-
命名空间
每个包都有自己独立的命名空间。当不同包中存在同名的函数或类型,外部引用时加上包前缀,这避免了名称冲突
-
导出规则
- 包中的标识符(如变量、常量、函数、类型等)只有首字母大写时才是导出的,也就是对外可见的;否则只在包内部可见。这为包内部实现细节的隐藏提供了简单而有效的机制。
-
文件组织与包结构
- 一个包通常由一个或多个以
.go
为后缀的源文件组成。这些文件必须以相同的包声明开始。例如,一个包可能存放在$GOPATH/src/gopl.io/ch2/tempconv
目录中,其导入路径就是gopl.io/ch2/tempconv
。
- 一个包通常由一个或多个以
-
多个源文件协同工作
- 包级别的声明(类型、变量、常量、函数)在同一包内的所有源文件中都是共享的,就像所有代码都写在一个文件中一样。
- 可以将不同功能或逻辑拆分到多个文件中,提高代码组织和可维护性。例如:
- tempconv.go:放置包级的常量、类型、以及为这些类型定义的方法(如
String()
)。 - conv.go:专门放置温度转换函数,如
CToF
和FToC
。
- tempconv.go:放置包级的常量、类型、以及为这些类型定义的方法(如
-
导入包
- 导入路径与包名
- 每个包都有一个全局唯一的导入路径,如
"gopl.io/ch2/tempconv"
。这个路径由构建工具解析,通常对应一个目录。 - 包的名字通常在包声明处指定,惯例上包名和导入路径的最后一个字段相同(例如
tempconv
)
- 每个包都有一个全局唯一的导入路径,如
- 导入路径与包名
-
包注释
- 在每个包的源文件开头紧跟着的注释称为包注释,它应该简明扼要地说明包的功能。
- 通常只需在一个文件中包含完整的包注释,如果包比较复杂,也可以单独放在 doc.go 文件中。
- 在每个包的源文件开头紧跟着的注释称为包注释,它应该简明扼要地说明包的功能。
-
开发工具支持
goimports 和 gofmt
- 这些工具可以自动添加或删除导入语句,并格式化代码,保持代码风格一致,有助于日常开发。
要点
导入语句的写法与使用
-
在源文件中通过
import
语句导入包import ("fmt""gopl.io/ch2/tempconv" )
-
导入后,包内导出的标识符(首字母大写的)可以通过“包名.标识符”访问,例如:
tempconv.CToF(tempconv.BoilingC)
- 如果导入后不使用该包,编译器会报错。这鼓励程序员只导入真正需要的包,保持依赖清晰。
-
如果有命名冲突或为了简洁,可以将导入的包绑定到另一个名字**(重命名导入)**
import tconv "gopl.io/ch2/tempconv"
然后用
tconv.CToF
访问包中的内容。
包的初始化
- 初始化顺序规则
-
包中的全局变量(包级变量)的初始化遵循先依赖后顺序:
- 变量的初始化顺序是按照它们在源代码中出现的顺序进行。
- 当一个包被导入时,所有包级变量会在
main()
函数执行前完成初始化。
var a = b + c // a 是第三个初始化的变量 var b = f() // b 是第二个初始化的变量(依赖 c) var c = 1 // c 是第一个初始化的变量 func f() int { return c + 1 }
- 在这个例子中,初始化时会确保
c
已经赋值,这样b
才能正确调用f()
。
-
包初始化顺序与依赖
- 当一个包 A 导入包 B 时,B 包会先于 A 包初始化。
- 这种自下而上的初始化方式确保 main 包执行前,所有依赖包都已完成初始化。
-
- init函数
- init 函数的作用
- init 函数用于在包初始化时执行额外的初始化逻辑。
- 每个源文件可以包含多个 init 函数,且它们会在包初始化时按照声明顺序自动调用。
- init 函数不能被显式调用或引用,仅用于初始化工作。
- 示例
-
构建辅助数据表或进行复杂的初始化运算。例如在 popcount 包中,用 init 函数预生成一个查表数组:
var pc [256]bytefunc init() {for i := range pc {pc[i] = pc[i/2] + byte(i&1)} }
-
如果初始化过程较复杂,可以采用匿名函数直接在变量声明中完成初始化
var pc [256]byte = func()(pc [256]byte) {for i := range pc{pc[i] = pc[i/2] + byte(i&1)}return }
-
- init 函数的作用
语言特性
习题
-
重写PopCount函数,用一个循环代替单一的表达式。
// 假设已经定义查数数组pc[256] func PopCountLoop(x uint64) int{var sum intfor i:=0; i<8; i++{sum += int(pc[byte(x)]) // 取最低8位x >> 8} }
-
用移位算法重写PopCount函数,每次测试最右边的1bit,然后统计总数。
func PopCountShift(x uint64) int {var sum intfor i := 0; i < 64; i++ {sum += int(x & 1)x >>= 1}return sum }
-
表达式x&(x-1)用于将x的最低的一个非零的bit位清零。使用这个算法重写PopCount函数
- 二进制,x-1 会把 x 中最右边的那个“1”变成“0”,并把后面所有的 0 变成 1。(当你给 x 减 1 时,从最右边开始,所有连续的 0 都借1减1,直到碰到第一个 1,这个 1 就变成 0。)
- 当你把 x 和 x-1 做与操作时,只有当两个对应位置都是 1 时,结果才为 1。由于 x-1 在原来最低1的位置已经变成了 0,所以 x&(x-1) 在那个位置肯定是 0,并且之前为0的低位不会改变——这就把x的最低的一个非零的bit位清零
func PopCountClear(x uint64) int {var count intfor x != 0 {x &= x - 1 // 清除最低位的1count++}return count }
总结与补充
-
popcount算法解读
func PopCount(x uint64) int {return int(pc[byte(x>>(0*8))] +pc[byte(x>>(1*8))] +pc[byte(x>>(2*8))] +pc[byte(x>>(3*8))] +pc[byte(x>>(4*8))] +pc[byte(x>>(5*8))] +pc[byte(x>>(6*8))] +pc[byte(x>>(7*8))]) }
想象一下你有一本“数字图鉴”,里面记着0到255这256个数字,每个数字旁边都写着它的“1的个数”。这个图鉴就是那个预先计算好的表格(pc数组)。
- 预先计算图鉴(init函数)
- 做法: 对于0到255中的每个数字,我们算一算它的二进制写法里有几个1,然后把这个数字和它的1的个数存进图鉴里。
- 秘诀: 计算一个二进制数字的1的个数时,我们可以把它分解为“除以2后的数字”里的1的个数,再加上“最后一位是否为1”。比如说,如果数字6(二进制110),我们先看6/2等于3(二进制11),再加上6最后一位(0),结果就是2个1。
- 你把一个数字除以2(也就是右移一位),其实就是把最右边那一位扔掉了。那么,这个数字中1的总数就等于“扔掉最后一位后剩下的数字中的1的个数”加上“刚刚扔掉的那一位是否是1”。
- 用图鉴快速数1的个数(PopCount函数)
- 大数字切小块: 当我们有一个很大的64位数字时,不用检查64个数字,而是把它分成8个8位的小数字。
- 表达式
x >> (k*8)
的意思是把数字 x 向右移动 k*8 位,这样原本在第 k 个8位区域的数字就会移动到最右边。 - 使用
byte()
把移动后的结果截取成一个8位的数字(一个字节)。
- 表达式
- 查表加和: 对每个8位的小数字,直接在图鉴里查出它有几个1,然后把8个结果加起来,就知道整个64位数字里有多少个1。
- 大数字切小块: 当我们有一个很大的64位数字时,不用检查64个数字,而是把它分成8个8位的小数字。
- 预先计算图鉴(init函数)
相关文章:
【Go语言圣经2.6】
目标 概念 GOPATH模型 GOPATH:GOPATH 是一个环境变量,指明 Go 代码的工作区路径。工作区通常包含三个目录: src:存放源代码,按照导入路径组织。例如,包 gopl.io/ch2/tempconv 应存放在 $GOPATH/src/gopl.i…...
多时间尺度的配电网深度强化学习无功优化策略的Python示例代码框架
以下是一个简单的多时间尺度的配电网深度强化学习无功优化策略的Python示例代码框架,用于帮助你理解如何使用深度强化学习(以深度Q网络 DQN 为例)来处理配电网的无功优化问题。在实际应用中,你可能需要根据具体的配电网模型和需求…...
0CTF 2016 piapiapia 1
#源码泄露 #代码审计 #反序列化字符逃逸 #strlen长度过滤数组绕过 www.zip 得到源码 看到这里有flag ,猜测服务端docker的主机里,$flag变量应该存的就是我们要的flag。 于是,我们的目的就是读取config.php 利用思路 这里存在 任意文件读取…...
ArcGIS Pro将有文字标注底图切换为无标注底图(在线地图图源)
今天介绍一下在ArcGIS Pro将有标注的地形底图换成无标注的底图。 大家在这项目底图时候会经常调用ArcGIS Pro自带的地形图,但是这个地形图自带是有注记的,如下图。 如何更改,才可以调用无文字注记的呢? 对于一个已经切好图的有注记…...
股指期货有卖不出去的时候吗?
在股指期货的交易世界里,很多人都有这样的疑问:股指期货会不会有卖不出去的时候呢?答案是会的,下面咱们就来详细唠唠为啥会出现这种情况。 市场极端行情下难以卖出 1.跌停限制:股指期货和股票一样,也有涨…...
NPM 常用操作指令大全
NPM(Node Package Manager)是 Node.js 默认的包管理工具,主要用于管理 JavaScript 项目的依赖包。以下是常用的 NPM 命令,涵盖安装、卸载、更新、查看等操作。 📌 1. NPM 初始化 npm init 逐步询问项目信息ÿ…...
Mysql与ElasticSearch间的数据同步场景模拟
一、场景简介 现有酒店管理与酒店搜索预定两个分离的微服务模块,为了数据的安全性我们在就带你管理模块通过Mysql进行crud,为了搜索的高效和质量在搜索预定模块我们采用了ElasticSearch搜索引擎(视作一种NoSQL 数据库),…...
Qt-D指针与Q指针的设计哲学
文章目录 前言PIMLP与二进制兼容性D指针Q指针优化d指针继承Q_D和Q_Q 前言 在探索Qt源码的过程中会看到类的成员有一个d指针,d指针类型是一个private的类,这种设计模式称为PIMPL(pointer to implementation),本文根据Q…...
安装配置Anaconda,配置VSCode
文章目录 Anaconda介绍下载Anaconda安装Anaconda换源创建一个新环境conda常用命令 VSCode环境配置 记录一下笔者收集的一些资料,不喜勿喷。 Anaconda介绍 Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管…...
迪威 3D 模型发布系统:制造业产品展示革新利器
在竞争激烈的制造业领域,如何将产品全方位、直观地呈现给客户,成为企业脱颖而出的关键。传统的产品展示方式往往受限于平面资料或有限的实物展示,难以让客户深入了解产品的复杂结构与精妙细节。迪威 3D 模型发布系统的问世,为制造…...
Matlab 汽车振动多自由度非线性悬挂系统和参数研究
1、内容简介 略 Matlab 169-汽车振动多自由度非线性悬挂系统和参数研究 可以交流、咨询、答疑 2、内容说明 略 第二章 汽车模型建立 2.1 汽车悬架系统概述 2.1.1 悬架系统的结构和功能 2.1.2 悬架分类 2.2 四分之一车辆模型 对于车辆动力学,一般都是研究其悬…...
编程题-第k个语法符号(中等)
题目: 我们构建了一个包含 n 行( 索引从 1 开始 )的表。首先在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。 例如,对于 n 3 ,第 1 行是 0 ,第 2 行是 01 ,第3行…...
vscode打不开
Bug:窗口意外终止(原因:“launch-failed”,代码:“65" 对此造成的不便,我们深表歉意。可以打开新的空窗口以重新启动) 解决方法: 移情别恋:VS Code打开闪退并报‘launch-failed‘ code:‘65‘ 窗口意外终止(原因…...
使用生成对抗网络(GAN)进行人脸老化生成的Python示例
以下是一个使用生成对抗网络(GAN)进行人脸老化生成的Python示例,我们将使用PyTorch库来实现。GAN由生成器和判别器两部分组成,生成器尝试生成逼真的老化人脸图像,判别器则尝试区分生成的图像和真实的老化人脸图像。 步…...
202503执行jmeter压测数据库(ScyllaDB,redis,lindorm,Mysql)
一、Mysql 1 、 准备MySQL 连接内容 2 、 下载连接jar包 准备 mysql-connector-java-5.1.49.jar 放到 D:\apache-jmeter-5.6.3\lib\ext 目录下面; 3 、 启动jmeter ,配置脚本 添加线程组---》JDBC Connection Configuration---》JDBC Request---》查看结果树。 1)测…...
Uniapp当中的scroll-view滚动条不出现或者触底刷新事件不触发
一、未正确设置容器高度 问题描述 scroll-view 未设置明确高度或高度值无效,导致无法形成有效滚动区域。 解决方案 • 使用行内样式直接设置 height(如 style"height: 500rpx;"),避免类名样式被覆盖。 • 动态计算高度…...
3.16学习总结
学习了Java的知识点 基本数据类型 byte占1字节,储存范围-128~127 short占2字节,储存范围-32768~32767 int占4字节,储存范围-2147483648~2147483647 long占8字节,储存范围是-9223372036854775808~9223372036854775807 float占…...
206. 反转链表
目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题2.4 AI复盘 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 需要有头尾指针,然后又觉得可以用递归 2.2 代码尝试 class Solution { public:ListNode* reverseList(ListNode* h…...
音视频缓存数学模型
2024年8月的笔记 音视频缓存数学模型 - Wesley’s Blog 播放器作为消费者,缓存作为生产者。 进入缓冲一次 设消费者速率为v1,生产者为v2,视频长度为l,x为生产者至少距离消费者多远才能保证在播完视频前两者重合。实际上就是一个…...
priority_queue模拟实现
目录 介绍 模拟实现 无参构造函数 迭代器构造 push插入 pop删除 top返回队首元素 返回队列元素个数 判空 仿函数 补充:反向迭代器 模拟实现反向迭代器 构造和析构 重载和-- 解引用*和地址访问-> ! 反向迭代器在容器中实现 补充练习 数组中第…...
ChatGPT、DeepSeek、Grok:AI 语言模型的差异与应用场景分析
📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 人工智能(AI)语言模型正在快速发展,ChatGPT(OpenAI)、DeepSe…...
Nginx 刷新后 404 的原因与解决方案
文章目录 Nginx 刷新后 404 的原因与解决方案静态资源路径问题(单页应用 SPA)解决方案:使用 try_files Nginx 资源路径 (root 或 alias) 配置错误示例:正确的 root配置 浏览器缓存或 Nginx 缓存影响清除浏览器缓存给静态资源加版本…...
AI赋能实时安全背带监测解决方案
背景:安全背带检测的行业刚需与技术痛点 在建筑施工、石油化工、仓储物流等高危行业中,安全背带是保障作业人员生命安全的最后一道防线。据统计,超过30%的高空坠落事故与未正确佩戴安全背带直接相关。传统依赖人工巡检的监督方式存在效率低、…...
【ES6】03-Set + Map
本文介绍两种集合 set map 的操作和方法。 目录 1. Set 1.1 set基本使用 1.2 add 1.3 delete 1.4 has 1.5 size 1.6 set转换为数组 1.7 拓展运算符 1.8 for...of 1.9 forEach 1.10 set给数组去重 2. Map 2.1 创建map集合 2.2 set添加元素 2.3 delete删除元素 …...
GHCTF web方向题解
upload?SSTI! import os import refrom flask import Flask, request, jsonify,render_template_string,send_from_directory, abort,redirect from werkzeug.utils import secure_filename import os from werkzeug.utils import secure_filenameapp Flask(__name__)# 配置…...
网页制作15-Javascipt时间特效の记录网页停留时间
01效果图: 02运用: window.setTimeout()刷新function()函数document.forms():表单if条件语句window.alert()窗口警示 03、操作代码:…...
LeetCode 解题思路 15(Hot 100)
解题思路: 引入哑节点: 简化头节点删除操作,统一处理所有边界条件。快慢指针法: 快指针先移动 n 步,确保快慢指针距离为 n,之后同步移动快慢指针。当快指针到达末尾时,慢指针指向倒数第 n 个节…...
STM32 - 在机器人领域,LL库相比HAL优势明显
在机器人控制器、电机控制器等领域的开发,需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以,大家常用的HAL库明显不符合要求。再加上,我们学习一门技术,一定要学会掌握底层的原理。MCU开发的底层就是寄存器…...
如何查看mysql某个表占用的空间大小
在MySQL中,有几种方法可以查看某个表占用的空间大小。这通常涉及到查询数据库的元数据表,如 information_schema.TABLES,或者使用特定于存储引擎的命令(例如对于InnoDB引擎)。以下是几种常用的方法: 方法一…...
加固脱壳技术:DEX动态加载对抗
1. 加固技术原理剖析 1.1 DEX保护演进路线 加固方案发展历程: graph LR A[2015 代码混淆] --> B[2017 DEX动态加载] B --> C[2019 VMP指令虚拟化] C --> D[2022 全链路加密] 1.1.1 主流加固方案对比 厂商核心防护技术弱点分析梆梆加固DEX文件分片…...
树莓派 连接 PlutoSDR 教程
在树莓派5上安装PlutoSDR(ADALM-Pluto)的驱动程序,主要需要安装相关的库和工具,以便与PlutoSDR通信,比如libiio和libad9361,并确保系统能够识别设备。由于树莓派5运行的是基于Linux的系统(通常是…...
山东省新一代信息技术创新应用大赛-计算机网络管理赛项(样题)
目录 竞赛试题 网络拓扑 配置需求 虚拟局域网 IPv4地址部署 OSPF及路由部署 配置合适的静态路由组网 MSTP及VRRP链路聚合部署 IPSEC部署 路由选路部署 设备与网络管理部署 1.R1 2.R2 3.S1 4.S2 5.S3 竞赛试题 本竞赛使用HCL(华三云实验室)来进行网络设备选择…...
文件上传漏洞
文件上传条件 有上传点 后缀没有过滤且可解析 能找到web路径 常见的绕过方式 前端绕过:上传一张图片,抓包修改后缀为php content-type绕过: applicaition/x-www-form-urlencoded multipart/form-data application/json image/jpeg image/png…...
Java 绘制图形验证码
在 Spring Boot 中生成图形验证码并校验其正确性,通常包括以下步骤: 生成验证码图片和对应的验证码值。将验证码值存储到 Session 或其他存储中(如 Redis)。将验证码图片返回给客户端。客户端提交表单时,校验用户输入的…...
APP自动化测试-备忘录:Appium 2.X的安装和启动服务方法
一、Appium 1.X 启动appium服务:appium --session-override 也可以这样启动appium服务:appium 二、Appium 2.X Appium 2.X 是一个自动化测试开源工具,用于测试原生、移动 Web 和混合应用程序。下面为你介绍其下载步骤: 1. 安装…...
卡尔曼滤波算法从理论到实践:在STM32中的嵌入式实现
摘要:卡尔曼滤波(Kalman Filter)是传感器数据融合领域的经典算法,在姿态解算、导航定位等嵌入式场景中广泛应用。本文将从公式推导、代码实现、参数调试三个维度深入解析卡尔曼滤波,并给出基于STM32硬件的完整工程案例…...
k8s serviceaccount在集群内指定apiserver时验证错误的问题
在主机上,找到TOKEN,可以直接指定apiserver使用 rootubuntu-server:/home# kubectl auth can-i --list --server https://192.168.85.198:6443 --token"eyJhbGciOiJSUzI1NiIsImtpZCI6IlFlMHQ3TzhpcGw1SnRqbkYtOC1NUWlWNUpWdGo5SGRXeTBvZU9ib25iZD…...
自动化测试脚本
一、自动化测试脚本是什么? 自动化测试脚本是由测试人员或开发人员编写的 代码或工具指令,用于 自动执行测试用例,模拟用户操作(如点击按钮、输入数据),并对结果进行验证。 它与手动测试的核心区别在于&am…...
练习-串串变变变(字符串变换)
问题描述 小蓝现在有一个长度为 n 仅由小写字母组成的的字符串 s ,小蓝可以对字符串进行任意次操作,每次操作小蓝可以选择一个整数 ii ,其中 i∈[1,n−1],然后选择如下两种操作之一: 将 si 变为其字典序加一的小写…...
99.HarmonyOS NEXT跑马灯组件教程:动画配置与参数详解
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT跑马灯组件教程:动画配置与参数详解 文章目录 HarmonyOS NEXT跑马灯组件教程:动画配置与参数详解1. 跑马灯动…...
【web逆向】优某愿 字体混淆
地址:aHR0cHM6Ly93d3cueW91enkuY24vY29sbGVnZXMvc2NvcmVsaW5lP2NvbGxlZ2VDb2RlPTEwMDAzJm5hbWU9JUU2JUI4JTg1JUU1JThEJThFJUU1JUE0JUE3JUU1JUFEJUE2 接口分析 接口:eW91enkuZG1zLmRhdGFsaWIuYXBpLmVucm9sbGRhdGEuZW50ZXIuY29sbGVnZS5lbmNyeXB0ZWQudj…...
MSP430 Proteus 仿真作品
https://www.dong-blog.fun/post/1998 1 、 电子万年历(采用 DS1302 及 及 TC72 等芯片) 基本要求: 可显示年、月、日、星期、时、分、秒; 有温度显示功能。 发挥部分: 可调节时间和日期; 有农历显示功能 &…...
八股文——C 语言宏、`volatile`、`static`、动态内存管理、堆与栈的区别
文章目录 1. #(字符串化操作符)作用:示例: 2. ##(符号连接操作符)作用:示例1:动态生成变量名 3. volatile 关键字作用:示例: 4. static 关键字作用࿱…...
创新实践分享:基于边缘智能+扣子的智能取物机器人解决方案
在 2024 年全国大学生物联网设计竞赛中,火山引擎作为支持企业,不仅参与了赛道的命题设计,还为参赛队伍提供了相关的硬件和软件支持。以边缘智能和扣子的联合应用为核心,参赛者们在这场竞赛中展现出了卓越的创新性和实用性…...
【QT笔记---QText】
文章目录 概要1、字体样式设置1.1效果1.2demo1.3常用成员函数 概要 QText基本应用:1、字体样式设计; 1、字体样式设置 1.1效果 1.2demo //若需要设置字体、字体大小、字宽或者斜体状态的话,可以直接初始化时一起设置 // QFont::QFont(cons…...
Html label标签中的for属性(关联表单控件:将标签与特定的表单元素(如输入框、复选框等)关联起来;提高可用性;无障碍性)
文章目录 示例代码for属性含义完整代码示例 示例代码 <div class"form-group"> <!-- 表单组,包含省份输入框和标签 --><label for"province">省份名称:</label> <!-- 省份输入框的标签 --><input…...
二叉树的基本操作与实现:C语言深度剖析
目录 代码整体框架 1. #define _CRT_SECURE_NO_WARNINGS 2. 头文件引入 3. typedef int BTtype; 4. 二叉树节点结构体定义 二叉树的创建 1. BuyNode 函数 2. CreatNode 函数 二叉树的遍历 前序遍历 中序遍历 后序遍历 二叉树属性的计算 节点个…...
【人工智能】Deepseek 与 Kimi 联袂:重塑 PPT 创作,开启智能演示新纪元
我的个人主页 我的专栏:人工智能领域、java-数据结构、Javase、C语言,希望能帮助到大家!!!点赞👍收藏❤ 前言 在当今快节奏的工作与学习场景中,PPT 制作常常是一项耗时耗力的任务。从前期的资…...
Nest系列:NestJS 中 Logger 完全指南:从基础到企业级实践-04
一、Logger 的核心价值 在服务端应用中,日志系统承担着三大核心职责: 系统监控:实时反馈应用健康状态问题追踪:快速定位异常根源行为审计:记录关键业务操作NestJS 内置的日志系统提供了开箱即用的解决方案,支持: ✅ 多日志级别管理 ✅ 上下文感知日志 ✅ 自定义输出格式…...
行为模式---模版模式
概念 模版模式是设计模式行为模式的一种,它的核心思想是定义一个算法骨架,将某些步骤提取到到子类中实现。解决当项目中出现多个处理分支,这几个处理分支有重复步骤的时实现代码的复用和扩展。在这种模式下不用修改逻辑结构,使用…...