返回首页
苏宁会员
购物车 0
易付宝
手机苏宁

服务体验

店铺评分与同行业相比

用户评价:----

物流时效:----

售后服务:----

  • 服务承诺: 正品保障
  • 公司名称:
  • 所 在 地:
本店所有商品

  • Go语言编程指南 Go语言开发教程Go编程环境GPM调度模型包管理工具容器微服务计算机编程语言书籍
  • 新商品上架
    • 作者: 马克·贝茨著 | 无编
    • 出版社: 人民邮电出版社
    • 出版时间:2024-06
    送至
  • 由""直接销售和发货,并提供售后服务
  • 加入购物车 购买电子书
    服务

    看了又看

    商品预定流程:

    查看大图
    /
    ×

    苏宁商家

    商家:
    句字图书专营店
    联系:
    • 商品

    • 服务

    • 物流

    搜索店内商品

    商品分类

    商品参数
    • 作者: 马克·贝茨著| 无编
    • 出版社:人民邮电出版社
    • 出版时间:2024-06
    • 页数:无
    • ISBN:9787115636218
    • 版权提供:人民邮电出版社

    商品参数

                   

    商品基本信息,请以下列介绍为准
    图书名称:  Go语言编程指南
    作者:  马克·贝茨
    定价:  119.80
    ISBN号:  9787115636218
    出版社:  人民邮电出版社

      内容简介

    本书涵盖了 Go 语言的基础语法、核心概念、惯用法和**特性,并提供了丰富的代码示例,旨在帮助开发人员快速上手 Go 语言编程。
    本书首先介绍了 Go 语言如何管理包、模块和依赖,帮助读者建立良好的项目结构。接着介绍了字符串、变量和常量等基础知识。随后详细介绍了 Go 语言中的复合类型,如数组、切片、map、控制结构、函数、结构体、方法和指针等的正确使用方法。之后传授了编写高质量测试代码的方法,并介绍了 Go 语言的接口和新的泛型功能及其使用方法。并发编程是 Go 语言的重要特性,本书*后专门介绍了如何利用并发提升代码性能,并详细讲解了通道、Context 及其他**同步原语的使用方法。
    本书根据作者的 Gopher Guides 培训课程编写,适合 Go 语言初学者和具备其他编程语言知识的开发人员学习和参考,也可作为高等院校相关专业的教学参考书


    编辑引荐

    1. 以实现健壮、可靠、性能良好的代码为目的。
    2. 作者团队有丰富的Go语言培训经验,其培训平台Gopher Guides已使10000多名学生受益。
    3. 涵盖 Go 语言截至 1.18 版本的所有内容,包括 Go 语言对新泛型特性的支持。


      目录

    第 1章 模块、包和依赖 1
    1.1  模块 1
    1.1.1  工具链 2
    1.1.2  初始化一个模块 3
    1.1.3  版本控制系统与模块 3
    1.2  包 4
    1.2.1  什么是包 4
    1.2.2  包命名 4
    1.3  文件夹、文件与代码组织 6
    1.3.1  同一文件夹下的多个包 7
    1.3.2  文件命名 8
    1.3.3  包组织 8
    1.4  导入包和模块 11
    1.4.1  导入路径 12
    1.4.2  使用import关键字 13
    1.4.3  解决导入包的名字冲突问题 13
    1.5  依赖 15
    1.5.1  使用依赖 15
    1.5.2  使用go get添加依赖 16
    1.5.3  go.sum文件 18
    1.5.4  更新依赖 19
    1.5.5  语义版本 20
    1.5.6  多版本 20
    1.5.7  循环导入 21
    1.6  本章小结 23

    第 2章 Go语言基础 24
    2.1  Go语言概述 24
    2.1.1  静态类型 24
    2.1.2  垃圾回收 25
    2.1.3  编译 25
    2.1.4  关键字、运算符和分隔符 26
    2.2  数值 27
    2.2.1  选择正确的数值类型 28
    2.2.2  溢出和绕回 28
    2.2.3  饱和 30
    2.3  字符串 30
    2.3.1  解释型字符串字面值 30
    2.3.2  原始字符串字面值 31
    2.4  UTF-8 32
    2.4.1  rune 33
    2.4.2  遍历UTF-8字符串 33
    2.5  变量 35
    2.5.1  变量声明 35
    2.5.2  变量赋值 35
    2.5.3  零值 36
    2.5.4  nil 37
    2.5.5  零值速查表 37
    2.5.6  变量声明与初始化 38
    2.5.7  多变量赋值 39
    2.5.8  未使用的变量 40
    2.6  常量 41
    2.6.1  带类型的常量 43
    2.6.2  无类型常量(推断类型) 43
    2.6.3  类型推断 44
    2.7  标识符命名 45
    2.7.1  命名风格 46
    2.7.2  与包名冲突 47
    2.7.3  通过首字母大写实现标识符导出 50
    2.8  打印与格式化 50
    2.8.1  格式化函数 50
    2.8.2  换行 52
    2.8.3  使用Println打印参数 53
    2.8.4  使用格式化函数 53
    2.8.5  转义序列 53
    2.8.6  格式化字符串 55
    2.8.7  格式化整型 55
    2.8.8  格式化浮点型 57
    2.8.9  打印值的类型 58
    2.8.10  打印值 59
    2.8.11  打印值的更多细节 59
    2.8.12  以Go语法格式打印值 60
    2.8.13  错误使用格式化控制符 61
    2.8.14  显式的实参索引 62
    2.8.15  字符串与数值的相互转换 63
    2.9  本章小结 65

    第3章 数组、切片和迭代 66
    3.1  列表类型:数组与切片 66
    3.1.1  数组与切片的差异 66
    3.1.2  识别差异 67
    3.1.3  初始化数组与切片 68
    3.1.4  数组与切片的零值 69
    3.1.5  数组与切片的索引 70
    3.1.6  数组与切片类型 71
    3.1.7  数组与切片类型的定义 71
    3.1.8  设置数组与切片变量的值 72
    3.1.9  向切片追加元素 73
    3.1.10  向切片追加一个切片 74
    3.2  切片的工作原理 77
    3.2.1  长度与容量 78
    3.2.2  切片的扩容 79
    3.2.3  使用make函数创建切片 81
    3.2.4  使用带长度和容量参数的make函数 82
    3.2.5  make与append函数 83
    3.2.6  切片扩容时发生了什么 83
    3.2.7  子切片 85
    3.2.8  修改子切片 85
    3.2.9  复制切片 86
    3.2.10  将数组转换为切片 88
    3.3  迭代 89
    3.3.1  for循环 89
    3.3.2  迭代数组与切片 90
    3.3.3  range关键字 90
    3.3.4  控制循环 91
    3.3.5  do-while循环 93
    3.4  本章小结 94


    第4章 map和控制结构 95
    4.1  map 95
    4.1.1  长度和容量 96
    4.1.2  初始化map 97
    4.1.3  未初始化的map 97
    4.1.4  map的键 98
    4.1.5  以结构体作为键 98
    4.1.6  迭代map 99
    4.1.7  删除map中的键 101
    4.1.8  不存在的map键 102
    4.1.9  检查map中的键是否存在 103
    4.1.10  利用零值 103
    4.1.11  仅测试键的存在性 104
    4.1.12  map和复杂值 105
    4.1.13  插入时复制 106
    4.1.14  列出map中的键 108
    4.2  if语句 111
    4.2.1  else语句 111
    4.2.2  else if 语句 112
    4.2.3  赋值作用域 113
    4.2.4  逻辑和数学运算符 115
    4.3  switch语句 116
    4.3.1  default 118
    4.3.2  fallthrough 119
    4.4  本章小结 120


    第5章 函数 121
    5.1  函数定义 121
    5.1.1  参数 121
    5.1.2  相同类型的参数 122
    5.1.3  返回值 123
    5.1.4  多返回值 123
    5.1.5  具名返回值 125
    5.1.6  作为一等公民的函数 126
    5.1.7  闭包 127
    5.1.8  匿名函数 128
    5.1.9  接受其他函数的返回值作为参数 129
    5.2  可变参数 129
    5.2.1  可变参数的位置 130
    5.2.2  扩展切片 131
    5.2.3  何时使用可变参数 132
    5.3  延迟函数调用 133
    5.3.1  多个返回路径下的延迟执行 133
    5.3.2  延迟函数调用的执行顺序 134
    5.3.3  延迟函数调用与panic 135
    5.3.4  defer与Exit/Fatal 135
    5.3.5  defer与匿名函数 136
    5.3.6  defer与作用域 137
    5.4  init函数 139
    5.4.1  多个init函数 139
    5.4.2  init函数的执行顺序 140
    5.4.3  利用init函数的导入副作用 140
    5.5  本章小结 142


    第6章 结构体、方法和指针 143
    6.1  结构体 143
    6.1.1  在Go语言中声明新类型 143
    6.1.2  定义结构体 144
    6.1.3  初始化结构体 145
    6.1.4  不带字段名的初始化 146
    6.1.5  访问结构体字段 147
    6.1.6  结构体标签 148
    6.1.7  编码用的结构体标签 148
    6.1.8  使用结构体标签 150
    6.2  方法 150
    6.2.1  方法与函数的不同 151
    6.2.2  方法表达式 151
    6.2.3  第三方类型的方法 152
    6.2.4  函数作为类型 154
    6.2.5  函数的方法 154
    6.2.6  没有继承 155
    6.3  指针 156
    6.3.1  值传递 156
    6.3.2  接收指针 158
    6.3.3  获取指针 158
    6.3.4  传递指针 159
    6.3.5  使用指针 160
    6.3.6  值接收者与指针接收者 161
    6.3.7  new函数 162
    6.3.8  性能 163
    6.3.9  nil接收者 164
    6.3.10  nil接收者检查 165
    6.4  本章小结 166


    第7章 测试 167
    7.1  测试基础 167
    7.1.1  命名 167
    7.1.2  testing.T类型 168
    7.1.3  标记测试失败 169
    7.1.4  使用t.Error 170
    7.1.5  使用T.Fatal(**) 172
    7.1.6  精心编写测试失败的信息 173
    7.2  代码覆盖率 174
    7.2.1  代码覆盖率基础 174
    7.2.2  生成覆盖率报告 174
    7.2.3  go tool cover命令 175
    7.2.4  生成HTML覆盖率报告 176
    7.2.5  编辑器支持 177
    7.3  表驱动测试 178
    7.3.1  表驱动测试剖析 178
    7.3.2  编写表驱动测试 179
    7.3.3  子测试 181
    7.3.4  子测试剖析 181
    7.3.5  编写子测试 182
    7.4  运行测试 183
    7.4.1  运行**包的测试 183
    7.4.2  运行当前包及子包中的测试 183
    7.4.3  输出测试详细信息 183
    7.4.4  在测试中输出日志 184
    7.4.5  短测试 185
    7.4.6  并行运行包测试 186
    7.4.7  并行运行测试 186
    7.4.8  运行特定的测试 187
    7.4.9  设置测试**时时间 188
    7.4.10  快速失败 189
    7.4.11  禁用测试缓存 190
    7.5  测试辅助函数 190
    7.5.1  定义测试辅助函数 190
    7.5.2  将函数标记为测试辅助函数 194
    7.5.3  清理测试辅助函数的资源 195
    7.6  本章小结 196


    第8章 接口 197
    8.1  具体类型VS.接口 197
    8.2  显式接口实现 199
    8.3  隐式接口实现 200
    8.4  使用接口之前 201
    8.5  使用接口 202
    8.6  实现io.Writer接口 204
    8.7  多个接口 206
    8.8  断言接口实现 206
    8.9  空接口 207
    8.9.1  any 关键字 207
    8.9.2  空接口的问题 207
    8.9.3  使用空接口 208
    8.10  定义接口 208
    8.10.1  定义Model接口 209
    8.10.2  实现接口 211
    8.11  嵌入接口 212
    8.12  类型断言 214
    8.12.1  对断言进行断言 214
    8.12.2  断言具体类型 215
    8.13  通过switch语句进行断言 215
    8.13.1  捕获switch语句中的类型断言结果 216
    8.13.2  注意case子句的顺序 216
    8.14  使用断言 217
    8.14.1  定义回调接口 218
    8.14.2  代码拆解分析 219
    8.15  本章小结 219


    第9章 错误 220
    9.1  错误作为值 220
    9.1.1  error 接口 222
    9.1.2  处理错误 223
    9.1.3  使用错误 224
    9.2  panic 225
    9.2.1  引发panic 225
    9.2.2  从panic状态恢复 226
    9.2.3  捕获并返回panic值 229
    9.3  不要主动抛出panic 232
    9.3.1  检查nil 233
    9.3.2  创建map 235
    9.3.3  指针 237
    9.3.4  接口 238
    9.3.5  函数 241
    9.3.6  类型断言 242
    9.3.7  数组/切片的索引 244
    9.4  自定义错误 246
    9.4.1  标准错误 247
    9.4.2  实现自定义错误 248
    9.5  包装错误和解包装错误 250
    9.5.1  包装错误 252
    9.5.2  解包装错误 253
    9.5.3  解包装自定义错误 254
    9.5.4  包装或者不包装 257
    9.6  errors.As和errors.Is函数 257
    9.6.1  As函数 258
    9.6.2  Is函数 260
    9.7  栈跟踪信息 262
    9.8  本章小结 263


    第 10章 泛型 264
    10.1  什么是泛型 264
    10.1.1  接口存在的问题 264
    10.1.2  类型约束 268
    10.1.3  多重泛型类型 269
    10.1.4  实例化泛型函数 271
    10.1.5  定义约束 272
    10.1.6  多类型约束 273
    10.1.7  底层类型约束 275
    10.1.8  constraints包 277
    10.1.9  类型断言 279
    10.1.10  混合使用方法约束和类型约束 281
    10.1.11  泛型类型 281
    10.2  本章小结 284


    第 11章 通道 285
    11.1  并发和并行 285
    11.1.1  并发不等于并行 286
    11.1.2  理解并发 286
    11.2  Go语言中的并发模型 287
    11.2.1  goroutine 288
    11.2.2  goroutine的内存 288
    11.2.3  Go调度器 288
    11.2.4  工作共享和窃取 289
    11.2.5  不要担心调度器 290
    11.2.6  goroutine示例 291
    11.3  使用通道通信 291
    11.3.1  什么是通道 291
    11.3.2  了解通道阻塞/解除阻塞 292
    11.3.3  创建通道 292
    11.3.4  发送和接收值 293
    11.3.5  一个简单的通道示例 294
    11.3.6  在通道上使用range 295
    11.3.7  使用select语句监听通道 296
    11.3.8  使用select语句 296
    11.3.9  通道不是消息队列 297
    11.4  单向通道 298
    11.5  关闭通道 299
    11.5.1  在读取消息时检测关闭的通道 301
    11.5.2  从已关闭的通道中读取数据时返回零值 302
    11.5.3  关闭一个已经关闭的通道 303
    11.5.4  向已关闭通道中写入数据 304
    11.6  带缓冲的通道 305
    11.6.1  简单的带缓冲的通道示例 305
    11.6.2  从关闭的带缓冲的通道中读取消息 307
    11.7  使用通道捕获系统信号 308
    11.7.1  os/signal包 309
    11.7.2  实现优雅地关闭 310
    11.7.3  监听系统信号 312
    11.7.4  监听关闭确认消息 313
    11.7.5  **时无响应关闭 314
    11.8  本章小结 315


    第 12章 Context 316
    12.1  context.Context接口 317
    12.1.1  Context的Deadline方法 317
    12.1.2  Context的Done方法 317
    12.1.3  Context的Err方法 318
    12.1.4  Context的Value方法 319
    12.1.5  辅助函数 320
    12.1.6  初始Context 321
    12.1.7  默认实现 322
    12.2  Context规则 322
    12.3  Context节点层级 323
    12.3.1  理解节点层级 323
    12.3.2  用Context值包装 324
    12.3.3  接续Context节点 324
    12.4  Context传值 326
    12.4.1  理解Context传值 326
    12.4.2  键解析 328
    12.5  字符串作为键存在的问题 329
    12.5.1  键冲突 330
    12.5.2  自定义字符串键类型 331
    12.6  保护Context中的键和值 333
    12.7  用Context传播取消事件 336
    12.7.1  创建可取消的Context 337
    12.7.2  取消Context 338
    12.7.3  监听取消确认 340
    12.8  **时和截止时间 344
    12.8.1  在**时间点取消 344
    12.8.2  一段时间后取消 345
    12.9  Context错误 346
    12.9.1  Context取消错误 347
    12.9.2  **出截止时间错误 348
    12.10  使用Context监听系统信号 349
    12.11  本章小结 353


    第 13章 同步 354
    13.1  使用WaitGroup等待goroutine 354
    13.1.1  问题 354
    13.1.2  使用WaitGroup 355
    13.1.3  Wait方法 356
    13.1.4  Add方法 357
    13.1.5  Done方法 361
    13.1.6  关于WaitGroup的小结 365
    13.2  使用errgroup.Group进行错误管理 367
    13.2.1  问题 367
    13.2.2  errgroup.Group类型 369
    13.2.3  监听errgroup.Group类型的取消 371
    13.2.4  关于errgroup.Group类型的小结 373
    13.3  数据竞争 375
    13.3.1  竞争检测器 377
    13.3.2  大多数,但不是全部 378
    13.3.3  关于竞争检测器的小结 378
    13.4  使用互斥锁同步访问 379
    13.4.1  sync.Locker接口 381
    13.4.2  使用互斥锁 382
    13.4.3  读写互斥锁 384
    13.4.4  不当使用 386
    13.4.5  有关读/写互斥锁的小结 389
    13.5  仅执行一次任务 389
    13.5.1  问题 390
    13.5.2  实现一次性操作 391
    13.5.3  使用Once关闭通道 393
    13.6  本章小结 395


    第 14章 使用文件 396
    14.1  目录项和文件信息 396
    14.1.1  读取目录 397
    14.1.2  fs.FileInfo接口 399
    14.1.3  获取文件状态 400
    14.2  遍历目录 401
    14.3  跳过目录和文件 404
    14.4  创建目录和子目录 408
    14.5  文件路径辅助函数 410
    14.5.1  获取文件的扩展名 411
    14.5.2  获取文件所在的目录 411
    14.5.3  获取文件或目录的名字 412
    14.5.4  使用文件路径辅助函数 412
    14.5.5  检查错误 413
    14.6  创建多个目录 415
    14.7  创建文件 417
    14.8  修复遍历测试 422
    14.9  向文件中追加内容 424
    14.10  读文件 427
    14.11  注意Windows系统 428
    14.12  fs包 429
    14.12.1  fs.FS接口 430
    14.12.2  fs.File接口 431
    14.13  使用fs.FS接口 432
    14.14  模拟文件系统 435
    14.15  嵌入文件 438
    14.15.1  使用嵌入文件 439
    14.15.2  将文件嵌入二进制文件中 441
    14.15.3  修改嵌入的文件 442
    14.15.4  将文件作为string或者byte切片嵌入 443
    14.16  本章小结 443



      作者简介

    马克·贝茨 Gopher Guides 的联合创始人和讲师。Gopher Guides 是 Go 语言培训、咨询和会议研讨方面的行业先驱。自 2000年以来,马克·贝茨一直与世界上一些规模很大且具有创新性的公司合作,包括苹果、Uber 和 Visa。马克·贝茨于 2013 年发现了 Go 语言并在世界各地组织、主持 Go 语言会议,或在 Go 语言会议上发言,他经常参加 Go Time 播客节目。

    科瑞·拉诺 Gopher Guides 的联合创始人和讲师。在过去的 20 年里,他一直专注于初创企业的全栈技术。科瑞·拉诺与 Go 语言有很深的渊源,曾发起 Go 聚会——Denver Gophers。他利用自己在 InfluxDB(一个用Go 语言编写的高可扩展的数据库)等项目上的实际经验,开设了大量实用的 Go 语言培训课程,并发表了许多相关文章


    1
    • 商品详情
    • 内容简介

    售后保障

    最近浏览

    猜你喜欢

    该商品在当前城市正在进行 促销

    注:参加抢购将不再享受其他优惠活动

    x
    您已成功将商品加入收藏夹

    查看我的收藏夹

    确定

    非常抱歉,您前期未参加预订活动,
    无法支付尾款哦!

    关闭

    抱歉,您暂无任性付资格

    此时为正式期SUPER会员专享抢购期,普通会员暂不可抢购