左耳听风
陈皓
网名“左耳朵耗子”,资深技术专家
180940 人已学习
新⼈⾸单¥98
登录后,你可以任选6讲全文学习
课程目录
已完结/共 119 讲
左耳听风
15
15
1.0x
00:00/00:00
登录|注册

107 | Go编程模式:切片、接口、时间和性能

推荐的参考文档
整型key比字符串key的性能更好
考虑使用Protobuf替代JSON
使用regexp.Compile()编译正则表达式
使用I/O缓冲提高性能
使用lock-free操作和sync/Atomic包
避免在热代码中进行内存分配
并发goroutine和sync.WaitGroup的使用
使用StringBuffer或StringBuild拼接字符串
Slice的append()操作优化
避免String转[]Byte的性能下降
提高数字转换成字符串的性能
全球化跨时区应用的注意事项
重用已有的时间处理
使用time.Time和time.Duration类型
示例
强制实现接口的所有方法
示例
使用接口解耦业务类型和控制逻辑
结构体嵌入示例
使用函数和成员函数输出结构体
示例
使用reflect.DeepEqual()
解决共享内存问题
append()操作示例
切片操作示例
结构体定义
参考文档
性能提示
时间
接口完整性检查
接口编程
深度比较
Slice
Go编程模式:切片、接口、时间和性能

该思维导图由 AI 生成,仅供参考

你好,我是陈皓,网名左耳朵耗子。
今天是我们的第一节课,我先带你学习下 Go 语言编程模式的一些基本技术和要点。了解了这些内容,你就可以更轻松地掌握 Go 语言编程了,其中主要包括数组切片的一些小坑、接口编程,以及时间和程序运行性能相关的内容。
话不多说,我们直接开始。

Slice

首先,我来介绍下 Slice,中文翻译叫“切片”,这个东西在 Go 语言中不是数组,而是一个结构体,其定义如下:
type slice struct {
array unsafe.Pointer //指向存放数据的数组指针
len int //长度有多大
cap int //容量有多大
}
一个空的 Slice 的表现如下图所示:
熟悉 C/C++ 的同学一定会知道在结构体里用数组指针的问题——数据会发生共享!下面我们来看看 Slice 的一些操作:
foo = make([]int, 5)
foo[3] = 42
foo[4] = 100
bar := foo[1:4]
bar[1] = 99
我来解释下这段代码:
首先,创建一个 foo 的 Slice,其中的长度和容量都是 5;
然后,开始对 foo 所指向的数组中的索引为 3 和 4 的元素进行赋值;
最后,对 foo 做切片后赋值给 bar,再修改 bar[1]。
为了方便你理解,我画了一张图:
从这张图片中,我们可以看到,因为 foo 和 bar 的内存是共享的,所以,foo 和 bar 对数组内容的修改都会影响到对方。
接下来,我们再来看一个数据操作 append() 的示例:
a := make([]int, 32)
b := a[1:16]
a = append(a, 1)
a[2] = 42
在这段代码中,把 a[1:16] 的切片赋给 b ,此时,ab 的内存空间是共享的,然后,对 a 做了一个 append()的操作,这个操作会让 a 重新分配内存,这就会导致 ab 不再共享,如下图所示:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文《Go编程模式》深入介绍了Go语言编程模式的一些基本技术和要点,包括切片、接口、时间和性能等方面的内容。文章通过实际示例和技术讲解,深入浅出地介绍了Go语言编程的相关知识。其中涵盖了切片的定义和操作,深度比较的概念,接口编程的方式,接口完整性检查的技巧,以及时间处理方面的最佳实践。此外,文章还提供了一些关于Go语言编程性能的提示,包括数字转换、内存分配、字符串拼接、并发操作、内存重用等方面的建议。总的来说,本文适合读者快速了解和掌握Go语言编程的相关知识,对于想要深入学习Go语言编程模式的读者来说,是一篇值得阅读的文章。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《左耳听风》
新⼈⾸单¥98
立即购买
登录 后留言

全部留言(15)

  • 最新
  • 精选
  • Meow
    oh my godsh, 这个专栏买的是真值,还追加 Go 的选学🥕
    2021-01-20
    15
  • 戈壁滩的骆驼草
    皓哥,太强了👍👍👍
    2021-01-25
    4
  • Moonus
    示例代码,foo = make([]int, 5) 初始化少个: =>foo := make([]int, 5)
    2021-07-17
    2
  • 重生之蓝
    这一章真的很赞,作为半路出家学习go的码农,每个知识点都是容易忽略的问题,看了这个能避免不少因为对go理解不到位导致的程序错误或者性能问题。
    2021-02-25
    2
  • 特立独行的猪
    这就是面向对象编程方法的黄金法则——“Program to an interface not an implementation”。 这几个循序渐进的例子,看到这里突然就顿悟了
    2021-09-13
    1
  • Andy
    最喜欢看到的就是这些图了,特别方便理解
    2023-03-10归属地:北京
  • 老高活鱼
    Typo: `StringBuild` -> `StringBuilder`
    2023-02-19归属地:美国
  • Andy
    我就非常喜欢用图说话,一图胜千言
    2022-12-31归属地:北京
  • limix
    函数,成员方法和接口之间的互动关系,解释到位了
    2022-07-30归属地:陕西
  • 陈琦
    学习到了
    2022-04-04
收起评论
显示
设置
留言
15
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部