当前位置: 首页 > ds >正文

【Go】重难点知识汇总

tips

  1. 统计代码行数的工具:cloc(Count Lines of Code) 安装教程
  2. 待续…

《Go语言设计与实现》

在这里插入图片描述

编译原理

  1. 理解编译器的词法与语法解析、类型检查、中间代码生成以及机器码生成过程
  2. 想要了解Go语言的实现原理,理解它的编译过程就是一个没有办法绕开的事情
  3. link

1. 将go语言源代码编译成汇编语言

go build -gcflags -S main.go

2. 编译过程涉及的术语和专业知识

  • 抽象语法树
  • 静态单赋值
  • 指令集

3. 编译原理

  • 词法与语法分析
  • 类型检查
  • 中间代码生成
  • 机器码生成

运行时

理解运行时中的调度器、网络轮询器、内存分配器、垃圾收集器的实现原理

基础知识

理解数组、切片、哈希表和字符串等数据结构的内部表示以及常见操作的原理
理解make、new、defer、select、for和range等关键字的实现
理解Go语言中的函数、方法以及反射等语言特性

1. 数组

  • 数组的访问和赋值需要同时依赖编译器和运行时
  • 它的大多数操作在编译期间都会转换成直接读写内存
  • 在中间代码生成期间,编译器还会插入运行时方法runtime.panicIndex调用防止发生越界错误

2. 切片

  • 切片,即动态数组,其长度不固定,可以向切片中追加元素,它会在容量不足时自动扩容
  • 整块拷贝内存仍然会占用非常多的资源,在大切片上执行拷贝操作时一定要注意对性能的影响

3. 哈希表

  • 实现哈希表的关键点在于哈希函数的选择,哈希函数的选择在很大程度上能够决定哈希表的读写性能
  • Go语言使用拉链法来解决哈希碰撞的问题实现了哈希表
  • 它的访问、写入和删除等操作都在编译期间转换成了运行时的函数或者方法

4. 字符串

  • 切片在go语言的运行时表示与字符串高度相似,所以常说字符串是一个只读的切片类型
  • 字符串上的写入操作都是通过拷贝实现的

5. 函数

  • go通过栈传递函数的参数和返回值
  • 通过堆栈传递参数,入栈的顺序是从右到左,而参数的计算是从左到右
  • 函数返回值通过堆栈传递并由调用者预先分配内存空间
  • 调用函数时都是传值,接收方会对入参进行复制再计算

6. 接口

  • 接口的类型转换
  • 类型断言以及动态派发机制
  • 函数调用时发生的隐式类型转换

7. 反射

  • 使用反射来动态修改变量
  • 判断类型是否实现了某些接口以及动态调用方法等功能

进阶知识

理解常见并发原语Mutex、WaitGroup以及扩展原语的使用和原理
理解HTTP、RPC、JSON等标准库的设计与原理

参考

  1. https://draven.co/golang/
http://www.xdnf.cn/news/1076.html

相关文章:

  • python包管理器,conda和uv 的区别
  • JDBC对数据的增删改查操作:从Statement到PrepareStatement
  • Qt开发:软件崩溃时,如何生成dump文件
  • IDEA中如何统一项目名称/复制的项目如何修改根目录名称
  • 利用 SSH 实现 WordPress 网站的全面安全管理
  • 【Web API系列】Web Shared Storage API 深度解析:WindowSharedStorage 接口实战指南
  • 云平台一键部署【DiffSynth-Studio】支持wan2.1视频生成及视频lora训练
  • Rook 部署 Ceph 集群及 Kubernetes 存储对接实战
  • k8s的yaml文件里的volume跟volumeMount的区别
  • 【Qt】控件的理解 和 基础控件 QWidget 属性详解(通俗易懂+附源码+思维导图框架)
  • 鸿蒙生态:鸿蒙生态校园行心得
  • 一文详解Pytorch环境搭建:Mac电脑pip安装Pytorch开发环境
  • docker 国内源和常用命令
  • 大模型面经 | 春招、秋招算法面试常考八股文附答案(四)
  • 乐迪电玩发卡查分与控制面板模块逻辑解析
  • MAC系统下完全卸载Android Studio
  • 组网技术-BGP技术,IS-IS协议,VRRP技术
  • 操作系统之shell实现(下)
  • 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100。
  • 常用第三方库:dio网络库使用与封装
  • PHP 爬虫如何获取 1688 商品详情(代码示例)
  • 【前端记事】关于electron的入门使用
  • 【C++】vector<bool>特化
  • 外商在国内宣传 活动|发布会|参展 邀请媒体
  • 软件测试之接口测试常见面试
  • 什么是负载均衡?NGINX是如何实现负载均衡的?
  • UML 通信图对象协作:共享汽车系统交互脉络
  • 为什么在TCP层(即传输层)没有解决半包、粘包的问题
  • 技术速递|Agent 模式:对所有用户开放,并支持 MCP
  • 【SF顺丰】顺丰开放平台API对接(注册、API测试篇)