粉丝1.4万获赞2.1万



构源通天之路,讲一下我的应该如何学习构源,尤其是往更深更难的地方去学,也相当于是一个课程介绍吧。我们一直说提出问题比解决问题更重要,那对编程而言,如何提出问题呢? 一个最基本的 action 就是 要写测试单元测试,并发测试、压力测试,通过测试就可以发现问题嘛。发现问题之后,如何解决问题呢? 我们需要通过斜大马做实验,来探寻背后的运行原理,来解开心中疑惑。那是另一方面,作为初学者,你知道的越少,其实你是越难以提出问题的。 所以呢,在课程里面,我会给大家抛出很多问题,通过大量的实验案例,带领大家去进行更深入的思考, 同时提升了各位做实验的能力。因为实验能力也是需要培养的,实验该怎么设计,实验代码该怎么写,里面经常会用到哪些语法? 所以多提本,多思考,多实验是我学习构员最重要的一条方法论,也是我录制这门课程自始至终贯穿的一个原则。这里面会有很多框架,以往我们学习各种框架,感觉很难,摸不着头脑, api 太多,记不住, 主要是因为你不知道这个框架到底要解决什么核心问题,以及它背后的实现原理是怎样子。 所以呢,在课程里面,我会带大家去亲自实现很多框架,比如说威尔狄格、伊拉柱框架,他们这就很难学,主要是因为很难理解,因为你没有做过大型的复杂项目嘛。 所以在课程里面,我会先拿一个简单项目啊,不使用任何框架,自己先把依赖注入实现一遍,那这样的话,你既理解了依赖注入框架它背后的实现原理,同时呢,你也明白了依赖注入会带来哪些麻烦,到底在主导项目里面适合使用依赖注入。 再比如说生成词,现在我有几万几十万文件需要并行处理,我会教大家先使用 channel 实现一个极致的编码方案,然后我们再讨论使用生成词会带来哪些便利,以及会失去哪些灵活性。 再比如说缓存,有 radis, 有 本地缓存。在课程里面,我们会讲到 goframe 这个框架, goframe 呢,它还对 radis 和本地缓存进行了统一封装。在第三步第一章工程算法那一章,我们还会亲自去实现超时缓存、 l r u 缓存以及 l f u 缓存。 同时呢,为了避免缓冲击穿,我们还亲自实现了一个波浪过滤器。所以如果你想提升你的算法工具的话,也没必要去刷立扣的。我们在实际工作中就有大量的练习案例, 而且呢,来自于实际工程的问题,它更容易被面试官拿出来提问。分布式所在课程的各个地方也都有提到有基于马斯克的 edc 的, 而且呢,基于马斯克的方案还不止一种。 总结对比联想也是课程的一大特色,也是我们学习任何东西的一个重要方法,因为这样更有利于你加深理解,方便消化和记忆。 时间有限,我只是举了很少的几个例子。这边有一个课程大纲,像连接池服务注册与发现接口限流、链路追踪、分布式事务数据库的分库分表,这些过程实践在课程里面也都会有详细讲解, 那更不用说进 glm、 卡夫卡、 k、 八四这些主流框架了。除了对应的章节专题之外,课正里面还有丰富的项目实战来综合应用这些框架技能。这是一个项目列表, 比如说信息发布系统,它主要是教大家通过 g r m 和进来搭建一个常规的 web 项目,涉及到用户登录权限管理、对信息的增删改查,以及如何使用 promises 和 graphora 对 进场系统进行监控。秒杀系统主要是练习一下 radis 和并发编程以及 rocket mq。 即时通讯系统呢,主要是学习 obfuscate 和 rabbit mq。 而搜索引擎则设计很多底层的硬核技能,包括像跳表、我、云算、本地 kpi、 数据库以及分布系统如何搭建,如何进行服务的注,随发现还会涉及到外观、代理策略等八种设计模式。 最后还是强调一句话,实践出真知,不要只学理论,不要只听别人的结论,只有自己写代码做实验,你看到实验结果了,你才掌握了。

