Go语言练习——语法实践

目录

一、数组

1.多维数组的声明和使用

2.数组与切片的转换

3.数组在函数中的使用

二、切片

1.切片的动态扩容机制

2.切片的复制与修改

3.切片在排序算法中的应用

三、结构体

1.结构体的嵌套与方法

2.结构体与JSON的序列化

3.结构体的工厂模式

四、映射

1.映射的并发访问

2.映射与结构体的结合使用

3.映射在缓存中的应用 

五、通道

1.通道的同步发送与接收

2.通道在数据传递中的应用

3.通道在并发控制中的应用


请继续努力

如果你努力了但是没有多大的改观

并不能证明你没有用而是代表你在赎罪

这个时候你应该更加努力

欠的账总会还完,日子总会阳光明媚的

努力刚开始很简单,但是到最后却很难

没有坚持的努力,实质上没有太大的意义

所以很多人看似输掉的是结果

本质上输掉的是过程

还是那句话:

人生没有白走的路,也没有白读的书

好运呢,只是你努力的伏笔而已

哪怕乌云密布,向上爬就是晴空万里

所以 请继续努力

                                                        —— 24.9.12、

一、数组

固定长度的数据集合

1.多维数组的声明和使用

package mainimport "fmt"func main() {var arr [5][5]intfor i := 0; i < 3; i++ {for j := 0; j < 3; j++ {arr[i][j] = i * j}}for i := range arr {fmt.Println(arr[i])}for _, row := range arr {for _, col := range row {fmt.Printf("%d ", col)}fmt.Println()}
}

2.数组与切片的转换

package mainimport "fmt"func main() {arr := [5]int{1, 2, 3, 4, 5}// 左闭右开slice := arr[1:3]fmt.Println("切片", slice)slice2 := arr[0:4]fmt.Println("切片2添加前:", slice2)// append函数slice2 = append(slice2, 6)fmt.Println("切片2添加后:", slice2)slice[1] = 100fmt.Println("修改切片后的数组:", arr)for i := range slice2 {print(i, " ")}
}

3.数组在函数中的使用

package mainimport "fmt"func sumArray(arr [5]int) int {sum := 0for _, value := range arr {sum += value}return sum
}func main() {arr := [5]int{1, 2, 3, 4, 5}result := sumArray(arr)fmt.Println(result)
}

二、切片

动态长度的数据集合

1.切片的动态扩容机制

package mainimport "fmt"func main() {// 初始化容量为5的切片slice := make([]int, 0, 5)for i := 0; i < 10; i++ {slice = append(slice, i)}fmt.Println("扩容后的切片为:", slice)
}

2.切片的复制与修改

package mainimport "fmt"func main() {original := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}copySilice := make([]int, len(original))copy(copySilice, original)copySilice[0] = 1copySilice[1] = 2copySilice[3] = 4fmt.Println("原始切片为:", original)fmt.Println("复制后的切片为:", copySilice)
}

3.切片在排序算法中的应用

package mainimport ("fmt""sort"
)func main() {slice := []int{9, 11, 7, 17, 25, 43, 3, 27, 18}sort.Ints(slice)fmt.Println("排序后的切片为:", slice)
}

三、结构体

自定义数据据类型

1.结构体的嵌套与方法

package mainimport "fmt"type Address struct {City, Street string
}type Person struct {Name stringAge  int// 结构体的嵌套Address Address
}// 打招呼
func (p *Person) Greet() {fmt.Printf("Hello,My name is %s,I am %d old and I live in %s\n", p.Name, p.Age, p.Address.City)
}func main() {person := Person{Name:    "lcl",Age:     23,Address: Address{"西宁市", "同仁路"},}person.Greet()
}

2.结构体与JSON的序列化

package mainimport ("encoding/json""fmt"
)type Person1 struct {Name string `json:"name"`Age  int    `json:"age"`
}func main() {person := Person1{Name: "Alice", Age: 30}jsonData, err := json.Marshal(person)if err != nil {fmt.Println("Error:", err)}fmt.Println("JSONdata:", string(jsonData))
}

3.结构体的工厂模式

工厂模式 —— 设计模式的一种

package mainimport "fmt"type People struct {Name stringAge  int
}func NewPeople(name string, age int) *People {return &People{name, age}
}func main() {people := NewPeople("John", 18)fmt.Printf("new person:%+v\n", people)
}

四、映射

键值对集合

1.映射的并发访问

package mainimport ("fmt""sync"
)// 映射的并发访问
func main() {var m sync.Mapm.Store("key1", "value1")m.Store("key2", "value2")// Loadif v, ok := m.Load("key1"); ok {fmt.Println("key1:", v)}// Rangem.Range(func(key, value interface{}) bool {fmt.Print(key, ":", value, "\n")return true})
}

2.映射与结构体的结合使用

