首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go语言-学习笔记

Go是一种开源编程语言,它使构建简单、可靠和高效的软件变得容易。 上面是官网对Go语言的描述。官网里的“hello world”。 看起来,好像和其它语言也差不多的结构。...所以,就没必要向零基础那样学习方式,先大概了解一下所有内容,后续我们再根据实际情况来加深学习。 为了更好的使用Go语言,我们还是需要先安装好开发工具,提高我们的编码效率。...Go基础 因为我自己是有其它编程语言的基础,为了更加快速学习,我这里记录我自己觉得稍微值得关注的知识点。...,没想到Go语言这里也有。...先把问题放在这里,后续在学习过程中,看能否找到答案。 并发 让我决定学Go语言,主要是大家都说Go语言的并发能力很厉害,而且使用很方便,所以自己就开始接触Go语言

59430

Go语言学习笔记

作为时下流行的一种系统编程语言Go 简单易学,性能很好,且支持各类主流平台。已有大量项目采用 Go 编写,这其中就包括 Docker 等明星作品,其开发和执行效率早已被证明。...本书经四年多逐步完善,内容覆盖了语言、运行时、性能优化、工具链等各层面知识。且内容经大量读者反馈和校对,没有明显的缺陷和错误。...上卷细致解析了语言规范相关细节,便于读者深入理解语言相关功能的使用方法和注意事项。下卷则对运行时源码做出深度剖析,引导读者透彻了解语言功能背后的支持环境和运行体系,诸如内存分配、垃圾回收和并发调度等。...本书不适合编程初学入门,可供有实际编程经验或正在使用Go 工作的人群参考。

37120
您找到你想要的搜索结果了吗?
是的
没有找到

Go语言核心36讲(Go语言进阶技术八)--学习笔记

Go语言核心36讲(Go语言进阶技术八)--学习笔记 14 | 接口类型的合理运用 前导内容:正确使用接口的基础知识 在 Go 语言的语境中,当我们在谈论“接口”的时候,一定指的是接口类型。...然后,Go 语言会用我上面提到的那个专用数据结构iface的实例包装这个dog2的值的副本,这里是nil。...在 Go 语言中,我们把由字面量nil表示的值叫做无类型的nil。这是真正的nil,因为它的类型也是nil的。...虽然dog2的值是真正的nil,但是当我们把这个变量赋给pet的时候,Go 语言会把它的类型和值放在一起考虑。 也就是说,这时 Go 语言会识别出赋予pet的值是一个*Dog类型的nil。...Go 语言团队鼓励我们声明体量较小的接口,并建议我们通过这种接口间的组合来扩展程序、增加程序的灵活性。

34230

Go语言核心36讲(Go语言进阶技术七)--学习笔记

Go 语言摄取了面向对象编程中的很多优秀特性,同时也推荐这种封装的做法。从这方面看,Go 语言其实是支持面向对象编程的,但它选择摒弃了一些在实际运用过程中容易引起程序开发者困惑的特性和规则。...这里强调一下,Go 语言中根本没有继承的概念,它所做的是通过嵌入字段的方式实现了类型之间的组合。...在我面试过的众多 Go 工程师中,有很多人都在说“Go 语言用嵌入字段实现了继承”,而且深信不疑。...要么是他们还在用其他编程语言的视角和理念来看待 Go 语言,要么就是受到了某些所谓的“Go 语言教程”的误导。每当这时,我都忍不住当场纠正他们,并建议他们去看看官网上的解答。...但是,Go 语言会适时地为我们进行自动地转译,使得我们在这样的值上也能调用到它的指针方法。

31701

Go语言核心36讲(Go语言进阶技术十二)--学习笔记

我今天要讲的if语句、for语句和switch语句都属于 Go 语言的基本流程控制语句。它们的语法看起来很朴素,但实际上也会有一些使用技巧和注意事项。...本问题中的代码都被放在了命令源码文件 demo41.go 的main函数中的。为了专注问题本身,本篇文章中展示的编程题会省略掉一部分代码包声明语句、代码包导入语句和main函数本身的声明部分。...毕竟,在 Go 语言中,只有类型相同的值之间才有可能被允许进行判等操作。...我们需要多加注意的往往是那些隐藏在 Go 语言规范和最佳实践里的细节。 这些细节其实就是我们很多技术初学者所谓的“坑”。...笔记源码 https://github.com/MingsonZheng/go-core-demo

36701

Go语言核心36讲(Go语言进阶技术六)--学习笔记

从今天开始,我会开始向你介绍使用 Go 语言进行模块化编程时,必须了解的知识,这包括几个重要的数据类型以及一些模块化编程的技巧。首先我们需要了解的是 Go 语言的函数以及函数类型。...前导内容:函数是一等的公民 在 Go 语言中,函数可是一等的(first-class)公民,函数类型也是一等的数据类型。这是什么意思呢?...Go 语言语言层面支持了函数式编程。我们下面的问题就与此有关。 今天的问题是:怎样编写高阶函数? 先来说说什么是高阶函数?简单地说,高阶函数可以满足下面的两个条件: 1....即使对于像 Go 语言这种静态类型的编程语言而言,我们在定义闭包函数的时候最多也只能知道自由变量的类型。...你需要记住 Go 语言是怎样鉴别一个函数的,函数的签名在这里起到了至关重要的作用。 函数是 Go 语言支持函数式编程的主要体现。

50401

Go语言核心36讲(Go语言进阶技术四)--学习笔记

