Go 语言语法精讲:从 Java 开发者的视角全面掌握
《Go 语言语法精讲:从 Java 开发者的视角全面掌握》
- 一、引言
- 1.1 为什么选择 Go?
- 1.2 适合 Java 开发者的原因
- 1.3 本文目标
- 二、Go 语言环境搭建
- 2.1 安装 Go
- 2.2 推荐 IDE
- 2.3 第一个 Go 程序
- 三、Go 语言基础语法
- 3.1 变量与常量
- 3.1.1 声明变量
- 3.1.2 常量定义
- 3.2 数据类型
- 3.2.1 基本类型
- 3.2.2 复合类型
- 3.3 运算符
- 四、流程控制
- 4.1 条件语句
- 4.2 循环语句
- 4.2.1 遍历数组、切片、映射
- 4.3 分支语句
- 五、函数与方法
- 5.1 函数定义
- 5.1.1 错误处理
- 5.2 方法
- 六、错误处理
- 6.1 `error` 接口
- 6.2 `defer` 语句
- 6.3 `panic` 和 `recover`
- 七、并发编程
- 7.1 Goroutine
- 7.2 Channel
- 7.3 `select`
- 八、结构体与接口
- 8.1 结构体
- 8.2 接口
- 九、高级特性
- 9.1 指针
- 9.2 反射
- 9.3 闭包
- 十、代码组织与包管理
- 10.1 包的定义与导入
- 10.2 依赖管理
- 十一、常见陷阱与最佳实践
- 11.1 零值初始化
- 11.2 切片的底层机制
- 11.3 并发安全
- 十二、总结与展望
- 附录
- 12.1 Go 语言标准库速查表
- 12.2 示例代码
- HTTP 服务器
- 并发计数器
一、引言
大家好!今天咱们来聊聊 Go 语言,一个让 Java 开发者又爱又恨的编程语言。为啥说又爱又恨呢?爱它是因为简单高效,恨它是因为有些地方和 Java 完全不一样,刚上手可能会有点懵。不过别担心,我就是来帮大家捋顺这些坑的!
1.1 为什么选择 Go?
- 简单高效:Go 的语法简洁,写起来像搭积木,运行起来又快又稳。
- 并发支持:Goroutine 和 Channel 是 Go 的杀手锏,写并发程序就像喝奶茶一样轻松。
- 跨平台:写一次代码,到处跑,Windows、Linux、Mac 都能搞定。
1.2 适合 Java 开发者的原因
- Java 开发者对面向对象、类型系统已经很熟悉了,Go 的学习曲线会平缓很多。
- Go 的并发模型和 Java 的线程模型完全不同,正好是个拓宽视野的好机会!
1.3 本文目标
这篇文章的目标就是帮大家快速掌握 Go 的语法,少踩坑,多涨经验!如果觉得有用,记得点个赞、收藏一下,关注我,后续还会带来更多 Go 实战内容哦!
二、Go 语言环境搭建
2.1 安装 Go
第一步就是把 Go 安装好。去官网 golang.org/dl 下载最新版本,Windows、Mac、Linux 都有支持。安装完后,记得配置环境变量:
- GOROOT:Go 的安装路径,比如
C:\Go
。 - GOPATH:你的工作区路径,比如
D:\go_workspace
。 - GOBIN:可执行文件路径,一般设置为
$GOROOT/bin
。
2.2 推荐 IDE
我强烈推荐用 VS Code + Go 扩展!安装 VS Code 后,打开扩展市场,搜 Go
插件装上就行。调试工具用 delve
,简单又强大。
2.3 第一个 Go 程序
写个 hello.go
玩玩:
package mainimport "fmt"func main() {fmt.Println("Hello, Go 开发者!")
}
运行命令:
go run hello.go
输出:
Hello, Go 开发者!
是不是超简单?Java 开发者看到这行代码可能会觉得有点陌生,但别急,后面会慢慢熟悉!
三、Go 语言基础语法
3.1 变量与常量
3.1.1 声明变量
Go 里声明变量有两种方式:
var name string = "张三" // 显式声明
age := 25 // 类型推导
Java 开发者可能会觉得 :=
很奇怪,其实它就是 Go 的“自动类型推导”,和 Java 的 var
类似,但更灵活!
3.1.2 常量定义
const PI float64 = 3.14159
常量一旦定义就不能改了,Java 里用 final
修饰的变量就是这个意思。
3.2 数据类型
3.2.1 基本类型
Go 的基本类型和 Java 差不多,但有个大不同:没有包装类型!比如 Java 里有 Integer
,Go 里直接用 int
,简单粗暴!
var a bool = true
var b int = 42
var c float64 = 3.14
var d string = "Hello, Go!"
3.2.2 复合类型
- 数组:长度固定,比如
var arr [5]int
。 - 切片:动态数组,用
make
创建:slice := make([]int, 5)
。 - 结构体:自定义数据类型,类似 Java 的类:
type Person struct {Name stringAge int
}p := Person{Name: "张三", Age: 25}
- 映射(map):键值对,用法和 Java 的
HashMap
类似:
m := make(map[string]int)
m["key1"] = 42
3.3 运算符
Go 的运算符和 Java 差不多,但有个坑:没有三元运算符的简化形式!比如 Java 里 a ? b : c
,Go 里得老老实实写 if-else
。
result := 0
if a > b {result = a
} else {result = b
}
四、流程控制
4.1 条件语句
Go 的 if
语句可以内联变量声明,这个 Java 里没有!
if n := 42; n%2 == 0 {fmt.Println("偶数")
} else {fmt.Println("奇数")
}
4.2 循环语句
Go 只有一种循环:for
!但别小看它,功能很强大:
// 传统 for 循环
for i := 0; i < 5; i++ {fmt.Println(i)
}// while 替代形式
for i := 0; i < 5 {i++
}// 无限循环
for {fmt.Println("无限循环中...")
}
4.2.1 遍历数组、切片、映射
用 range
关键字:
// 遍历数组
arr := [3]int{1, 2, 3}
for index, value := range arr {fmt.Printf("索引: %d, 值: %d\n", index, value)
}// 遍历切片
slice := []string{"苹果", "香蕉", "橙子"}
for _, fruit := range slice {fmt.Println(fruit)
}// 遍历映射
m := map[string]int{"a": 1, "b": 2}
for key, value := range m {fmt.Printf("键: %s, 值: %d\n", key, value)
}
4.3 分支语句
Go 的 switch
默认不需要 break
,写起来更简洁:
day := "Monday"
switch day {
case "Monday":fmt.Println("周一,打工人")
case "Tuesday":fmt.Println("周二,继续肝")
default:fmt.Println("周末快乐!")
}
五、函数与方法
5.1 函数定义
Go 的函数可以有多个返回值,这个 Java 里做不到!
func add(a, b int) (int, int) {return a + b, a - b
}sum, diff := add(10, 5) // sum=15, diff=5
5.1.1 错误处理
Go 没有 try-catch
,而是通过返回 error
来处理错误:
func divide(a, b float64) (float64, error) {if b == 0 {return 0, errors.New("除数不能为零")}return a / b, nil
}result, err := divide(10, 0)
if err != nil {fmt.Println("错误:", err)
} else {fmt.Println("结果:", result)
}
5.2 方法
方法是绑定到结构体上的函数,用 receiver
表示:
type Calculator struct {Result int
}// 值接收者
func (c Calculator) Add(a int) int {return c.Result + a
}// 指针接收者
func (c *Calculator) Subtract(a int) {c.Result -= a
}calc := Calculator{Result: 10}
sum := calc.Add(5) // sum=15
calc.Subtract(3) // calc.Result=7
六、错误处理
6.1 error
接口
Go 的错误处理很简单:返回 error
,然后检查 err != nil
。
func readFile(filename string) ([]byte, error) {file, err := os.Open(filename)if err != nil {return nil, err}defer file.Close() // 确保文件关闭return ioutil.ReadAll(file)
}data, err := readFile("test.txt")
if err != nil {fmt.Println("读取文件失败:", err)return
}
fmt.Println("文件内容:", string(data))
6.2 defer
语句
defer
是 Go 的“延迟执行”,常用来释放资源:
func openResource() {resource := acquireResource()defer releaseResource(resource) // 确保资源被释放// 使用 resource
}
6.3 panic
和 recover
panic
用于抛出异常,recover
用于捕获异常:
func main() {defer func() {if r := recover(); r != nil {fmt.Println("捕获到异常:", r)}}()riskyOperation()
}func riskyOperation() {panic("出错了!")
}
七、并发编程
7.1 Goroutine
Goroutine 是 Go 的并发单元,启动方式超简单:
func sayHello() {fmt.Println("Hello from Goroutine!")
}func main() {go sayHello() // 启动 Goroutinetime.Sleep(time.Second) // 等待 Goroutine 执行
}
7.2 Channel
Channel 是 Goroutine 之间的通信工具:
func main() {ch := make(chan int) // 创建通道go func() {ch <- 42 // 发送数据}()result := <-ch // 接收数据fmt.Println("结果:", result)
}
7.3 select
select
用于监听多个 Channel 的事件:
func main() {ch1 := make(chan string)ch2 := make(chan string)go func() {time.Sleep(2 * time.Second)ch1 <- "通道1"}()go func() {time.Sleep(1 * time.Second)ch2 <- "通道2"}()select {case msg1 := <-ch1:fmt.Println(msg1)case msg2 := <-ch2:fmt.Println(msg2)}
}
八、结构体与接口
8.1 结构体
结构体是自定义数据类型,可以嵌入匿名字段:
type Address struct {City stringState string
}type Person struct {Name stringAge intAddress // 嵌入匿名字段
}p := Person{Name: "张三",Age: 25,Address: Address{City: "北京",State: "中国",},
}fmt.Println(p.City) // 输出: 北京
8.2 接口
Go 的接口是隐式实现的,不需要显式声明:
type Speaker interface {Speak() string
}type Dog struct{}func (d Dog) Speak() string {return "汪汪"
}func main() {var s Speaker = Dog{}fmt.Println(s.Speak()) // 输出: 汪汪
}
九、高级特性
9.1 指针
指针是 Go 的核心特性之一,用来直接操作内存地址:
func main() {a := 42ptr := &a // 获取 a 的地址fmt.Println(*ptr) // 解引用,输出 42
}
9.2 反射
反射可以动态操作变量的类型和值:
func main() {var x float64 = 3.4v := reflect.ValueOf(x)t := reflect.TypeOf(x)fmt.Println("类型:", t) // 输出: float64fmt.Println("值:", v) // 输出: 3.4
}
9.3 闭包
闭包可以捕获外部变量:
func main() {adder := func(a int) int {return a + 10}fmt.Println(adder(5)) // 输出: 15
}
十、代码组织与包管理
10.1 包的定义与导入
每个 Go 文件都属于一个包:
package mainimport ("fmt""math"
)func main() {fmt.Println(math.Sqrt(16)) // 输出: 4
}
10.2 依赖管理
用 go mod
管理依赖:
go mod init myproject
go mod tidy
十一、常见陷阱与最佳实践
11.1 零值初始化
Go 的变量默认值是“零值”,比如 int
是 0
,bool
是 false
,nil
是空值。
11.2 切片的底层机制
切片有三个部分:长度、容量和底层数组。扩容时会创建新数组,可能导致性能问题:
func main() {slice := make([]int, 0, 5) // 长度0,容量5slice = append(slice, 1, 2, 3, 4, 5, 6) // 扩容fmt.Println(slice)
}
11.3 并发安全
并发时要注意数据竞争,可以用 sync.Mutex
保护共享资源:
var mu sync.Mutex
var count intfunc increment() {mu.Lock()count++mu.Unlock()
}
十二、总结与展望
Go 是一个简单而强大的语言,特别适合写高性能、高并发的应用。Java 开发者上手虽然有点门槛,但只要掌握了并发模型和一些核心特性,就能快速进入状态。
如果这篇文章对你有帮助,记得点赞、收藏、关注我!后续还会带来更多 Go 实战内容,比如写 HTTP 服务器、操作数据库等。咱们下次见!
附录
12.1 Go 语言标准库速查表
fmt
:格式化输入输出os
:操作系统交互net/http
:HTTP 服务器和客户端sync
:并发控制
12.2 示例代码
HTTP 服务器
package mainimport ("fmt""net/http"
)func handler(w http.ResponseWriter, r *http.Request) {fmt.Fprintf(w, "Hello, Go 开发者!")
}func main() {http.HandleFunc("/", handler)http.ListenAndServe(":8080", nil)
}
并发计数器
package mainimport ("fmt""sync""time"
)var (mu sync.Mutexcount int
)func increment() {mu.Lock()count++mu.Unlock()
}func main() {var wg sync.WaitGroupfor i := 0; i < 100; i++ {wg.Add(1)go func() {defer wg.Done()increment()}()}wg.Wait()fmt.Println("最终计数:", count) // 输出: 100
}
希望大家喜欢这篇文章!如果有任何问题,欢迎在评论区留言,我会第一时间回复! 😊
相关文章:
Go 语言语法精讲:从 Java 开发者的视角全面掌握
《Go 语言语法精讲:从 Java 开发者的视角全面掌握》 一、引言1.1 为什么选择 Go?1.2 适合 Java 开发者的原因1.3 本文目标 二、Go 语言环境搭建2.1 安装 Go2.2 推荐 IDE2.3 第一个 Go 程序 三、Go 语言基础语法3.1 变量与常量3.1.1 声明变量3.1.2 常量定…...
【Python】Python 环境 + Pycharm 编译器 官网免费下载安装(图文教程,新手安装,Windows 10 系统)
目录 Python 环境的下载安装第一步 进入官网第二步 找到匹配 windows 系统的 python 下载页面第三步 根据电脑 cpu 架构选择 python 版本第四步 安装 python 环境第五步 验证 python 环境变量 Pycharm 的下载安装第一步 进入官网第二步 安装 Pycharm Community Edition第三步 第…...
mapbox_gl The requested URL returned error: 401
pod install 安装报错问题 [!] Error installing Mapbox-iOS-SDK [!] /usr/bin/curl -f -L -o /var/folders/63/x3r49j_x1vld56p1sxdvnlj00000gn/T/d20250402-17703-52p5j/file.zip https://api.mapbox.com/downloads/v2/mobile-maps/releases/ios/packages/6.4.1/mapbox-ios-…...
用docker部署goweb项目
分阶段构建docker镜像 Go程序编译之后会得到一个可执行的二进制文件,其实在最终的镜像中是不需要go编译器的,也就是说我们只需要一个运行最终二进制文件的容器即可。 Docker的最佳实践之一是通过仅保留二进制文件来减小镜像大小,为此&#…...
从零开始学习Slam|ICP原理与应用
ICP全称Iterative Closest Point,翻译过来就是迭代最近点。ICP在点云配准(registration)领域应用的非常广泛. ICP算法流程 首先对于一幅点云中的每个点,在另一幅点云中计算匹配点(最近点) 极小化匹配点间…...
算法与数据结构面试题
算法与数据结构面试题 加油! 考查数据结构本身 什么是数据结构 简单地说,数据结构是以某种特定的布局方式存储数据的容器。这种“布局方式”决定了数据结构对于某些操作是高效的,而对于其他操作则是低效的。首先我们需要理解各种数据结构&a…...
尚硅谷shell脚本学习
视频:【尚硅谷】Shell脚本从入门到实战_哔哩哔哩_bilibili 学一点shell脚本能帮助进行自动化操作。苹果电脑默认环境是/bin/bash/ 通过echo $SHELL 可以查看苹果本机的内核,我的属于/bin/zsh/.注意zsh和bash没有什么区别。 一、Shell脚本入门 1&#…...
设计模式分类与定义(高软55)
系列文章目录 设计模式 文章目录 系列文章目录前言一、设计模式分类二、设计模式定义三、真题总结 前言 本节讲明常用设计模式的定义、关键点知识,很有意义哦。 一、设计模式分类 二、设计模式定义 三、真题 总结 就是高软笔记,大佬请略过!...
天梯赛 L2-025 分而治之
这个题的主要考点还是邻接表建图,很简单的一道题,每次只需要判断没有被摧毁的城市邻居是不是都被摧毁了。 #include<bits/stdc.h> using namespace std; int main(){int n,m;cin>>n>>m;vector<vector<int>> g(n1);for(in…...
MySQL的进阶语法7(索引-B+Tree 、Hash、聚集索引 、二级索引(回表查询)、索引的使用及设计原则
目录 一、索引概述 1.1 基本介绍 1.2 基本演示 1.3 特点及优势 二、索引结构 2.1 概述 2.2 二叉树 2.3 B-Tree 2.4 BTree 2.5 Hash 2.5.1 结构 2.5.2 特点 2.5.3 存储引擎支持 三、索引的分类 3.1 索引分类 3.2 聚集索引和二级索引 3.2.1 聚集索引和二级…...
芯片射频前端电路架构
2.4GHz射频前端电路的设计需要平衡多方面性能需求,是无线通信系统的关键技术环节,主要由以下几个关键模块组成: 1. 发射链路 - 数字信号转换 - 调制电路 -本地振荡器 - 功率放大器 - 天线匹配网络 2. 接收链路 - 低噪声放大器(LNA)…...
使用STM32CubeMX和Keil在STM32上创建并运行一个简单的FreeRTOS多任务程序
目标 利用FreeRTOS运行两个任务,分别为点灯和OLED屏的显示。 利用STM32CubeMX生成Keil工程和相关初始化代码 知识回顾 之前已经利用STM32CubeMX生成过Keil工程和相关初始化代码了,可以去回顾一下,详情见:https://blog.csdn.ne…...
Spring AI Alibaba 快速开发生成式 Java AI 应用
Spring AI Alibaba 是一款 Java 语言实现的 AI 应用开发框架,旨在简化 Java AI 应用程序开发,让 Java 开发者像使用 Spring 开发普通应用一样开发 AI 应用。Spring AI Alibaba 基于 Spring AI 开源项目构建,默认提供阿里云基础模型服务、开源…...
记录学习的第十七天
今天对昨天下午的洛谷蓝桥杯模拟赛和今天早上的力扣周赛进行复盘。 昨天的蓝桥杯模拟赛,硬坐了4个小时,只会做前面的三道入门题。😥而且第一道填空题竟然还算错了。其他的五道题我都没啥思路了,实在难受啊! Q1:这道题硬…...
穿透单链表的神秘屏障,洞察数据结构的真谛
❤个人主页:折枝寄北的博客 ❤专栏位置:数据结构 单链表实现逻辑 0. 前言1. 概念及结构2. 实现逻辑2.1 相关函数的声明2.2 函数代码实现2.2.1 打印2.2.2 创建新节点2.2.3 尾插2.2.4 头插2.2.5 尾删2.2.6 头删2.2.7 查找2.2.8 pos位置前插入2.2.9 pos位置…...
腾讯云智测试开发面经
1、投递时间线 2.20投递简历,3.11第一轮面试,3.30第二轮面试,4.4第三轮面试,4.10第四轮面试,4.11offer意向书 2、第一轮面试 第一轮面试技术面,面试官是导师,面试时长40多分钟 1)…...
react+antd封装一个可回车自定义option的select并且与某些内容相互禁用
需求背景 一个select框 现在要求可多选 并且原有一个any的选项 其他选项为输入后回车自己增加 若选择了any 则其他选项不可选择反之选择其他选项any不可选择 并且回车新增时也不可直接加入到选中数组只加入到option内 并且不可重复添加新内容 实现过程 <Form.Item …...
笔记1——数据通信网络基础
一、概述 数据通信网络:由路由器、交换机、防火墙、无线设备以终端构成的网络 功能:实现数据互通 二、网络设备 交换机: 特点:距离终端用户最近的设备 作用:终端接入、二层交换机 广播域:交换机连接的终端构成一个广播…...
全国产FMC子卡-16bit 8通道2.4G
国产化FMC DA子卡,16bit 8通道2.4GS/s 全国产FMC子卡是一款高分辨率、高采样率的全国产多通道标准双宽DAC FMC子板。其接口电气和结构设计均依据FMC标准(ANSI/VITA 57.1),通过两个高密度FMC连接器(HPC)连接至FPGA载板。它提供8路A…...
ZLMediaKit 源码分析——[4] ZLToolKit 中EventPoller之异步任务处理
系列文章目录 第一篇 基于SRS 的 WebRTC 环境搭建 第二篇 基于SRS 实现RTSP接入与WebRTC播放 第三篇 centos下基于ZLMediaKit 的WebRTC 环境搭建 第四篇 WebRTC学习一:获取音频和视频设备 第五篇 WebRTC学习二:WebRTC音视频数据采集 第六篇 WebRTC学习三…...
基于 DeepSeek 与天地图搭建创新地理信息应用
一、技术背景 DeepSeek 是由国内公司研发的一款具有强大参数规模与性能的大语言模型,它能够处理复杂的自然语言指令,提供丰富的分析与建议。天地图则是国家地理信息公共服务平台,提供权威、丰富的地理信息数据,涵盖卫星影像、矢量…...
python函数装饰器
python函数装饰器 声明:博主并没有系统学习过python语言,在实际项目中遇到关于python不懂的语法,这里仅作为个人学习积累笔记 1.1 python函数相关基础 深入了解python函数装饰器移步:Python 函数装饰器 下面的笔记来源于上述链接…...
AI战略群与星际之门:软银AI投资版图计划深度解析
一、星际之门:万亿美元级 AI 基础设施革命 1.1 项目背景与战略定位 在 AI 技术迅猛发展的今天,算力已成为推动其前进的核心动力。软银联合 OpenAI、甲骨文、英伟达、微软、arm推出的 “星际之门”(Stargate)计划,无疑是 AI 领域的一颗重磅炸弹。作为 AI 领域史上最大单笔…...
Modbus TCP转profibusDP网关接防撞雷达快速配置
Modbus TCP转profibusDP网关接防撞雷达快速配置 在工业自动化领域中,不同的设备可能使用不同的通信协议。当需要将使用 ModbusTCP 协议的防撞雷达连接到ProfibusDP网络时,需要使用协议转换器来实现协议的转换。 本文将详细介绍如何通过ModbusTCP转Profi…...
O(1) 时间复杂度数据设计题
0x00 preface 所谓 O ( 1 ) O(1) O(1) A P I API API 设计,并不是说,时间复杂度必须是**“总是”常数级别的。 对于一个操作来说,如果他偶尔是 O ( N ) O(N) O(N) 的,大部分时间都是 O ( 1 ) O(1) O(1) 的,并且&a…...
基于Spring AI与Ollama构建本地DeepSeek对话机器人
1、安装ollama: 打开Ollama下载官网,根据自己的操作系统下载相应版本的安装文件。 由于Ollama默认安装在C盘,而Ollama和模型文件都非常大,如果安装在C盘非常占用系统空间,可以使用下面的方法将Ollama安装到指定为止 …...
边缘计算赋能淘宝API:分布式节点缓存降低高并发延迟
以下是关于 “边缘计算赋能淘宝 API:分布式节点缓存降低高并发延迟” 的相关内容介绍: 背景 淘宝作为大型电商平台,每天面临海量的用户访问和高并发请求。在传统的集中式计算架构下,处理如此大规模的请求容易导致网络延迟、响应速…...
Keepalived+LVS+nginx高可用架构
注明:所有软件已经下载好,防火墙和SELinux已经全部关闭 一.搭建NFS 1.服务端 1.创建文件 [rootnfs ~]# mkdir -p /nfs/data 2、修改权限 [rootnfs ~]# chmod orw /nfs/data 3、写配置文件 [rootnfs ~]# cat /etc/exports /nfs/data 192.168.111.118(r…...
CMake学习--如何在CMake中编译静态库、动态库并在主程序中调用
目录 一、背景知识二、使用方法(一)编译静态库(二)编译动态库(三)在主程序中调用库 三、总结 一、背景知识 在C/C开发中,库(Library)是预先编译好的代码集合,…...
技术回顾day3
1.获取文件信息、获取视频信息 走的都是同一个方法:baseController里面的getFile。 在getFile方法里面进行判断文件的类型,判断是不是m3u8类型或者ts类型做一些额外的处理。 获取信息底层就是读取文件,然后写入response的OutputStream ou…...
【dp + 裴蜀定理】P8646 [蓝桥杯 2017 省 AB] 包子凑数 题解
P8646 [蓝桥杯 2017 省 AB] 包子凑数 题解 题目传送门 P8646 [蓝桥杯 2017 省 AB] 包子凑数 一、题目描述 小明发现包子铺有N种蒸笼,每种能放A_i个包子(无限供应)。问有多少个正整数X无法被这些蒸笼数量的组合表示出来。若无限多个则输出…...
在HarmonyOS NEXT 开发中,如何指定一个号码,拉起系统拨号页面
大家好,我是 V 哥。 《鸿蒙 HarmonyOS 开发之路 卷1 ArkTS篇》已经出版上市了哈,有需要的朋友可以关注一下,卷2应用开发篇也马上要出版了,V 哥正在紧锣密鼓的写鸿蒙开发实战卷3的教材,卷3主要以项目实战为主࿰…...
网络华为HCIA+HCIP 策略路由,双点双向
目录 路由策略,策略路由 策略路由优势 策略路由分类 接口策略路由 双点双向 双点双向路由引入特点: 联系 路由回灌和环路问题 路由策略,策略路由 路由策略:是对路由条目进行控制,通过控制路由条目影响报文的转发路径,即路…...
探索Doris:日志分析的新宠,是否能取代老牌ES?
在大数据时代,日志存储与分析对于企业的运营和决策起着至关重要的作用。Elasticsearch(简称 ES)作为一款广泛应用的开源分布式搜索和分析引擎,长期以来在日志管理领域占据着举足轻重的地位。然而,随着技术的不断发展&a…...
常见电源模块设计
目录 1. 5V电源模块 2. 3.3V电源模块 3. 1.9V电源模块 4. 220V转12V电源模块 1. 5V电源模块 参考电路 电路说明: 这个电路采用的是稳压芯片78L05,我是用的12V的电源模块转成为5V,为后续的供电。 2. 3.3V电源模块 参考电路: 电路说明…...
虚幻引擎控制角色跟随移动方向旋转的方法
在UE5中,要控制角色随移动方向旋转,可以使用蓝图和C两种方式来实现。 使用蓝图 1、选中角色移动组件,勾选将旋转朝向运动。 2、选中当前角色类 取消勾选使用控制器旋转的几个选项 3、这时,摄像机会跟着角色一起旋转。如果不希望…...
Oracle 23ai Vector Search 系列之3 集成嵌入生成模型(Embedding Model)到数据库示例,以及常见错误
文章目录 Oracle 23ai Vector Search 系列之3 集成嵌入生成模型(Embedding Model)到数据库示例,以及常见错误使用安装了Oracle 23ai 的虚拟机(Oracle Database 23ai Free VirtualBox Appliance)1.下载[Oracle VM Virtu…...
RISC-V debug专栏2 --- Debug Module(DM)
Debug Module(DM)的核心功能 DM 就像一个翻译官,负责把调试器的抽象指令(比如 “暂停处理器”)转换成硬件能听懂的具体操作。它必须实现以下基本功能: 必要功能(必须实现)ÿ…...
LLM 分词器Tokenizer 如何从 0 到 1 训练出来
写在前面 大型语言模型(LLM)处理的是人类的自然语言,但计算机本质上只能理解数字。Tokenizer(分词器) 就是架在自然语言和计算机数字表示之间的一座至关重要的桥梁。它负责将我们输入的文本字符串分解成模型能够理解的最小单元——Token,并将这些 Token 转换成对应的数字…...
蓝桥杯冲刺:一维前缀和
系列文章目录 蓝桥杯系列:一维前缀和 文章目录 系列文章目录前言一、暴力的写法:二、一维前缀和的模板: 具体实现: 三、具体例题:求和 1.题目参考:2.以下是具体代码实现: 总结 前言 上次我介绍…...
光学关键尺寸量测设备市场报告:2024年全球市场销售额达到了14.75亿美元
一、引言 光学关键尺寸量测设备作为半导体制造、精密加工等领域的核心工具,其重要性不言而喻。随着科技的飞速发展,这些设备在提升产品精度、缩短研发周期、降低生产成本等方面发挥着越来越关键的作用。本报告旨在深入分析光学关键尺寸量测设备的技术特…...
链表的操作-反转链表
链表 160相交链表 代码 class Solution { public:ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {ListNode* h1headA;ListNode* h2headB;while(h1&&h2){if(h1!h2){h1h1->next;h2h2->next;}else{return h1;}}if(h1nullptr){h1headB;}else{h…...
2025 年浙江危化品经营单位考试攻略分享
浙江的考试由省应急管理部门主导。理论考试突出危化品在电商、物流等新兴业态下的安全管理知识,这与浙江发达的电商产业紧密相关。对危险化学品的环境危害及防治知识考查细致。实际操作考核模拟杭州、宁波等地危化品仓储物流中心的作业情况。 报名材料准备齐全后…...
python使用cookie、session、selenium实现网站登录(爬取信息)
一、使用cookie 这段代码演示了如何使用Python的urllib和http.cookiejar模块来实现网站的模拟登录,并在登录后访问需要认证的页面。 # 导入必要的库 import requests from urllib import request, parse# 1. 导入http.cookiejar模块中的CookieJar类,用…...
STM32开发板上生成PWM正弦波
在STM32开发板上生成正弦波通常需要结合定时器(TIM)、数模转换器(DAC)或脉宽调制(PWM)以及时钟系统的配置。以下是分步指南: 方法1:使用DAC 定时器(推荐) 步…...
Spring Boot 实现文件秒传功能
前言 在开发Web应用时,文件上传是一个常见需求。然而,当用户需要上传大文件或相同文件多次时,会造成带宽浪费和服务器存储冗余。此时可以使用文件秒传技术通过识别重复文件,实现瞬间完成上传的效果,大大提升了用户体验…...
【Vue2】数据绑定_MVVM模型_数据代理_事件处理
目录 一、 数据绑定 1. Vue中有2种数据绑定的方式: 2. 响应式原理 el 与 data 的两种写法 二、 MVVM模型 三、 数据代理 1.回顾Object defineproperty方法 2. 何为数据代理 3.Vue中的数据代理 四、 事件处理 1.事件的基本使用: 2. Vue中的事…...
Python数据类型-dict
Python数据类型-dict 字典是Python中一种非常强大且常用的数据类型,它使用键-值对(key-value)的形式存储数据。 1. 字典的基本特性 无序集合:字典中的元素没有顺序概念可变(mutable):可以动态添加、修改和删除元素键必须唯一且不可变&…...
win10之mysql server 8.0.41安装
一 mysql server 下载 官网下载地址页面 https://dev.mysql.com/downloads/mysql/二 免装版使用步骤 1 解压 下载完成后,解压文件夹,如下所示: 2 执行安装命令 D:\soft\mysql\mysql-8.0.41-winx64\mysql-8.0.41-winx64\bin>mysqld --install Service successfully in…...
解决Oracle PL/SQL中“表或视图不存在“错误的完整指南
解决Oracle PL/SQL中"表或视图不存在"错误的完整指南 前言问题概述根本原因分析一、 编译时与运行时验证差异二、权限问题三、 Schema命名问题 实际案例演示案例1:动态分表查询案例2:权限不足的场景 实用排查步骤排查流程图最佳实践建议解决方…...