go a statically typed compiled language often described as c for the twenty first century, it's a popular choice for high performance server side applications and is the language that built tools like docker, cockroach db and d graph he was created at google in two thousand seven by legends who really know their stuff like ken thompson, the inventor of the b and c programming languages version one pointo is released as open source software in twenty twelve it was designed for simplicity and efficiency and that's why we call it go and not go lang the source code is compiled down to machine code which means it generally outperforms interpreted languages, but it's famous for its extremely fast compile times made possible by innovations to dependency analysis and even though it's a statically type language it performs type inference to deliver a syntax that is very concise and practical it also has a package and module system making it easy to import an export code between projects to get started install go and then open an empty directory on your system create a file enemy go then add package main at the top to create a standalone executable and then declare a main function, which is where your program will start executing go has a standard library of core packages to handle common requirements like math networking or formatted io by importing fmt, we can print a line to the standard output then run the go build command and it quickly compiles the source code and dependencies into an executable binary when it comes to dependencies, we can also link to remote packages on github run go mod and knit from the command line and that creates a go module file that enables dependency tracking syntactically go is like a concise version of c or c a variable with the var keyword followed by its name and type and initialize it with a value or you might use the short assignment syntax to replace bar and let go automatically infer the type and you can define multiple variables from a single line go has all the other features you would expect in a programming language like a raise maps loops and control flow, but also allows you to store the memory address of a value using pointers while disallowing pointer rhythmatic, which often leads to dangerous and unpredictable behavior in addition it supports concurrency with go routines, which are functions that can run at the same time as other。




我们看一下构原理 map 的 使用,首先呢,我们需要声明一个变量,它是 map 魔方来进行声明。 map 中框里面是 b 的 类型,比方说用 string value, 比方说使用 int 整形,那么呢,任何类型都可以作为 mac 的 value, 而想当 mac 的 k 的 话,一般类型都可以,但是个别类型不能,比方说像切片,像函数啊,它们就不能作为 mac 的 k。 好,上面之后呢,我们可以来给大家一个初步化,就是申请内存 m 等于跟芯片一样,通过 make 函数来进行内存的申请。初步化 类型儿,后面是容量,就是你先估计一下将来这个 app 里面会容纳多少个 k 幺六,比方说你估计会容纳大几十个,那么呢,你可以设为一百, 然后避免扩容,因为 mac 的 扩容它比 shift 的 扩容成本要大得多,会影响你的性能。 好,那也可以呢,在抽象的同时,直接往里面添加些值,比方说 m 等于 mac, 这些值呢,直接放在大括号里面,跟那个数值切片的初十二负值很像,只不过呢,因为它外号含有 k value 嘛,那么 k 冒号 value, 再来一个 k 冒号 value。 好, 这样的话我们第九行就可以不要了,有第十行就够了, 虽然已经给它赋了两个值,但是难免你后面还想往继续往里面添加新的值。也可以直接 map, 然后中括号加个 key 等于 value, 这样也可以。好,那假如说你想修改 a, 本来是等于三的,你想修改 a 变成值的话,直接 再写一行就可以了, a 这个地方 a 等于四啊,因为 map 里面 k 是 不允许重复的,那这样的话,你 a 就 重复了嘛。那实际上说后面的 a 呢,它的值会覆盖前面的这个值, 那我们可以把 a 对 应的 value 打印出来看一看。 取得 key 对 应的 value 的 话,怎么取呢?你就直接 mac 中括号,然后把 key 放这儿就可以了,这样我们就可以把 a 对 应的 value 给读出来,我们打印出来看一看, 它等于四,是吧?已经把之前的三给覆盖了。好,那我们也可以从 map 里面呢,删除某一个 key, 通过 delete 函数 delete, 然后把 map 传进来,再把对应的 key 传进来。 好,这样的话呢, map 里面就没有 a 这个 key 了,我们可以来试一下啊,我们再把 再把 a 对 应的 value 再打印一遍,看一看会发生什么事情, 再 run 一 次。哎,我们发现这个时候呢,它输出 a 对 应的 value 是 零,那这个时候就比较麻烦了。为什么呢?因为 a 啊,这个 key 明明被删掉了,对于不复的 key 呢,你还去读它对应的 value 够远呢,会返回 value 这种数据类型的零值,那对因特而言,它的零值就是数字零, 麻烦在什么地方呢?对于这种情况,我们实际上并不知道,这个零到底是我们人为故意往里面写的 a 定的是零,还是说 a 不 存在,导致它返回了个零,那怎么办呢?为了区分这种情况啊,为了探听真相,我们可以这样做。 excel 是 否存在 excel? 哎,这样的话呢,我们采取输出这个 v, 采取输出这个 v。 好,第十七行代码,这个什么意思啊?那么呢,我们试图去取得 a 对 应的 value, 它返回的是两个值,如果成功取到,那么就赋给了这个 v value。 但是呢,第二个会先判断这个 key 是 否存在 啊?如果存在的话,就说一幅通过分号,后面跟的是两部分吧,第二部分才是你要判断的那个条件,而第一部分呢,是完成一些局部变的。说实话,如果说存在的话,我们才会去使用这个微,如果说不存在的话,那说明 map 里不存在 a 这个 key, 我 说 map 中不存在 a 这个 key。 好, 我们再转一下,是不是 map 中不存在 a 这个 key all right? 最后我们演示一个关于 map 的 便利啊, map 里面有很多 k 变量吧,还是通过 for range 来进行便利,只不过呢,这个时候 range 它直接返回的就是 key 和 value range 啊, for range 来便利一个 map 好。 map 里面本来是有 a, b, c 三个 key, 后来呢,删除了 a, 只剩下 b 跟 c 这两个 key 了。我们来运行一下, 其中它只剩下 b 和 c 这两个 k, 以及它们对应的 y 是 六和九,这里面会输出 k 和 v。

