【尚硅谷】Day01学习笔记 Golang概述

Golang的岗位

  • 区块链研发工程师

  • Go服务器 / 游戏软件工程师

  • Golang分布式 / 云计算软件工程师

 

 

Golang的应用领域

  • 区块链的应用开发

    • 区块链技术简称BT(Blockchain Technology),也称为分布式账本技术,是一种互联网数据库技术,其特点是去中心化,公开透明,让每一个人均可参与数据库记录。

  • 后端服务器支撑

    • 例1:美团后台流量支撑程序

      • 支撑主站后台流量(排序、推算、搜索等),提供负载均衡,Cache,容错,按条件分配、统计运行指标(qps,latency)等功能。

    • 例2:游戏仙侠道

      • 应用范围,游戏服务器(通讯、逻辑、数据存储等)

  • 云计算 / 云服务后台应用

    • 例1:盛趣云CDN(内容分发网络)——原盛大云CDN

      • 应用范围:CDN的调度系统、分发系统、监控系统、短域名服务,CDN内部开发平台、运营报表系统以及其他的一些小工具等。

    • 例2:京东消息推送云服务 / 京东分布式文件系统

      • 应用范围:后台所有服务

Golang的概述

 

什么是程序?

程序,为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。

 

Go的简介

Go语言是Google公司创造的语言,也是Google主推的程序语言。Go语言是区块链技术最主流的编程语言,同时也是当前最具发展潜力的语言。区块链技术也是目前不错的技术。

 

Go语言应用的国内外代表公司:

  • 国外公司:Google、AWS、CloudFlare、CoreOS等

  • 国内公司:七牛云、阿里、小米、京东等。

都已经大规模开始部署Golang开发及其云计算相关产品。

 

Go语言的发展

 

核心开发团队: Robert Griesemer, Rob Pike, Ken Thompson

 

Google创造Go语言的目的

  • 计算机硬件技术更新频繁:性能提高很快,目前主流的编程语言发展落后于硬件,不能合理利用多核CPU的优势提升软件系统性能。

  • 软件系统复杂度越来越高,维护成本越来越高,目前缺乏一个足够简洁高效的编程语言。

  • 企业运行维护很多C/C++的项目,C/C++程序运行速度很快,但是编译速度很慢,同时还存在内存泄漏的一系列的困扰需要解决。

 

Go的发展史

2007年,Google工程师 Robert Griesemer, Rob Pike, Ken Thompson开始设计一门全新的语言,go语言最初模型的开端。

2009年11月20日,Google将Go语言以开放源代码的方式向全球发布。

2015年8月19日,Go 1.5版发布,本次更新中移除了“最后残余的C代码”

 

2017年2月17日,Go语言Go1.8版发布。

2017年8月24日,GO语言Go 1.9版发布

……。

 

Go语言的特点(特性)

简介:Go语言保证了既能够达到静态编译语言的安全和性能,又达到了动态语言开发类维护的高效率。使用一个表达式来形容Go语言,go = C + Python ,说明Go语言既有C静态语言程序的运行速度,又能达到Python的动态语言的快速开发。

  • 从C语言中继承了很多理念,包括表达式语法,控制结构、基础数据类型、通用参数传递、指针等等,也保留了和C语言一样的编译执行方式及弱化的指针。

  • 引入包的概念,用于组织程序结构,Go语言的一个文件都要归属于一个包,而不能单独存在。

  • 垃圾回收机制,内存自动回收,不需要开发人员进行管理。

  • 天然并发

    • 从语言层面支持并发,实现简单。

    • goroutine,轻量级线程,可实现大并发处理,高效利用多核。

    • 基于CPS并发模型(Communicating Sequential Processes)实现。

  • 吸收了管道通信机制,形成Go语言特有的管道Channel。通过Channel,可以实现不同的goroute之间的相互通信。

  • 函数返回多个值。

  • 新的创新内容,例如切片、延时执行defer等。

 

