- 博客(9)
- 收藏
- 关注
原创 Go中的类型推断
Go语言中对变量使用简单的类型推断,给人以编写动态类型代码的感觉,同时仍然具有静态类型的安全性。但是,下面的代码是错误的,即a的值已被推断为整数,而1.1为浮点数,不能将a强制转换为浮点数,相加失败。由于Go语言的类型系统禁止了不同类型之间的转换(第4章中的常量除外),因此下例中的a已经被推断为int类型,不能够赋值给int64类型。Go语言的类型推断在处理包含变量标识符的推断方面是半智能的。因此在设计go语言中,对变量使用简单的类型推断,给人以编写动态类型代码的感觉,同时仍然保留静态类型的好处。
2024-07-03 15:42:38 447
原创 Go中的管道(channel)
(1)管道本质就是一个数据结构-队列(2)数据是先进先出(3)自身线程安全,多协程访问时,不需要加锁,channel本身就是线程安全的(4)管道有类型的,一个string的管道只能存放string类型数据var 变量名 chan 数据类型PS1:chan管道关键字PS2:数据类型指的是管道的类型,里面放入数据的类型,管道是有类型的,int类型的管道只能写入整数intPS3:管道是引用类型,必须初始化才能写入数据,即make后才能使用import("fmt"
2024-04-28 20:45:52 879
原创 字典类型(map)
以上只是基本的存储类型,而各个编程语言中的字典都会在此基础上进行相应的修改和优化(想了解更多的可以看一下GO中map底层实现机制)这种结果之所以块,是因为根据key可以直接找到数据存放的位置;而其他的数据类型是需要从前到后去逐一比对,相对来说比较耗时。这种类型最大的特点就是查找速度非常快,因为他的底层存储就是基于哈希表存储的(不同语言还会有一些差异)。注意:键不重复&键必须可哈希(int/bool/float/string/array)前提:键不重复 &键必须可哈希。
2024-04-26 10:38:06 490 1
原创 Go中Map底层原理剖析
首先,我们要知道如果翻倍扩容(数据总个数 / 桶个数 > 6.5),则新桶个数是旧桶的2倍,即:map中的B的值要+1(因为桶的个数等于。如果是翻倍扩容,那么迁移规就是将旧桶中的数据分流至新的两个桶中(比例不定),并且桶编号的位置为:同编号位置 和 翻倍后对应编号位置。这种扩容和迁移的意义在于:当溢出桶比较多而每个桶中的数据又不多时,可以通过等量扩容和迁移让数据更紧凑,从而减少溢出桶。如果是等量扩容(溢出桶太多引发的扩容),那么数据迁移机制就会比较简单,就是将旧桶(含溢出桶)中的值迁移到新桶中。
2024-04-25 17:00:57 1354 1
原创 Go中float浮点型
小数部分,让小数部分乘以2,结果小于1则将结果继续乘以2,结果大于1则讲结果-1继续乘以2,结果等于1则结束。float类型,计算机中小数的非精确的表示方式,如:`3.14``以float32为例来进行存储,用32位来存储浮点型。,也就意味着可以表示的范围更大了。float32(单精度浮点数)float64(双精度浮点数)
2024-04-23 19:02:49 454
原创 Go中的变量逃逸
堆和栈各有优缺点,该怎么在编程中处理这个问题呢?在C/C++语言中,需要开发者自己学习如何进行内存分配,选用怎样的内存分配方式来适应不同的算法需求。比如,函数局部变量尽量使用栈;全局变量、结构体成员使用堆分配等。程序员不得不花费很多年的时间在不同的项目中学习、记忆这些概念并加以实践和使用。Go语言将这个过程整合到编译器中,命名为“变量逃逸分析”。这个技术由编译器分析代码的特征和代码生命期,决定应该如何堆还是栈进行内存分配,即使程序员使用Go语言完成了整个工程后也不会感受到这个过程。
2024-04-20 16:35:06 570
原创 Mashiro GO
Go使用package(和Python的模块类似)来组织代码。main.main()函数(这个函数位于主包)是每一个独立的可运行程序的入口点。Go使用UTF-8字符串和标识符(因为UTF-8的发明者也就是Go的发明者之一),所以它天生支持多语言。
2024-04-19 18:19:31 387
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人