package mainimport "fmt"type Book struct {title  stringauthor string
}func main() {books := make(map[string]Book)books["1"] = Book{"Go Programming", "Jane Doe"}books["2"] = Book{"Learn Go", "Jane Doe"}for key, value := range books {fmt.Println("Book ID:", key, " Title:", value.title, " Author:", value.author)}
}

3.映射在缓存中的应用 

package mainimport "fmt"func fibonacci(n int) int {cache := make(map[int]int)return fib(n, cache)
}func fib(n int, cache map[int]int) int {if n <= 1 {return n}if val, ok := cache[n]; ok {return val}cache[n] = fib(n-1, cache) + fib(n-2, cache)return cache[n]
}func main() {// 斐波那契数列的第n项fmt.Println(fib(5, make(map[int]int)))
}

五、通道

并发编程的同步机制

1.通道的同步发送与接收

package mainimport "fmt"// 当接收到通道中的值时,它表示工作完成。
func worker(done chan bool) {fmt.Println("Worker started")  // 打印开始工作的信息<-done                         // 阻塞等待,直到从通道done接收到一个值fmt.Println("Worker finished") // 当从通道接收到值时,打印完成工作的信息
}func main() {// 创建一个布尔类型的无缓冲通道done := make(chan bool)// 使用 go 关键字启动一个新的goroutine来执行worker函数// 注意:原代码中的 goworker(done) 应该是 go worker(done)go worker(done)fmt.Println("Main waiting")// 主goroutine向通道done发送一个值,通知worker函数可以结束done <- true
}

2.通道在数据传递中的应用

package mainimport "fmt"func sendData(ch chan int) {for i := 0; i < 5; i++ {ch <- i}close(ch)
}func main() {ch := make(chan int)go sendData(ch)for data := range ch {fmt.Println("Received", data)}
}

3.通道在并发控制中的应用