大家好,我是纯净水,最近有很多学弟学妹们私信我是学习扎瓦,还学习 go。 嗯,主报本人是由扎瓦转成的 go, 所以 对这两种员都有了解 啊。今天就这一问题来来下我的看法。首先我的看法是,对于九二二同学,我们其实学哪一个都可以,因为学历确实是一个磁场大的优势。那么如果对于商分同学来说的话,主要分为以下三类吧。 嗯,第一个是如果你刷到这条视频的时候已经是大四上面期甚至大端下边期的话,那么我不建议你带去学后端,嗯,注意是后端,整个后端都不建议学,我建议你去学侧开或是运威, 如果你是大开上面期的话,我建议你去学扎哇,因为扎哇的岗位确实要比够的岗位要多的多,而且够他小场面的很少,此时你如无脑学够的话,只会增加你事业的概率。 然后最后是大一大二同学,那么我建议你去学 go, 有 的人可能会说学扎瓦也能面试 go, 而且选择性更多一点, 但从主播所看到的真形象来看,其实二者的难度完全不是一个等级,主播在学招的时候,他是四处碰壁的,根本就约不到面试,但转成 go 之后,我可以感觉是非常非常的顺利。然后我们下面来分析下为什么要学习 go 一 眼 啊。首先我们来看一下二者学习人数啊,我们可以在牛客上搜索那么二者的一个学习交流圈,首先 go 的 话是有九百三十七人,而 java 是 有三万多人。 再一个就是百步贴吧,我们 go 二八的话是有,嗯,六千五百人,而 java 的 话是有二一百二十九万人,这个二者学习人数上存在一个巨大的差距,这就迫使 go 的 岗位需要一部分 java 的 简历,大家可以想一下,当前的环境其实是非常的差,那么无论是小傻是大傻,他都不,他都不太想培养人,他都想 要那种着急来就可以直接干活的人,所以说他为什么还要接受你 java 转 go 呢?其实完全是一个迫不得已的一个事情。再者我们可以来看一下二者一个技术战, 嗯,无论是 go 还是 java 的 话,其实都作为一个后端嘛,那么后端了,我们作为后端开发其实就绕不开这我们标红的一个部分。第一点就是后端开发常用数据库,比如说 macbook 啥的没有列上。再一个就是监狱对列,比如 rok mq 卡夫卡。 再一个就是身为锯蛋机的同学,我们要离不开我们的基础,比如我们他的系统和锯蛋机网络。再又据分布式,比如说我们 c a p c a p 理论,嗯,分布式事务,分布式限流,分布式于一致性等等。 然后其次才是语言本身的一个特性,比如说我们 go, go 的 话,我们需要学的至少至少要有 go 本身的一个基础,比如说啊, go 它常用数结构,一个底层原理,它的并发模型,它的并发安全,它的 china context, gc 的 一个原理,再一个就是它所而实用的开发框架来方便我们快速开发的,嗯, 比如说我们正框架和 java 框架啊。然后 java 的 话,我们要学的默契有 java 本身的一个基础,比如说我们 java 数据结构的原理啊, java 数据结构并不是要被把安全之于 m 等等。再一个就是 java 为了 等,为了提高我们开发速度所需要用到的框架,比如说我们 spring spring mvc, mvc, my bt pass 用于不的带有就是微服务这两个思密克勒的可可思密克勒,阿里巴巴,但哦,但是我们可以注意注意来看 每一个,嗯,对于 go 这一个部分的话,其实每一个厂,每个中大厂都有自己的框架,比如说自己也有 he 的 框架,百度的话是有 go 一 的框架,所以说它 因为每个厂它都有自己的框架,所以说它不会把这一部分作为面试考察重点。然后,但是对于 zhai 来说的话,由于我们 spring 家族它实在是太强了,所以说无论是中厂还是大厂是小厂,它都离不开这几套,所以说我们不能保证它面试一应不问,所以说我们必须要花大量的精力来准备这些东西, 这就导致了我们学 java 的 时候要由要对这些东西付出很多的精力,而且他可能不会考到,但是学够的话,我们就可以把更多的精力放在这个橙色的部分,比如,而这个橙色部分恰于是中大厂喜欢考察一个重点, 这就是为什么学够要比学 java 要好,定价厂好进中大厂,起码是啊,就是因为哦,主播理解就是因为这一点。其次我们来看一下资源问题, 很多人会说 java 和勾可以互转,所以要学资源多的,实则不然。第一点是 java 的 资源看似很多,但其实大部分都是不同的卖家重复课程的堆叠。第二点就是在没有 ai 的 时候,簿客很多,方便我解决问题。 但随着 ai 的 兴趣, ai 远比扑克好用, java 丰富的扑克资源不再具备优势。第三点是勾本身的资源也不少,看似少,实则从入门到项目该有的全都有了。如果后期大家对勾感兴趣, 我可以再出一个作品,告诉大家我当时转勾的时候是怎么学习的。最后谢谢大家的观看。

