💜 想真正擅长编程? 从一门课程开始,100% 免费

《笔记》第三篇 Go语言详细介绍与IDEA安装

第03讲 Go语言详细介绍与IDEA安装

本讲义基于视频实际讲解内容整理

一、IDEA编辑器安装

老师在本讲中主要做了两件事:

  1. 解压并安装了IDEA编辑器(Go语言开发工具)
  2. 详细介绍了Go语言的设计哲学和特性

老师提到:Go语言编译完就是一个exe,非常方便。Go语言专门写服务端、写高并发的程序,薪资也高。

二、Go语言圣经

老师推荐了《Go语言圣经》(英文原版 The Go Programming Language),并分享了PDF版本。

三、Go语言的历史与定位

3.1 21世纪的C语言

Go语言有时候被描述为 "C类似语言",也就是 21世纪的C语言。

Go从C语言继承了:

  • 相似的表达式语法
  • 控制结构
  • 基本数据类型
  • 调用的参数传值
  • 指针的很多思想
  • C一直看重的 编译后机器码的运行效率(编完之后直接就是机器码)

3.2 Go项目的设计背景

所有编程都反映了设计者的编程哲学反思。Go项目是谷歌公司在维护超级复杂的系统软件时遇到问题的反思。

主要设计者:Rob Pike(罗布·派克)等。

3.3 Go项目的组成

Go项目包括:

  • 编程语言本身
  • 相关的工具
  • 标准库

老师类比:和C语言一样,C里面也有标准库,都是现代语言的标配。

四、Go语言的设计哲学

4.1 Go有的特性

特性 说明
自动垃圾回收 不需要手动管理内存,避免内存泄漏、CPU过载
包系统 由不同的包堆叠起来构建程序,类似搭积木
函数作为一等公民 函数是最基本的组成单元
词法作用域 变量的作用范围由代码结构决定
系统调用接口 可直接调用操作系统接口
字符串和切片 内置支持

4.2 Go没有的特性

不支持的特性 说明
隐式数值转换 不会自动将字符串转整型、整型转浮点型等,必须显式转换
构造函数 没有类似Java的构造方法(类启动时执行)
析构函数 没有对象销毁时执行的方法
运算符重载 不支持
函数重载 不支持
继承 不支持
泛型 (当时)不支持
异常 没有try-catch机制
宏 没有预处理宏
线程局部存储 不支持

老师讲解隐式转换:Go中虽然用 := 不用写类型,但底层是做了自动类型推导,而不是隐式转换。字符串不能自动转整型,整型不能自动变字符串或浮点型。

4.3 向后兼容

Go语言保证向后兼容:用之前版本Go编写的程序,可以在新版本的编译器上直接构建,不需要修改。

老师对比Java:Java 8写的东西不一定能在Java 17下运行,有些方法会打"废弃"警告。Go则不需要担心这个问题,可以放心下载最新版本。

五、Go的类型系统

5.1 类型安全的重要性

Go有足够的类型系统,以避免动态语言中粗心的类型错误。

老师讲故事:数据类型用错会导致严重事故,提到了波音飞机的事件,说明数据类型的重要性。

5.2 与Java的对比

Java中 int 可能就只是一个 int,而Go提供了更丰富的数据类型(有符号、无符号、不同位宽等),给程序员更多安全性和更好的运行时性能。

5.3 简洁但不简单

Go虽然简洁,但程序员不需要像C/C++那样手动管理太多底层细节。Go的类型系统给程序员带来了更多的安全性和更好的运行时性能。

六、Go的并发支持

6.1 并行的现代计算机

以前的计算机只能一个一个执行任务(单核),现代计算机都是并行机器(多核)。

6.2 CSP并发模型

Go提供了基于 CSP(Communicating Sequential Processes) 的并发侧应支持。

6.3 协程(Goroutine)

Go的动态栈使得协程的初始栈可以更小,创建一个协程的代价很小,百万级的协程完全可以执行。

老师解释:协程简单理解就是进程之间的协作。Go的标准库也提供了很多并发工具。

七、本讲小结

知识点 要点
Go定位 21世纪的C语言,专注服务端高并发
继承自C 表达式语法、控制结构、数据类型、指针、编译效率
垃圾回收 自动管理内存
包系统 积木式构建程序
函数一等公民 函数是最基本单元
无隐式转换 类型必须显式转换
向后兼容 旧代码可在新版本直接编译
CSP并发 基于CSP模型的goroutine,百万级并发
类型安全 丰富数据类型避免粗心错误

八、课后练习

  1. 阅读《Go语言圣经》第一章,了解Go的设计哲学
  2. 对比Go和Java在特性上的差异(构造函数、继承、异常等)
  3. 理解"函数作为一等公民"的含义
  4. 查阅CSP并发模型的基本概念