10 | 通道的基本操作 作为 Go 语言最有特色的数据类型,通道(channel)完全可以与 goroutine(也可称为 go 程)并驾齐驱,共同代表 Go 语言独有的并发编程模式和编程哲学。...这是作为 Go 语言的主要创造者之一的 Rob Pike 的至理名言,这也充分体现了 Go 语言最重要的编程理念。...前导内容:通道的基础知识 通道类型的值本身就是并发安全的,这也是 Go 语言自带的、唯一一个可以满足并发安全性的类型。它使用起来十分简单,并不会徒增我们的心智负担。...在声明并初始化一个通道的时候,我们需要用到 Go 语言的内建函数make。就像用make初始化切片那样,我们传给这个函数的第一个参数应该是代表了通道的具体类型的类型字面量。...最后别忘了,通道也是 Go 语言的并发编程模式中重要的一员。 思考题 我希望你能通过试验获得下述问题的答案。 通道的长度代表着什么?它在什么时候会通道的容量相同?

28901

Go语言核心36讲(Go语言进阶技术一)--学习笔记

07 | 数组和切片 我们这次主要讨论 Go 语言的数组(array)类型和切片(slice)类型。 它们的共同点是都属于集合类的类型,并且,它们的值也都可以用来存储某一种类型的值(或者说元素)。...也正因为如此,Go 语言的切片类型属于引用类型,同属引用类型的还有字典类型、通道类型、函数类型等;而 Go 语言的数组类型则属于值类型,同属值类型的有基础数据类型以及结构体类型。...注意,Go 语言里不存在像 Java 等编程语言中令人困惑的“传值或传引用”问题。在 Go 语言中,我们判断所谓的“传值”或者“传引用”只要看被传递的值的类型就好了。...一旦一个切片无法容纳更多的元素,Go 语言就会想办法扩容。但它并不会改变原来的切片,而是会生成一个容量更大的切片,然后将把原有的元素和新元素一并拷贝到新切片中。...但是,当原切片的长度(以下简称原长度)大于或等于1024时,Go 语言将会以原容量的1.25倍作为新容量的基准(以下新容量基准)。

25601

Go语言核心36讲(Go语言进阶技术十一)--学习笔记

for i := 0; i < 10; i++ { go func(i int) { fmt.Println(i) }(i) } 只有这样,Go 语言才能保证每个 goroutine 都可以拿到一个唯一的整数...其原因与go函数的执行时机有关。 我在前面已经讲过了。在go语句被执行时,我们传给go函数的参数i会先被求值,如此就得到了当次迭代的序号。之后,无论go函数会在什么时候执行,这个参数值都不会变。...也就是说,go函数中调用的fmt.Println函数打印的一定会是那个当次迭代的序号。 然后,我们在着手改造for语句中的go函数。...纵观count变量、trigger函数以及改造后的for语句和go函数,我要做的是,让count变量成为一个信号,它的值总是下一个可以调用打印函数的go函数的序号。...另外,go函数的实际执行顺序往往与其所属的go语句的执行顺序(或者说 goroutine 的启用顺序)不同,而且默认情况下的执行顺序是不可预知的。那怎样才能让这两个顺序一致呢?

50801

Go语言核心36讲(Go语言进阶技术九)--学习笔记

我们刚刚只提到了其中的一种情况,在 Go 语言中还有其他几样东西可以代表“指针”。其中最贴近传统意义的当属uintptr类型了。该类型实际上是一个数值类型,也是 Go 语言内建的数据类型之一。...再来看 Go 语言标准库中的unsafe包。unsafe包中有一个类型叫做Pointer,也代表了“指针”。...别忘了,我在讲结构体类型及其方法的时候还说过,我们可以在一个基本类型的值上调用它的指针方法,这是因为 Go 语言会自动地帮我们转译。...除此之外,我们都知道,Go 语言中的++和--并不属于操作符,而分别是自增语句和自减语句的重要组成部分。...它可以绕过 Go 语言的编译器和其他工具的重重检查,并达到潜入内存修改数据的目的。这并不是一种正常的编程手段,使用它会很危险,很有可能造成安全隐患。

41001

Go语言核心36讲(Go语言进阶技术十)--学习笔记

不过,在 Go 程序当中,Go 语言的运行时(runtime)系统会帮助我们自动地创建和销毁系统级的线程。这里的系统级线程指的就是我们刚刚说过的操作系统提供的线程。...M、P、G 之间的关系(简化版) 由于篇幅原因,关于 Go 语言内部的调度器和运行时系统的更多细节,我在这里就不再深入讲述了。...你需要知道,Go 语言实现了一套非常完善的运行时系统,保证了我们的程序在高并发的情况下依旧能够稳定、高效地运行。...严谨地讲,Go 语言并不会去保证这些 goroutine 会以怎样的顺序运行。...总结 今天,我描述了 goroutine 在操作系统的并发编程体系,以及在 Go 语言并发编程模型中的地位和作用。

30201

Go语言核心36讲(Go语言进阶技术十六)--学习笔记

Go 语言的内建函数recover专用于恢复 panic,或者说平息运行时恐慌。recover函数无需任何参数,并且会返回一个空接口类型的值。...这里存在一些限制,有一些调用表达式是不能出现在这里的,包括:针对 Go 语言内建函数的调用表达式,以及针对unsafe包中的函数的调用表达式。 顺便说一下,对于go语句中的调用表达式,限制也是一样的。...其实也并不复杂,在defer语句每次执行的时候,Go 语言会把它携带的defer函数及其参数值另行存储到一个链表中。...在需要执行某个函数中的defer函数调用的时候,Go 语言会先拿到对应的链表,然后从该链表中一个一个地取出defer函数及其参数值,并逐个执行调用。...笔记源码 https://github.com/MingsonZheng/go-core-demo

40901
领券