高原基础系列教程,高原中的数值周串和波尔类型。高原中的基本数据类型有波尔类型、数值类型和周串类型。首先我们来说一下波尔类型,波尔类型的标志符 vbool, 他的直 只能为 to 和 foss, 那么 to 就代表真, foss 就是假的意思,那么它的默认值 是 fouse, 我们来代码演示一下。首先声明一个 波尔类型,声明一个波尔类型的变量, 然后他的默认值是 fouse, 那么我们要给他复直呢,可以给他复直为处, 然后我们来打印一下, 好,打印的结果为出,那么这就是波尔类型。 好,接下来我们看一下数值类型,数值类型是用来表示数字的,例如表示整数、小数等数值数值类型主要有整形、 扶点型、复数。首先来看一下整形, 整形是用来用来存储整数的类型, 这是所有的整数率整整形。那么前四个以 u 开头, u 硬的开头的就是无符号,后面硬的开头的只有符号的整形。所谓符号 就是竖直的正负符号,什么意思呢?那就是正竖,那前面他就是一个加号,负负数,那么就是一个减号,那么这就是符号。 然后我们来看一下取值范围,首先来看一下五符号,那么首先优应的八是五符号,八位整形,那么他的取值范围是零到二百五十五, 因为他是无符号的,那么他只能表示零啊,零以上的值啊。从零到二百五十五,也就是二的八次方, 因为他是八位整形嘛,我们二定制的话八位,八位的话就是一个字结二的八次方,二百五十五,最大只是二百五十五, 然后优韵的十六是十六号的十六位的五符号整形,他的取值范围是二的十六次方,最大值二的十六次方减一,然后优韵的三十二,那就二的三十二次方减一啊,六十四 就是二百六十四方减一。下面这个整这个有符号的整形,同样,那么有符号的区别呢?就是他可以表示正直,也可以表示副直,那么一呢,八的取值范围就是从负的 二的七次方,二的七次方是一百二十八啊,负的二二的七次方到正的二的七次方减一,为什么减一呢?因为正正的话,他是从零开始,零占了一位,所以呢就是要二的七次方减一, 这是他所能表示的范围。那么同理,十六位,三十二位和六十四位,他们都是这个最大值和最小值都有取值范围, 那么在使用的时候,使用规则就是根据 程序中需要存储的值得范围选择合适类型,因为不同类型所占用的这个空间不一样,那么我们根据值得取值范围去选择合适类型。好,接下来我们看一下下面几个类型, 那么这个 u in 的,那么 u in 和 in 的这这个 u in 的是无符号整形,印特是有符号整形,那么它为什么没有标识它是多少位呢?因为这种它在三十二位系统上,它就自动就是 u 的三十二的类型,在六十四位系统上就是 u 的六十四,那么硬的也是一样的,那么他的这个位数就取决于操作系统的位数, 然后半的类型,半的类型是 uent 八的别名啊,就是跟 uin 的八是 一样的,然后是润类型,这个类型是和印特三十二的边迷,和印特三十二是一样的。然后 uent 的 ptr 就是五符号整形,但是呢它通常用于存储指针, 这里由印特和印特的取值范围取决于他所运行的操作系统的位数。好,接下来我们来看一下扶点型,那么通俗来讲就是扶点型就是用于存储按小数点的值, 那么前面我们讲到这种整数,整数是 inter 类型,那么小数呢?那就要用辅点类型, 然后敷脸。有两种类型,一个是三十二味的,一个是六十四味的, 那么他的取值范围看到我们这个 flow 三十二的最大值是三点四一,三八一是什么意思呢?这就是科学技术法,十的三十八次方,也就是三点四乘以十的三十八次方,这是最大值。那么 flow 六十四的最大值呢?就是一点八乘以十的三百零八次方。 好,接下来我们来看一下复数, 那么复数是数学中的概念,那么复数的类型有两个,一个是三十二位的, 他的实数,实数部分和虚数部分都是三十二位,然后还有一个六十四位的,那么实数和虚数都是六十四位。首先我们来定义一个复数,比如定义一个 z, 那么这样我们就定义了 z 这个复数,那么它的实数部分是一,然后虚数部分是二。然后我们比如要获取这个复数的实数部分,怎么获取呢?用 rio 这个函数, 然后获取虚数部分,然后来打印一下他的实数部分和虚数部分。 啊,打印出结果来啊,不对,这里写错了,应该是 z。 好,打印出结果啊,实数部分是一,虚数部分是二。好,接下来我们看一下支付串,那么 什么是周转类型呢?也就是那么通俗一点就是就是一连串的字符组成的碎组成的片段。首先我们来定义一个周转 s 一, 这是定义单行左转,那么如果是多行左转呢? 第一个 s 二的多行自助转,多行自助转是使用反应一号多行自助转, 我们来试一下多行换行,这样就表示多行,然后打印一下, 好看,打印出来了啊。第二个,下面这个,这个是多行组转, 然后是字母串的拼接。 什么是拼接呢?就是将两个奏传连起来, 比如像第一个轴转, hello, 然后中间一个空格啊,轴转的拼接是使用加号 海了味的,将海了味的拼接起来。 好,可以看到这就是拼接后的结果。好,今天的分享就到这里。