精简版的特性:

  • 自动垃圾回收

  • 更丰富的内置类型

  • 函数多返回值

  • 错误处理

  • 匿名函数和闭包

  • 类型和接口

  • 并发编程【重要特点】

  • 反射

  • 语言交互性

 

Go语言的开发工具

  • Visual Studio Code简称VS Code

  • Sublime Text

  • Vim是从Vi发展出来的一个文本编辑器。

  • Emacs

  • Eclipse IDE工具,开源免费,并提供GoEclipse插件。

  • LiteIDE是一款专门为Go语言开发的跨平台轻量级集成开发环境(IDE)。

  • JetBrains公司的Goland,都是需要安装插件的。

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
个人学习golang笔记,从各种教程中总结而来,作为入门参考。目录如下 目录 1. 入门 1 1.1. Hello world 1 1.2. 命令行参数 2 2. 程序结构 3 2.1. 类型 4 2.1.1. 命名类型(named type)与未命名类型(unamed type) 4 2.1.2. 基础类型(underlying type) 4 2.1.3. 可赋值性 5 2.1.4. 类型方法集 6 2.1.5. 类型声明 6 2.2. 变量 8 2.2.1. 变量声明 8 2.2.2. 类型零值 12 2.2.3. 指针 13 2.3. 赋值 17 2.4. 包和文件 17 2.5. 作用域 18 2.6. 语句 19 2.7. 比较运算符 20 2.8. 类型转换 21 2.9. 控制流 23 2.9.1. If 23 2.9.2. Goto 24 2.9.3. For 25 2.9.4. Switch 25 2.9.5. break语句 31 2.9.6. Continue语句 31 3. 基础数据类型 31 3.1. golang类型 31 3.2. Numeric types 32 3.3. 字符串 33 3.3.1. 什么是字符串 33 3.3.2. 字符串底层概念 35 3.3.3. 获取每个字节 38 3.3.4. Rune 39 3.3.5. 字符串的 for range 循环 40 3.3.6. 用字节切片构造字符串 41 3.3.7. 用rune切片构造字符串 42 3.3.8. 字符串的长度 42 3.3.9. 字符串是不可变的 42 3.3.10. UTF8(go圣经) 43 3.4. 常量 45 3.4.1. 常量定义 45 3.4.2. 常量类型 46 3.4.3. Iota 46 4. 组合数据类型 47 4.1. 数组 47 4.1.1. 数组概述 47 4.1.2. 数组的声明 49 4.1.3. 数组的长度 50 4.1.4. 遍历数组 50 4.1.5. 多维数组 51 4.2. 切片 52 4.2.1. 什么是切片 52 4.2.2. 切片概述 55 4.2.3. 创建一个切片 55 4.2.4. 切片遍历 57 4.2.5. 切片的修改 58 4.2.6. 切片的长度和容量 60 4.2.7. 追加切片元素 62 4.2.8. 切片的函数传递 65 4.2.9. 多维切片 66 4.2.10. 内存优化 67 4.2.11. nil slice和empty slice 69 4.2.12. For range 70 4.3. 结构 71 4.3.1. 什么是结构体? 71 4.3.2. 结构体声明 73 4.3.3. 结构体初始化 77 4.3.4. 嵌套结构体(Nested Structs) 81 4.3.5. 匿名字段 82 4.3.6. 导出结构体和字段 84 4.3.7. 结构体相等性(Structs Equality) 85 4.4. 指针类型 86 4.5. 函数 87 4.6. map 87 4.6.1. 什么是map 87 4.6.2. 声明、初始化和make 89 4.6.3. 给 map 添加元素 91 4.6.4. 获取 map 中的元素 91 4.6.5. 删除 map 中的元素 92 4.6.6. 获取 map 的长度 92 4.6.7. Map 的相等性 92 4.6.8. map的排序 92 4.7. 接口 93 4.7.1. 什么是接口? 93 4.7.2. 接口的声明与实现 96 4.7.3. 接口的实际用途 97 4.7.4. 接口的内部表示 99 4.7.5. 空接口 102 4.7.6. 类型断言 105 4.7.7. 类型选择(Type Switch) 109 4.7.8. 实现接口:指针接受者与值接受者 112 4.7.9. 实现多个接口 114 4.7.10. 接口的嵌套 116 4.7.11. 接口的零值 119 4.8. Channel 120 4.9. 类型转换 120 5. 函数 120 5.1. 函数的声明 121 5.2. 一个递归函数的例子( recursive functions) 121 5.3. 多返回值 121 5.4. 命名返回值 121 5.5. 可变函数参数 122 5.6. Defer 123 5.6.1. Defer语句介绍 123 5.6.2. Defer使用场景 128 5.7. 什么是头等(第一类)函数? 130 5.8. 匿名函数 130 5.9. 用户自定义的函数类型 132 5.10. 高阶函数(装饰器?) 133 5.10.1. 把函数作为参数,传递给其它函数 134 5.10.2. 在其它函数中返回函数 134 5.11. 闭包 135 5.12. 头等函数的实际用途 137 6. 微服务创建 140 6.1. 使用net/http创建简单的web server 140 6.2. 读写JSON 144 6.2.1. Marshal go结构到JSON 144 6.2.2. Unmarshalling JSON 到Go结构 146 7. 方法 146 7.1. 什么是方法? 146 7.2. 方法示例 146 7.3. 函数和方法区别 148 7.4. 指针接收器与值接收器 153 7.5. 那么什么时候使用指针接收器,什么时候使用值接收器? 155 7.6. 匿名字段的方法 156 7.7. 在方法中使用值接收器 与 在函数中使用值参数 157 7.8. 在方法中使用指针接收器 与 在函数中使用指针参数 159 7.9. 在非结构体上的方法 161 8. 并发入门 162 8.1. 并发是什么? 162 8.2. 并行是什么? 162 8.3. 从技术上看并发和并行 163 8.4. Go 对并发的支持 164 9. Go 协程 164 9.1. Go 协程是什么? 164 9.2. Go 协程相比于线程的优势 164 9.3. 如何启动一个 Go 协程? 165 9.4. 启动多个 Go 协程 167 10. 信道channel 169 10.1. 什么是信道? 169 10.2. 信道的声明 169 10.3. 通过信道进行发送和接收 169 10.4. 发送与接收默认是阻塞的 170 10.5. 信道的代码示例 170 10.6. 信道的另一个示例 173 10.7. 死锁 174 10.8. 单向信道 175 10.9. 关闭信道和使用 for range 遍历信道 176 11. 缓冲信道和工作池(Buffered Channels and Worker Pools) 179 11.1. 什么是缓冲信道? 179 11.2. 死锁 182 11.3. 长度 vs 容量 183 11.4. WaitGroup 184 11.5. 工作池的实现 186 12. Select 188 12.1. 什么是 select? 188 12.2. 示例 189 12.3. select 的应用 190 12.4. 默认情况 190 12.5. 死锁与默认情况 191 12.6. 随机选取 191 12.7. 这下我懂了:空 select 191 13. 文件读写 191 13.1. GoLang几种读文件方式的比较 197 14. 个人 197 14.1. ++,-- 198 14.2. 逗号 198 14.3. 未使用的变量 199 14.4. Effective go 199 14.4.1. 指针 vs. 值 199 14.5. 可寻址性-map和slice的区别 201 14.5.1. slice 201 14.5.2. map 202 14.6. golang库 203 14.6.1. unicode/utf8包 203 14.6.2. time包 205 14.6.3. Strings包 205 14.6.4. 输入输出 212 14.6.5. 正则处理 224 14.6.6. Golang内建函数 226

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小何同学

不需要打赏,关注公号即可

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值