package mainimport ("fmt""sync"
)func main() {// 缓冲通道,容量为2var wg sync.WaitGroup// 缓冲通道,容量为2ch := make(chan struct{}, 2)wg.Add(2)for i := 0; i < 2; i++ {go func(id int) {defer wg.Done()// 进入ch <- struct{}{}fmt.Printf("Goroutine %d is processing\n", id)// 离开<-ch}(i)}wg.Wait()fmt.Println("All goroutines have finished")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/427930.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器&#xff1a;embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件&#xff0c;取代物理硬件&#xff0c;为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…

对商品分类系统的若干问题的思考

科学研究的目的就是研究事物的特征&#xff0c;并根据共同的特征加以分类 商品分类是商业&#xff0c;制造业中最普遍的活动&#xff0c;几乎所有的企业&#xff0c;电商平台都要对销售的商品&#xff0c;使用的原材料&#xff08;BOM&#xff09;进行分类和编号。 商品分类貌似…

从零开始学习Linux(12)---进程间通信(信号量与信号)

目录 1.信号量 2.信号 1.core功能 2.信号集 3.内核态和用户态 用户态&#xff08;User Mode&#xff09; 内核态&#xff08;Kernel Mode&#xff09; 4.volatile关键字 1.信号量 信号量是计算机科学中用于同步和互斥的一种抽象数据类型。在并发编程中&#xff…

集群聊天服务器项目【C++】项目介绍和环境搭建

前言&#xff1a;学习一个基于C集群聊天服务器的项目&#xff0c;记录学习的内容和学习的过程。 1.项目介绍 在 Linux 环境下基于 muduo 开发的集群聊天服务器。实现新用户注册、用户登录、添加好友、添加群组、好友通信、群组聊天、保持离线消息等功能。 2.技术栈 Json序列…

感谢老美苦苦相逼,逼出华为鸿蒙PC

文&#xff5c;琥珀食酒社 作者 | 随风 哎&#xff0c;告诉大家一个不好的消息 刚刚余总说 Windows PC是最后一批了 因为美国新一轮制裁又来了 但大家别急 再告诉大家一个好消息 那就是我们的鸿蒙PC要来了 今天不是华为三折叠手机和iPhone 16首发吗 估计老美是前端时间…

vue项目加载cdn失败解决方法

注释index.html文件中 找到vue.config.js文件注释、

mybatisplus乐观锁

使用方法&#xff1a; 1.添加version锁标记字段 2.实体类添加对应字段&#xff0c;并加上Version注解 3.添加配置类 Configuration public class MpComfig {Beanpublic MybatisPlusInterceptor mpInterceptor(){MybatisPlusInterceptor mpInterceptor new MybatisPlusIntercep…

人工免疫算法(AIS算法)求解实例---旅行商问题 (TSP)

目录 一、采用AIS求解 TSP二、 旅行商问题2.1 实际例子&#xff1a;求解 6 个城市的 TSP2.2 **求解该问题的代码**2.3 代码运行过程截屏2.4 代码运行结果截屏&#xff08;后续和其他算法进行对比&#xff09; 三、 如何修改代码&#xff1f;3.1 减少城市坐标&#xff0c;如下&a…

Windows环境本地部署Oracle 19c及卸载实操手册

前言: 一直在做其他测试,貌似都忘了Windows环境oracle 19c的部署,这是一个很早很早的安装记录了,放上来做个备录给到大家参考。 Oracle 19c‌:进一步增强了自动化功能,并提供了更好的性能和安全性。这个版本在自动化、性能和安全性方面进行了重大改进,以满足现代企业对数…

Serverless 安全新杀器:云安全中心护航容器安全

作者&#xff1a;胡志广(独鳌) 云安全中心对于 Serverless 容器用户的价值 从云计算发展之初&#xff0c;各大云厂商及传统安全厂商就开始围绕云计算的形态来做安全解决方案。传统安全与云计算安全的形态与做法开始发生变化&#xff0c;同时随着这 10 多年的发展&#xff0c;…

12种常见的华为杯数学建模竞赛matlab代码(建议收藏)

1.使用神经网络模型(向量量子化方法LVQ)解决分类/预测问题 clc;clear;​% 第一类蝗虫的触角和翅膀p1 [1.24, 1.27; 1.36, 1.74; 1.38, 1.64; 1.38, 1.82; 1.38, 1.90; 1.40, 1.70; 1.48, 1.82; 1.54, 1.82; 1.56, 2.08];​% 第二类蝗虫的触角和翅膀p2 [1.14, 1.82;…

小众语言ruby在苹果中的初步应用

前言 感觉Ruby在苹果系统中充当一种脚本语言来使用。 1、直接输入ruby没有反应 2、可显示结果的命令 ruby -e "puts Goodbye, cruel world!" 效果如下图&#xff1a; 说明苹果系统中ruby已经安装完毕&#xff0c;或者就是自带的。 3、编辑运行第一个ruby程序 输入…

阿里云盘bug,个人照片泄露 安当TDE透明加密完美保障数据安全

近期&#xff0c;阿里云盘出现了一个严重的隐私安全事件。用户在创建新相册时&#xff0c;系统意外地加载出了其他用户的照片&#xff0c;这些照片包括自拍、风景照、家人旅游照片等&#xff0c;引发了用户对隐私安全的担忧。阿里云盘官方对此事件迅速作出回应&#xff0c;确认…

ADB 安装教程:如何在 Windows、macOS 和 Linux 上安装 Android Debug Bridge

目录 一、ADB 介绍 二、Windows 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 验证 ADB 安装 4. 配置环境变量 5. 验证全局 ADB 使用 三、macOS 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 配置环境变量 4. 验证 ADB 安装 四、Linux 系统安装 ADB 1. 使用包管理器安装…

MySQL高阶1890-2020年最后一次登录

目录 题目 准备数据 分析数据 题目 编写解决方案以获取在 2020 年登录过的所有用户的本年度 最后一次 登录时间。结果集 不 包含 2020 年没有登录过的用户。 返回的结果集可以按 任意顺序 排列。 准备数据 Create table If Not Exists Logins (user_id int, time_stamp …

钉钉 钉钉打卡 钉钉定位 2024 免费试用 保用

打卡助手定位 如图&#xff0c;表示开启成功&#xff0c;软件已定位到钉钉打卡位置。 测试显示&#xff0c;高德地图位置已成功修改。 开启助手定位后&#xff0c;观察效果&#xff0c;打卡按钮由无法打卡变为可打卡状态&#xff0c;照片还显示打卡地点。 伙伴们担心作弊行为会…

《程序猿之设计模式实战 · 观察者模式》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

摩尔-彭罗斯伪逆(pinv)

摩尔-彭罗斯伪逆是一种矩阵&#xff0c;可在不存在逆矩阵的情况下作为逆矩阵的部分替代。此矩阵常被用于求解没有唯一解或有许多解的线性方程组。 对于任何矩阵 A 来说&#xff0c;伪逆 B 都存在&#xff0c;是唯一的&#xff0c;并且具有与 A’ 相同的维度。如果 A 是方阵且非…

[Linux]自定义shell详解

自定义shell 前言1.命令行提示符&#xff0c;字符串的打印1.1命令行提示符2.命令行字符串 2.0对命令行字符串进行切割2.执行命令3.有趣的小问题完整代码 前言 写之前我们先看看一个完整的shell都包括了什么 $符号前面&#xff08;包括这个符号&#xff09;就是命令行提示符&a…

Mac 上哪个剪切板增强工具比较好用? 好用剪切板工具推荐

在日常文字编辑中&#xff0c;我们经常需要重复使用复制的内容。然而&#xff0c;新内容一旦复制&#xff0c;旧内容就会被覆盖。因此&#xff0c;选择一款易用高效的剪贴板工具成为了许多人的需求。本文整理了一些适用于 macOS 系统的优秀剪贴板增强工具&#xff0c;欢迎大家下…