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

Go 语言核心基础知识点整理 - wanghongwei

Go 语言核心基础知识点整理

1. 环境配置

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/binexport GOPROXY=https://goproxy.cn,direct
go env -w GOPROXY=https://goproxy.cn,direct

2. 基础类型与零值

  • 布尔类型
    bool 不能参与数值运算,也不允许与其它类型强制转换。
  • 字符串与字符
    • byte = uint8,表示 ASCII 字符
    • rune = int32,表示 UTF‑8 字符
    • string 底层是 []byte,可与 []byte 互转
  • 类型转换
    Go 只有显式强制转换,无隐式转换。
  • iota
    常量计数器,在 const 中出现时重置为 0,每新增一行(空行不计)自动递增。
  • nil
    • 预声明标识符(非关键字)
    • 指针、funcslicemapchan 的零值
    • 接口为 nil 当且仅当类型和值均为 nil

3. 复合类型与内存分配

  • 数组
    固定长度,长度是类型的一部分,必须为常量。
  • 切片
    • 引用底层数组,自身是结构体(ptr/len/cap
    • 赋值是值拷贝,容量足够时共享底层数组;append 超出容量则重新分配并独立
  • map
    • 删除不存在的键不会报错
    • 获取不存在的键返回值类型零值
    • map 中的结构体字段不可直接寻址,无法原地修改
  • 内存分配
    • make:返回 Type 本身,仅用于 slicemapchan
    • new:返回 *Type,用于值类型(如 intstruct

4. 函数与流程控制

  • 参数传递
    只有值传递,传参时拷贝的是普通值本身,或引用类型(slicemapchan、指针)的“引用值”。
  • 可变参数
    args ...int 是可变参数,函数内部视为切片;args []int 是普通切片参数,只能传入切片。
  • defer 与 return
    • defer 在语句执行到该行时注册,后进先出执行
    • return 终止函数,但 defer 仍会在返回值返回前执行
    • return 三步:① 赋值返回值(无名返回值会创建临时变量)② 执行 defer ③ 返回最终值
    • 有名返回值可在 defer 中修改,无名返回值则不能
  • fallthrough
    强制进入下一个 case,忽略其条件。
  • 多变量赋值
    先计算右值再统一赋值,支持直接交换:a, b = b, a
  • 格式化输出
    fmt.Sprintf 返回格式化后的字符串。

5. 面向接口与组合

  • 接口
    • 接口变量只能调用接口定义的方法,看不见底层结构体的其他方法
    • 实现 Error() string 即实现 error 接口
  • 方法
    方法必须定义在同一包内
  • 组合(非继承)
    • 无继承,只有组合(内嵌)
    • 内嵌结构体的方法不会被子结构体“覆盖”,调用时若自身无该方法才进入内嵌逻辑
    • 一旦进入内嵌方法,该方法内部只能看到内嵌结构体自己的方法
  • 结构体
    • 可直接用指针访问字段(语法糖)
    • 支持不写键的初始化:Person{"Alice", 20}
    • 只能比较相等(所有字段可比较时),不能比较大小

6. 其他重要特性

  • 包与可见性
    包内名为 internal 的目录对包外不可见。
  • 比较规则
    • 可比较:bool、数值、string、指针、chaninterface(需动态类型可比较)、数组、结构体(元素/字段可比较时)
    • 不可比较:slicemapfunc、以及包含它们的结构体
  • 类型断言与类型选择
    仅能用于接口类型变量。
  • for range
    Go 1.11 后遍历数组指针 &arr 时不再产生副本,v 是原数组元素的实时值拷贝。
  • nil 的接口判定
    接口为 nil 必须类型和值同时为 nil
http://www.jsqmd.com/news/546468/

相关文章:

  • 三步掌握MarkDownload:效率工具提升内容管理的实战指南
  • MinIO对象存储避坑指南:Python连接中的5个常见错误及解决方案
  • SVG Crowbar:轻松提取网页SVG内容的高效工具
  • 将嵌套循环中的Java对象数组转换为HashMap以优化性能
  • BepInEx 终极指南:快速掌握 Unity 游戏插件开发框架
  • MCP项目笔记六(PluginsLoader)
  • 现代AI架构重大突破:Transformer模型的双向信息流革命
  • 【人物传记】唯一一位两次获得诺贝尔物理学奖-约翰·巴
  • 探索OpenSC:安全认证与智能卡管理实战指南
  • 【开发者指南】Android Studio 核心文件深度解析:从build.gradle到AndroidManifest.xml
  • 在Ubuntu 22.04上从零部署YOLOv8-OBB C++推理服务:OpenCV 4.9.0 + ONNX Runtime保姆级避坑指南
  • 告别迷茫!Synopsys AXI VIP实战:用analysis port还是callback?手把手教你选对通信方式
  • C++的std--ranges中的优化路径热点
  • OWASP靶场实战指南:从环境搭建到第一个SQL注入漏洞挖掘(含DVWA通关思路)
  • DW_apb_i2c避坑指南:标准模式100KHz速率下EEPROM读写异常排查全记录
  • 告别调参玄学:手把手教你用‘黎卡提方程’为自动驾驶LQR控制器选择Q和R矩阵
  • 经典概率题:飞机座位分配问题(LeetCode 1227)超详细解析
  • 从傅立叶变换到FNO:为什么说它是AI for Science的‘下一个Transformer’?
  • 2026年留学生essay Turnitin检测AI率高怎么办?这3款工具亲测有效
  • CAN总线信号测量与示波器分析技术
  • 5分钟搞懂3GPP NTN标准:从Release16到19的关键技术演进与实战应用
  • Java面向对象实战:从0到1手写奇偶判断工具类[特殊字符]新手保姆级教程
  • LFM2.5-1.2B-Thinking-GGUF惊艳效果:复杂逻辑推理题(如数理推导)分步求解
  • 大模型微调玩转变化检测?3个模型实测,结果惊呆!
  • 嘎嘎降AI保姆级使用教程:从上传到达标,每个按钮都帮你点到
  • 嵌入式开发必看:RTC电池选型避坑指南(附CR2032 vs 超级电容实测对比)
  • TEA加密算法实战:用Python和C语言实现QQ同款加密(附完整代码)
  • 让Windows 11任务栏变身歌词显示器:Taskbar-Lyrics深度体验
  • 【单片机】内核中断及NVICPending
  • PyTorch 2.8 + CUDA 12.4镜像效果展示:文生视频/大模型微调真实案例集