Go语言笔记
目录
一、变量声明
二、流程控制
if(条件判断)
for(循环结构)
Switch(简化if)
goto(跳出循环)
三、运算符
1、算数运算符
2、关系运算符
3、逻辑运算符
4、位运算符
5、赋值运算符
四、数组
1、数组的定义
2、数组的初始化
3、数组的遍历
五、切片
1、切片的定义和初始化
2、数组转切片
3、切片的容量
4、使用make()函数构造切片
5、append()
6、copy()
一、变量声明
1、函数外的每个语句都必须以关键字开始(var/const/func等)
2、:= 只能在函数内使用
3、_ 多用于占位,表示忽略值
4、const定义,iota从0开始,每增加一行,自动+1
const (_ = iotaKB = 1 << (10 * iota)MB = 1 <<(10*iota)GB = 1 << (10*iota)TB = 1 << (10*iota)PB = 1 << (10*iota)
)
5、八进制&十六进制,注:Go语言无法直接定义二进制
//八进制,0开头var ba int = 027//十六进制,0f开头var sa int = 0xfa
6、字符串,Go语言中的字符串以原生数据类型出现,类似(int/bool/float32等)。默认编码使用UTF-8
6、字符串转义符,使用反引号内部是什么就输出什么,不用加转义符
//反引号的作用,内部写什么就输出什么,不用加转义符s1 := `C:\Users\230900013\go\src`s2 := "C:\\Users\\230900013\\go\\src"
二、流程控制
if(条件判断)
//m只在if判断内部生效n := 18if m := 12; m > n {fmt.Println(" m > n", m, n)} else if m == n {fmt.Println(" m = n", m, n)} else if m < n {fmt.Println(" m <>> n", m, n)}
for(循环结构)
s := "1234567890"for i := 0; i < len(s); i++ {fmt.Printf("for循环基本格式 %c\n", s[i])}//Go没有while循环,可以用for循环完成for {fmt.Println("for无限循环", s)}n := "anfajakjfkasdjgn"for _, b := range n {fmt.Printf("for range循环 %c\n", b)}
Switch(简化if)
switch expr := 4; expr {case 2, 4, 6, 8:fmt.Println(expr, "是偶数")case 1, 3, 5, 7:fmt.Println(expr, "是奇数")default:fmt.Println(expr)}age := 36switch {case age < 18:fmt.Println(age, "未成年人")case age >= 18 && age < 35:fmt.Println(age, "青年人")case age >= 35 && age < 55:fmt.Println(age, "中年人")fallthrough//表示向下穿透,满足该case时,也会执行下一个casecase age >= 55:fmt.Println(age, "好好享受退休生活吧")default:fmt.Println(age, "活着真好")}
goto(跳出循环)
flag := falsefor i := 0; i < 10; i++ {for j := 0; j < i; j++ {if j == 5 {flag = truebreak //跳出内层循环}fmt.Printf("%d - %d\n", i, j)}if flag {fmt.Printf("over\n")break //跳出外层循环}}for i := 0; i < 10; i++ {for j := 0; j < i; j++ {if j == 5 {goto Lable}fmt.Printf("%d - %d\n", i, j)}}Lable:fmt.Println("这里用到了跳转")
三、运算符
1、算数运算符
+、-、*、/、%(++、--在go语言中是单独的语言,不能放在=右边)
2、关系运算符
==、!=、>、>=、<、<=
3、逻辑运算符
&&、||、!
4、位运算符
&:参与运算的两数各对应的二进位相与
|:参与运算的两数各对应的二进位相或
^:参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1
<<:左移n位,高位丢弃,低位补0
>>:右移n位
5、赋值运算符
=、+=、-+、*=、/=、%=、<<=、>>=、&=、|=、^=
四、数组
1、数组的定义
var 数组变量名 [元素数量] T
var a [5]int
var b [5]bool
2、数组的初始化
//方法一var a [5]inta = [5]int{0, 1, 2, 3, 4}fmt.Println(a)//方法二b := [...]int{0, 1, 2, 3, 4, 5, 6, 7}fmt.Println(b)//方法三,根据索引初始化c := [5]int{0:5, 4:20}fmt.Println(c)
3、数组的遍历
//根据索引遍历str := [...]string{"wo", "ttt", "fff", "sss", "rrr"}for i := 0; i < len(str); i++ {fmt.Println(str[i])}//for rangefor _, i := range str {fmt.Println(i)}
五、切片
1、切片的定义和初始化
var name []T
var age []intvar name []stringage = []int{18, 20, 5, 36}name = []string{"Linda", "Lucy", "Lily", "Kity"}var flag = []bool{false, true, false, true}temp := []string{"int", "string", "bool"}
2、数组转切片
//左包含,右不包含str := [...]string{"wo", "ttt", "fff", "sss", "rrr", "ooo", "pip"}a1 := str[1:4] //str取下标1-3的元素a2:=str[:3] //==> 0-2b1:=str[3:] //==> 3-len(str)c1:=str[:] //==> 0-len(str)
3、切片的容量
切片的容量是指底层数组的容量
4、使用make()函数构造切片
make([] T, size, cap)
T:切片的元素类型
size:切片中元素的数量
cap:切片的容量
//int类型切片,长度5,容量10
a:=make([]int, 5, 10)
5、append()
//int类型切片,长度5,容量10a := []int{0, 1, 2, 3}fmt.Printf("a=%v, len=%v, cap=%v\n", a, len(a), cap(a))//append 之后,容量会自动增加a = append(a, 12)fmt.Printf("a=%v, len=%v, cap=%v\n", a, len(a), cap(a))//将B切片追加到A切片, ...表示拆分b := []int{7, 8, 9, 10}a = append(a, b...)fmt.Printf("a=%v, len=%v, cap=%v\n", a, len(a), cap(a))
6、copy()
copy是深拷贝, := 赋值的方式是浅拷贝
str := []string{"a", "b", "c", "d", "f"}stra := strvar strb = make([]string, 5, 10)copy(strb, str)fmt.Printf("str=%v, stra=%v, strb=%v\n", str, stra, strb)str[0] = "test"fmt.Printf("str=%v, stra=%v, strb=%v\n", str, stra, strb)
7、删除
切片没有删除方法,需要通过append操作间接实现删除元素操作。通过拼接,删除的元素实际是被覆盖了,原始指向的底层数组,内容也被改变,观察最终打印的arr,可以清晰看到切片和底层数组之间的关系变化
arr := [...]int{1, 2, 3, 4, 5, 6, 7}s := arr[:]fmt.Println(s, len(s), cap(s))s = append(s[0:1], s[2:]...)fmt.Println(s, len(s), cap(s))fmt.Println(arr)
相关文章:

Go语言笔记
目录 一、变量声明 二、流程控制 if(条件判断) for(循环结构) Switch(简化if) goto(跳出循环) 三、运算符 1、算数运算符 2、关系运算符 3、逻辑运算符 4、位运算符 5、…...

java缓存介绍
在Java编程中,缓存技术是一种非常有效的优化手段,用于减少数据访问的延迟和提高应用性能。缓存技术通过存储数据的副本在内存中,使得后续对相同数据的请求能够直接从内存中快速获取,而不需要再次进行耗时的磁盘访问或网络请求。 缓…...

react中diff的选择性子树渲染
在React中,组件的渲染是高效的,这得益于React的虚拟DOM(Virtual DOM)和diff算法。React的diff算法主要用于比较旧虚拟DOM树和新虚拟DOM树之间的差异,并仅更新实际DOM中需要变化的部分,从而提高性能。 关于…...

Git clone远程仓库没有其他分支的问题
在使用Git克隆(Git clone)时,可能遇到分支不全的问题。有以下几种可能的原因和解决方法: 未将所有分支克隆下来:默认情况下,Git只会克隆远程仓库的主分支。如果您想要克隆其他分支,可以使用以下…...

山东潍坊戴尔存储服务器维修 md3800f raid恢复
山东戴尔存储故障维修 存储型号:DELL PowerVault md3800f 故障问题:存储除尘后通电开机,发现有物理硬盘没有插到位,用户带电拔插了多块物理盘,导致关连的磁盘阵列掉线,卷失败; 处理方式…...

Hive企业级调优[6]——HQL语法优化之任务并行度
目录 HQL语法优化之任务并行度 优化说明 Map端并行度 Reduce端并行度 优化案例 HQL语法优化之任务并行度 优化说明 对于分布式计算任务来说,设置一个合理的并行度至关重要。Hive的计算任务依赖于MapReduce框架来完成,因此并行度的调整需要从Map端和…...

Excel 冻结多行多列
背景 版本:office 2021 专业版 无法像下图内某些版本一样,识别选中框选的多行多列。 如下选中后毫无反应,点击【视图】->【冻结窗口】->【冻结窗格】后自动设置为冻结第一列。 操作 如下,要把前两排冻结起来。 选择 C1&a…...

基于微信小程序的智慧物业管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...

【论文笔记】BEVNeXt: Reviving Dense BEV Frameworks for 3D Object Detection
原文链接:https://arxiv.org/pdf/2312.01696 简介:最近,在摄像头3D目标检测任务中,基于查询的Transformer解码器正在超越传统密集BEV方法。但密集BEV框架有着更好的深度估计和目标定位能力,能全面精确地描绘3D场景。本…...

基于open-gpu-kernel-modules的p2p vram映射bar1提高通信效率
背景 bar1 Base Address Register 1 用于内存映射的寄存器,定义了设备的内存映射区域,BAR1专门分配给gpu的一部分内存区域,允许cpu通过pcie总线直接访问显存VRAM中的数据。但bar1的大小是有限的,在常规的4090上,bar1只…...

java之斗地主部分功能的实现
今天我们要实现斗地主中发牌和洗牌这两个功能,该如何去实现呢? 1.创建牌类:52张牌每一张牌包含两个属性:牌的大小和牌的花色。 故我们优先创建一个牌的类(Card):包含大小和花色。 public class Card { //单张牌的大小及类型/…...

我的AI工具箱Tauri版-VideoIntroductionClipCut视频介绍混剪
本教程基于自研的AI工具箱Tauri版进行VideoIntroductionClipCut视频介绍混剪。 本项目为自研的AI工具箱Tauri版中的视频剪辑模块,专注于自动生成视频介绍片段。该模块名为 VideoIntroductionClipCut,用户可以通过该工具快速进行视频的混剪和介绍内容的生…...

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】011 - 第一个用户空间进程 init 进程 第一阶段初始化过程 源码分析
【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】011 - 第一个用户空间进程 init 进程 第一阶段初始化过程 源码分析 系列文章汇总:《鸿蒙OH-v5.0源码分析之 Uboot+Kernel 部分】000 - 文章链接汇总》 本文链接:《【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】011 - 第一个用户空…...

MyBatis 源码解析:Mapper 文件加载与解析
引言 在 MyBatis 中,Mapper 文件扮演了至关重要的角色,它通过 SQL 映射文件来定义数据库查询操作和 Java 对象之间的映射关系。Mapper 文件通常是以 XML 格式存储的,包含了 SQL 语句以及与 Java 对象的对应关系。在本篇文章中,我…...

(11)(2.1.2) DShot ESCs(二)
文章目录 前言 3 配置伺服功能 4 检查RC横幅 5 参数说明 前言 DShot 是一种数字 ESC 协议,它允许快速、高分辨率的数字通信,可以改善飞行器控制,这在多旋翼和 quadplane 应用中特别有用。 3 配置伺服功能 如上所述,如果使用…...

yolov5/8/9模型在COCO分割数据集上的应用【代码+数据集+python环境+GUI系统】
yolov5/8/9模型在COCO分割数据集上的应用【代码数据集python环境GUI系统】 yolov5/8/9模型在COCO分割数据集上的应用【代码数据集python环境GUI系统】 1.COCO数据集介绍 COCO数据集,全称为Microsoft Common Objects in Context,是微软于2014年出资标注的…...

技术周总结 09.16~09.22 周日(架构 C# 数据库)
文章目录 一、09.16 周一1.1)问题01: 软件质量属性中"质量属性场景"、"质量属性环境分析"、"质量属性效用树"、"质量属性需求用例分析"分别是什么?1.2)问题02: 软件质量属性中…...

【java实现json转化为CSV文件】
文章目录 JSON文件中的数据格式测试文件转换的接口 JSON文件中的数据格式 单条数据展开后如下: {"text": "《邪少兵王》是冰火未央写的网络小说连载于旗峰天下","spo_list":[{"predicate": "作者", "objec…...

MySQL索引知识个人笔记总结(持续整理)
本篇笔记是个人整理的索引知识总结,刚开始有点乱,后续会一直边学边整理边总结 索引(index)是帮助MySQL高效获取数据的数据结构(有序)。就好比索引就是数据的目录 索引结构 Btree索引,Hash索引,Full-text索引,R-tree(空…...

ReKep——李飞飞团队提出的让机器人具备空间智能:基于视觉语言模型GPT-4o和关系关键点约束
前言 由于工厂、车厂的任务需求场景非常明确,加之自今年年初以来,我司在机器人这个方向的持续大力度投入(包括南京、长沙两地机器人开发团队的先后组建),使得近期我司七月接到了不少来自车厂/工厂的订单,比如其中的三个例子&…...

[Java并发编程] synchronized(含与ReentrantLock的区别)
文章目录 1. synchronized与ReentrantLock的区别2. synchronized的作用3. synchronized的使用3.1 修饰实例方法,作用于当前实例,进入同步代码前需要先获取实例的锁3.2 修饰静态方法,作用于类的Class对象,进入修饰的静态方法前需要…...

spring-boot-maven-plugin插件打包和java -jar命令执行原理
文章目录 1. Maven生命周期2. jar包结构2.1 不可执jar包结构2.2 可执行jar包结构 3. spring-boot-maven-plugin插件打包4. 执行jar原理 1. Maven生命周期 Maven的生命周期有三种: clean:清除项目构建数据,较为简单,不深入探讨&a…...

Python办公自动化教程(001):PDF内容提取
1、Pdfplumber介绍 pdfplumber的github地址: https://github.com/jsvine/pdfplumber/【介绍】:pdfplumber 是一个用于处理 PDF 文件的 Python 第三方库,它提供了一种方便的方式来提取 PDF 文件中的文本、表格和其他信息。【功能】ÿ…...

HarmonyOS鸿蒙开发实战(5.0)自定义全局弹窗实践
鸿蒙HarmonyOS开发实战往期文章必看: HarmonyOS NEXT应用开发性能实践总结 最新版!“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线!(从零基础入门到精通) 非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&am…...

【AI学习】了解OpenAI o1背后的self-play RL:开启新的智能道路
在ChatGPT刚刚出来的时候,沐神关于ChatGPT有一段视频,只有几分钟,却是讲得极其透彻的一段。大概意思就是,过去的AI智能水平,比如五年前,大概相当于人类5秒钟思考的程度,包括自动驾驶,…...

Java项目实战II基于Java+Spring Boot+MySQL的车辆管理系统(开发文档+源码+数据库)
目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 "随着…...

IPsec-VPN中文解释
网络括谱图 IPSec-VPN 配置思路 1 配置IP地址 FWA:IP地址的配置 [FW1000-A]interface GigabitEthernet 1/0/0 [FW1000-A-GigabitEthernet1/0/0]ip address 10.1.1.1 24 //配置IP地址 [FW1000-A]interface GigabitEthernet 1/0/2 [FW1000-A-GigabitEthernet1/0/2]ip a…...

Ubuntu 22.04 源码下载、编译
Kernel/BuildYourOwnKernel - Ubuntu Wikihttps://wiki.ubuntu.com/Kernel/BuildYourOwnKernel 一、查询当前系统内核版本 rootubuntu22:~# uname -r 5.15.0-118-generic 二、查询本地软件包数据库中的内核源码信息 rootubuntu22:~# apt search linux-source Sorting... Do…...

【深度学习实战—11】:基于Pytorch实现谷歌QuickDraw数据集的下载、解析、格式转换、DDP分布式训练、测试
✨博客主页:王乐予🎈 ✨年轻人要:Living for the moment(活在当下)!💪 🏆推荐专栏:【图像处理】【千锤百炼Python】【深度学习】【排序算法】 目录 😺〇、仓库…...

基于SpringBoot+WebSocket实现地图上绘制车辆实时运动轨迹图
实现基于北斗卫星的车辆定位和轨迹图的Maven工程(使用模拟数据),我们将使用以下技术: Spring Boot:作为后端框架,用来提供数据接口。Thymeleaf:作为前端模板引擎,呈现网页。Leaflet…...