购物园当中的数据类型以及这些数据类型和其他主流语言在使用当中的差别。就基本数据类型而言,在购物园当中和主流语园呢,嗯,其实是非常相似的。那有布尔型字符型整形,无符号整形, 然后字节 bit, 那这个 bit 呢?嗯,因为它是八位,所以说它也是一个呃无符号八位整形的一个别名。在构言当中, urine 这个类型呢,其实呢相对来说呢,是代表着一个 uncle 的一个编码值,跟字符串相关。这一块部分呢相对复杂,我们会在后面有专门的一节去讲字符和字符编码。 那呃接下来呢,就是啊辅点,然后这个呃辅书类型,那我们可以看到啊,嗯,每一种类型的后面呢,他都会跟上十六、三十二,六十四,那去明显的标识,那这一个整形,或者是这一个无符号整形,或者是这个呃 浮点型,它所代表的这个位数啊,那么这是为了能够你的程序在不同平台运行的时候,不因为它是三十二位平台还是六十四位的平台来导致一些问题。那么当然也有这种默认的 inter 型 呃和这种 you in 之心,那么在六十四位集上呢,他们就是六十四位,在三十二位集上呢,他们就是三十二位。这里呢我们非常要给大家强调的一点呢,就是呃购语言呢,和很多主流的编程语言不一样,他是完全不支持影视类型转换的,那么我们知道很多的,嗯, 主流编程语言有一种潜在的一种规则,就是小的类型呢,可以往大的类型进行影视类型的转换,因为他不会丢失数据,那么 在构圆里面呢,任何类型的数据转换呢,都不支持影视,那么也包括甚至严格到可以说就是圆类型和它的别名类型之间都不能够支持影视类型转换。那么在接下来呢,我们会通过一些程序 来加深对这部分的理解。好, 那我们先创建这个章节的一个目录啊,我们先用一个类型测试的目录 好原版文件,那还是要注意啊,用以下画线 test 的结尾,因为我们还是要用测试程序来验证这些。 so, 首先呢,我们来测试一下 go 对于影视类型转换的支持和约束,那我们首先定义一个 inter 型的变量, 然后我们定一个 inter 六四型的变量,这时候我们把 inter 型的变量附给 inter 六四型的。呃,想使用影视类型转换,因为实际上在我的电脑上呢,是一个六十四位架构,那按理来说呢,他们是同一类型啊,我们来看一下, 那可以看到,呃,这个时候已经给出了一个 bring 错误,实际上来说呢,它是无法支 持这样的一个影视类型的一个转换,那我们把 a 改成 ink 三十二型,这样呢,它会比 b 的范围更小,那这样是否可以影视类型转换呢?那同样 也给出了相同的一个编译错误,那么实际上是不支持你说类型转换了。好,那我们现在来看一下别名,我们定一个我们自己的 inter 的别名啊, my int 实际上就代表我们不说它代表 inter 六四。 那么这个时候呢?哦,那么其实我们只需要使用一个显示的类型转换就可以完成了, 好,这个转换就可以了,那我们现在呢把我们自己的这个类型呢定一个 c 这样一个变量, 那谁让它是 inter 六四啊,我们直接把 b 输给 c。 大家可以看到,其实啊,即便是别名做这样的影视类型转换,在构里面也是不被允许的,我们 face 的方法就是做一个显示的类型转换。好, 那么大家通过这些实验呢,大家可以记住了,就是购物园对于类型转换呢是非常的严苛的,无论是各种类型的影视类型转换都是不支持的,即便是别名的影视类型转换也是不支持的。接下来呢, 我们常常会在我们的代码当中呢,会用到一些预定义的值,那有时候在没有这些预定义的值的情况下呢,比如说我们去找最大的数,最小的数啊,我们就会给他设定一个非常小的数啊,或者是非常大的数。实际上呢,有一些,比如说最大的整形,最大能表示的浮点型,最大能表示的三十二位的无负 括号整形,这些呢,我们可以在这个 mass 这个 package 里面呢,能够找到他的预定意志,所以我们就直接使用就可以了。另外我们想谈到的一个非常需要大家去注意的一个重点,就是购物园呢,他像加了一样支持了这个垃圾回收的机制, 但是呢它作为一种非常高效的语言呢,也支持了你使用指针去直接访问内存空间。但是呃购源的指针呢,实际上来说是有一些使用的限制的啊,就是呃它不支持指针的一个指针运算,那我们下面通过一些例子呢,来看一看它跟主流的像 c 和 c 加加这样支持指针语言的差别。 我们定一个整形变量 a, 那我们呢,呃要获得这个 a 这个变量的指针呢?其实像这里呢,跟 啊主流的编程语言并没有什么差别,通过取纸符就可以获得,把它输出一下, 我们可以看到那第一个呃是 a 的值是一,那么后面这个那当然就是存放 a 的这个值的一个地址了, 我们为了进一步证实一下,我们可以输出它的类型,那这里呢输出类型呢,我们也可以采用格式画幅啊,这个跟嗯 c 和 c 加加都是非常相似的,这里用百分号 t 呢就可以获得这个变量的类型了, 这里我们可以看到 a 呢是 inter 型, a, p, t, r 呢是一个 inter 型的指针,那这些呢,看上去呢,都没有什么异常,都跟我们的主流语言是一样的啊,那关键的问题呢,就在于这,当我们要对指针做一个算数运算,比如说一个加一的运算,那我们 立即会看到会有一个编译错误被抛出来,那这个非常重要,为什么非常重要呢?因为在支持指针的语言当中呢,同学们经常都会使用指针的运算,特别是指针的这个自征,去访问连续的存储空间六项数组,那么其实呢,这在构语原理呢,是不支持指针运算的。 接下来还要谈到一个和其他主流语言的差别呢,就在于字符串了,那我们用一个程序来看一下, 那我们知道啊,在大多数的主流编程语言里面呢, string 呢是一个一个引用类型,或者说一个指针类型,那么如果当你初始化一个 string 的时候呢,声明一个 string 的时候呢,它会被初始化成一个零值,在我们的脑海里呢,它应该被初始化成一个空值,也就是在勾浪里面呢,是这样一个空值。但实际上来说呢, string 在勾浪里面呢,它是一个数值类型,所以说它 被初始化为零值的时候呢,他会默认的初始化为空字符串。那我们先来看一下前后呢加上两个字符,加两个星号,然后你把这个代码注一下, 我们可以看到是紧挨着一些两个信号,这个时候呢,因为 skin 呢是一个空字符串,那么我们也可以通过输出 skin 的长度来看一下, 那它的长度呢是零。为什么要特别强调这一点呢?因为我们很多同学在编程的时候有 c 和 c r 的习惯,当你对于字符串判断的时候,对 我们总是会去判断他有没有初始化,是这样来判断的啊,那实际上来说呢,在勾浪里面呢,他的默认初始化值是一个空值,所以当然你可以做一个这样对于空字符串的判 判断,而不需要对一个空的判断。 好这一节的类型呢,我们就介绍到这了,那大家在学习的过程中呢,尤其要注意以下三点,那第一呢,就是不支持任何类型的影视转换,并且非常严苛的也不支持别名到原类型的影视转换在 go 里面。那么第二呢,就是 go 可以支持指针类型,但是 go 呢,指针是不支持任何运算的。 那么第三点呢,就是购里面的字符串呢是值类型,那么它的默认初始化零值呢?是空字符串,而不是空。