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

Go语言-学习笔记

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

66930

Go语言学习笔记

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

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

    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 语言团队鼓励我们声明体量较小的接口,并建议我们通过这种接口间的组合来扩展程序、增加程序的灵活性。

    36030

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

    这个问题你可以在 Go 语言规范中找到答案,但却没那么简单。它的典型回答是:Go 语言字典的键类型不可以是函数类型、字典类型和切片类型。...这样的键值也不会让 Go 语言编译器报错,因为从语法上说,这样做是可以的。...Go 语言会用被查找键的哈希值与这些哈希值逐个对比,看看是否有相等的。如果一个相等的都没有,那么就说明这个桶中没有要查找的键值,这时 Go 语言就会立刻返回结果了。...当我们试图在一个值为nil的字典中添加键 - 元素对的时候,Go 语言的运行时系统就会立即抛出一个 panic。你可以运行一下 demo19.go 文件试试看。...我以 Go 语言规范为起始,并以 Go 语言源码为依据回答了这些问题。认真看了这篇文章之后,你应该对字典中的映射过程有了一定的理解。

    74501

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

    顺便说一下,我们在调用SendInt函数的时候,只需要把一个元素类型匹配的双向通道传给它就行了,没必要用发送通道,因为 Go 语言在这种情况下会自动地把双向通道转换为函数所需的单向通道。...另外,我们在 Go 语言中还可以声明函数类型,如果我们在函数类型中使用了单向通道,那么就相等于在约束所有实现了这个函数类型的函数。...除此之外,Go 语言还有一种专门为了操作通道而存在的语句:select语句。 知识扩展 问题 1:select语句与通道怎样联用,应该注意些什么?...这个例子以及前面那个例子都可以在 demo24.go 文件中被找到。你应该运行下,看看结果如何。 上面这些注意事项中的一部分涉及到了select语句的分支选择规则。...我把与以上规则相关的示例放在 demo25.go 文件中了。你一定要去试运行一下,然后尝试用上面的规则去解释它的输出内容。

    34201

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

    由于在 Go 语言中实现接口是非侵入式的,所以我们可以做得很灵活。比如,在标准库的net代码包中,有一个名为Error的接口类型。...这是 Go 语言标准库给予我们的优秀范本,非常有借鉴意义。 不过要注意,如果你不想让包外代码改动你返回的错误值的话,一定要小写其中字段的名称首字母。...我们先一起看了一下 Go 语言中处理错误的最基本方式,这涉及了函数结果列表设计、errors.New函数、卫述语句以及使用打印函数输出错误值。 接下来,我提出的第一个问题是关于错误判断的。...我在这里提出了两个在 Go 语言标准库中使用很广泛的方案,即:立体的错误类型体系和扁平的错误值列表。 之所以说错误类型体系是立体的,是因为从整体上看它往往呈现出树形的结构。...笔记源码 https://github.com/MingsonZheng/go-core-demo

    27401

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

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

    31401

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

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

    42701

    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 的启用顺序)不同,而且默认情况下的执行顺序是不可预知的。那怎样才能让这两个顺序一致呢?

    52801

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

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

    28001
    领券