精华内容
参与话题
问答
  • 黑马go语言视频教程

    千次阅读 2019-05-14 03:24:43
    原文地址:来了,你们要的Go,某马Go语音视频教程 之前分享的视频,Python、Java 的居多,现在好像 Go 很火? 后台一堆找我问我要 Go 的。 这让我左右为难啊 不过还是要迎难而上,对不对? 于是,网上一顿搜,找到...

    原文地址:来了,你们要的Go,某马Go语音视频教程

    之前分享的视频,Python、Java 的居多,现在好像 Go 很火?

    后台一堆找我问我要 Go 的。

    这让我左右为难啊

    不过还是要迎难而上,对不对?

    于是,网上一顿搜,找到了一堆

    我又进行了筛选

    最终确定了一份看着还不错的视频教程

    目录

    嗯,又是黑马的

    ├─第1天视频(基本类型、流程控制)
    │          01_课程安排
    │          02_go介绍
    │          03_环境搭建
    │          04_帮助文档的使用
    │          05_第一个go程序
    │          06_命令行运行程序
    │          07_数据类型作用和命名规范
    │          08_变量的声明
    │          09_变量初始化和自动推导类型
    │          10_自动推导类型和赋值区别
    │          11_Printf和Println的区别
    │          12_多重赋值和匿名变量
    │          13_常量的使用
    │          14_多个变量或变量的定义
    │          15_iota枚举
    │          16_类型的分类
    │          17_bool类型
    │          18_浮点型
    │          19_字符类型
    │          20_字符串类型
    │          21_字符和字符串的区别
    │          22_复数类型
    │          23_格式化输出
    │          24_变量的输入
    │          25_类型转换
    │          26_类型别名
    │          27_运算符(上)
    │          28_运算符(下)
    │          29_if的使用
    │          30_if支持初始化语句
    │          31_if_elseif_else的使用
    │          32_switch的使用
    │          33_switch使用的补充
    │          34_for循环的使用
    │          35_range的使用
    │          36_break和continue的区别
    │          37_goto的使用
    │          
    ├─第2天视频(函数、工程管理)
    │          01_昨日回顾
    │          02_无参无返回值函数的使用
    │          03_有参无返回值函数:普通参数列表
    │          04_不定参数类型
    │          05_不定参数的传递
    │          06_有参无返回值函数使用的总结
    │          07_函数只有一个返回值
    │          08_函数有多个返回值
    │          09_函数定义格式总结
    │          10_有参有返回值函数的使用
    │          11_普通函数的调用流程
    │          12_递归函数的调用流程
    │          13_通过递归实现的累加
    │          14_函数类型
    │          15_回调函数
    │          16_匿名函数基本语法
    │          17_闭包捕获外部变量特点
    │          18_闭包的特点
    │          19_defer的使用
    │          20_多个defer的执行顺序
    │          21_defer和匿名函数结合使用
    │          22_获取命令行参数
    │          23_局部变量特点
    │          24_全局变量
    │          25_不同作用域的同名变量
    │          26_工作区介绍
    │          27_导入包的使用
    │          28_工程管理:同级目录
    │          29_工程管理:不同目录
    │          30_init函数的介绍
    │          31_go_intall命令的使用
    │          
    ├─第3天视频(复合类型)
    │          01_昨日回顾
    │          02_变量的内存和变量的地址
    │          03_指针变量的基本使用
    │          04_不要操作没有合法指向的内存
    │          05_new函数的使用
    │          06_值传递
    │          07_地址传递
    │          08_为什么需要数组
    │          09_数组的基本操作
    │          10_数组初始化
    │          11_二维数组的介绍
    │          12_数组比较和赋值
    │          13_随机数的使用
    │          14_冒泡排序原理
    │          15_冒泡排序代码实现
    │          16_数组做函数参数是值拷贝
    │          17_数组指针做函数参数
    │          18_切片介绍
    │          19_数组和切片区别
    │          20_切片的创建
    │          21_切片截取
    │          22_切片和底层数组关系
    │          23_append函数的使用
    │          24_append扩容特点
    │          25_copy的使用
    │          26_切片做函数参数
    │          27_猜数字:产生一个随机的4位数
    │          28_猜数字:取出每一位数
    │          29_猜数字:输入一个4位数并取出每一位
    │          30_猜数字:逻辑处理
    │          31_map介绍
    │          32_map的基本操作
    │          33_map赋值
    │          34_map遍历
    │          35_map删除
    │          36_map做函数参数
    │          37_结构体普通变量初始化
    │          38_结构体指针变量初始化
    │          39_结构体成员的使用:普通变量
    │          40_结构体成员的使用:指针变量
    │          41_结构体比较和赋值
    │          42_结构体做函数参数:值传递
    │          43_结构体做函数参数:地址传递
    │          44_go语言可见性规则验证
    │          
    ├─第4天视频(面向对象编程)
    │          01_昨日回顾
    │          02_面向对象编程
    │          03_匿名字段作用
    │          04_匿名字段初始化
    │          05_成员操作
    │          06_同名字段
    │          07_非结构体匿名字段
    │          08_结构体指针类型匿名字段
    │          09_方法介绍
    │          10_面向过程和面向对象函数区别
    │          11_结构体类型添加方法
    │          12_方法使用总结
    │          13_值语义和引用语义
    │          14_指针类型和普通类型的方法集
    │          15_方法的继承
    │          16_方法的重写
    │          17_方法值
    │          18_方法表达式
    │          19_接口类型介绍
    │          20_接口的定义和实现
    │          21_多态的表现
    │          22_接口继承
    │          23_接口转换
    │          24_空接口
    │          25_通过if实现类型断言
    │          26_通过switch实现类型断言
    │          
    ├─第5天视频(异常、文本文件处理)
    │          01_昨日回顾
    │          02_error接口的使用
    │          03_error接口的应用
    │          04_显式调用panic函数
    │          05_数组越界导致panic
    │          06_recover的使用
    │          07_字符串操作常用函数介绍
    │          08_字符串操作代码验证
    │          09_字符串转换
    │          10_正则表达式(上)
    │          11_正则表达式(中)
    │          12_正则表达式(下)
    │          13_json介绍
    │          14_通过结构体生成json
    │          15_struct_tag的使用
    │          15_通过map生成json
    │          16_json解析到结构体
    │          17_json解析到map
    │          18_文件分类和为什么需要文件
    │          19_文件常用操作接口介绍
    │          20_标准设备文件的使用
    │          21_WriteString的使用
    │          22_Read的使用
    │          23_借助bufio实现按行读取内容
    │          24_文件案例:拷贝文件
    │          
    ├─第6天视频(并发编程)
    │          01_昨日回顾
    │          02_并行和并发的区别
    │          03_go语言并发优势
    │          04_创建goroutine
    │          05_主协程先退出
    │          06_主协程先退出导致子协程没来得及调用
    │          07_runtime.Gosched的使用
    │          08_runtime.Goexit的使用
    │          09_runtime.GOMAXPROCS的使用
    │          10_多任务资源竞争问题
    │          11_channel介绍
    │          12_通过channel实现同步
    │          13_通过channel实现同步和数据交互
    │          14_无缓冲channel
    │          15_有缓冲channel
    │          16_关闭channel
    │          17_通过range遍历channel内容
    │          18_单向channel特点
    │          19_单向channel的应用
    │          20_Timer的使用
    │          21_Timer实现延时功能
    │          22_定时器停止
    │          23_定时器重置
    │          24_Ticker的使用
    │          25_select的作用
    │          26_通过select实现斐波那契数列
    │          27_通过select实现斐波那契数列(画图)
    │          28_select实现的超时机制
    │          
    ├─第7天视频(网络概述、socket编程)
    │          01_昨日回顾
    │          02_网络协议介绍
    │          03_分层模型介绍
    │          04_层和协议
    │          05_mac地址介绍
    │          06_网络层的作用
    │          07_传输层作用
    │          08_应用层功能
    │          10_网络通信条件
    │          11_通信过程如何组包和拆包
    │          12_socket简单介绍
    │          13_cs模型介绍
    │          14_TCP服务器代码编写
    │          15_netcat工具的使用
    │          16_TCP客户端代码编写
    │          17_简单版并发服务器
    │          18_客户端即可输入也可接收服务器回复
    │          19_文件传输原理分析
    │          20_os.Stat的使用
    │          21_传输文件:发送方
    │          22_传输文件:接收方
    │          23_传输文件功能验证
    │          24_并发聊天服务器功能演示
    │          25_并发聊天服务器原理分析
    │          26_并发聊天服务器:广播上线
    │          27_并发聊天服务器:广播消息
    │          28_并发聊天服务器:查询在线用户
    │          29_并发聊天服务器:修改用户名
    │          30_并发聊天服务器:用户主动退出
    │          31_并发聊天服务器:超时处理
    │          
    ├─第8天视频(HTTP编程)
    │          01_昨日回顾
    │          02_web工作流程
    │          03_http协议和url介绍
    │          03_请求包和响应包简单介绍
    │          04_请求报文格式分析
    │          05_服务器如何知道用户需要什么资源
    │          06_响应报文测试方法
    │          07_响应报文格式分析
    │          08_http编程介绍
    │          09_http服务器编程
    │          10_http服务器获取客户端的一些信息
    │          11_http客户端编程
    │          12_百度贴吧小爬虫
    │          13_百度贴吧小爬虫总结
    │          14_并发版网络爬虫
    │          15_段子爬虫:明确目标
    │          16_段子爬虫:爬主页面有用链接
    │          17_段子爬虫:爬取段子页面
    │          18_段子爬虫:把内容存储到文件中
    │          19_段子爬虫:并发爬虫
    │
    ├─第9天视频(图形界面编程)
    │          
    │          01. 课程安排
    │          02. GTK介绍
    │          03. 环境搭建
    │          04. 第一个程序:空白窗口
    │          05. 控件介绍
    │          06. 窗口添加控件
    │          07. 信号介绍
    │          08. 信号处理
    │          09. glade介绍
    │          10. glade的使用
    │          11. 常用控件:窗口
    │          12. 常用控件:标签
    │          13. 常用控件:图片控件
    │          14. 常用控件:进度条
    │          15. 常用控件:按钮
    │          16. 常用控件:行编辑
    │          17. 布局(上)
    │          18. 布局(下)
    │          19. 对话框
    │          20. 定时器介绍
    │          21. 定时器的使用
    │          22. 鼠标点击事件
    │          23. 鼠标移动事件
    │          24. 键盘事件
    │          25. 大小改变事件
    │          26. 绘图介绍
    │          27. 绘图(上)
    │          28. 绘图(下)
    │          29. 无边框窗口移动
    │          
    ├─第10天视频(案例:黑白棋)
    │          
    │          01. 昨日回顾
    │          02. 游戏说明(1)
    │          03. 无边框窗口(上)
    │          04. 无边框窗口(下)
    │          05. 背景图_最小化_关闭窗口(上)(1)
    │          06. 背景图_最小化_关闭窗口(下)
    │          07. 界面其它设计
    │          08. 黑白子提示闪动效果
    │          09. 落子原理说明
    │          10. 落子代码实现(上)
    │          11. 落子代码实现(下)
    │          12. 初始化棋子_改变角色
    │          13. 倒计时
    │          14. 吃子
    │          15. 棋子个数统计
    │          16. 胜负判断
    │          17. 机器落子
    

    嗯,又是黑马的

    视频初始版本是 8 天的教程,但是后来又发现有 10 天的。

    其实 9、10 两天是另外的一个课程:Go 图形化编程部分。

    老师还是一个老师,熟悉的口音

    这次一起给大家了!

    试听感受

    老师口音挺重

    比如,「闭包的概念」–>「闭包的概练」,了解了?

    还有一个特色,喜欢尾音带「得啦~」

    应该是南方人

    视频截图:

    获取方式

    关注下方公众号,后台回复【010】领取吧

    声明:以上所有资源均来自网络,如有侵权,请联系本人删除。


    你的关注是对我最大的鼓励!

    关注本公众号,后台回复「2018」即可获取传智播客 2018 最新 Python 和 Java 教程。

    公众号提供CSDN资源免费下载服务!


    展开全文
  • ├─Go Web基础 ││Go Web基础-课堂讲义.pptx 147KB ││【Go Web基础】01博客项目设计.rar 24.57MB ││【Go Web基础】02初窥 Web 开发.rar 45.58MB ││【Go Web基础】03模板用法讲解.rar 47.29MB ││【Go Web...

    课程目录 

    ├─Go Web基础
    │  │  Go Web基础-课堂讲义.pptx     147KB
    │  │  【Go Web基础】01博客项目设计.rar     24.57MB
    │  │  【Go Web基础】02初窥 Web 开发.rar     45.58MB
    │  │  【Go Web基础】03模板用法讲解.rar     47.29MB
    │  │  【Go Web基础】04登录及分类管理.rar     52.41MB
    │  │  【Go Web基础】05文章的添加与删除.rar     57.51MB
    │  │  【Go Web基础】06评论与分类显示.rar     47.92MB
    │  │  【Go Web基础】07为文章添加标签.rar     50.85MB
    │  │  【Go Web基础】08文章附件上传.rar     36.89MB
    │  │  【Go Web基础】09国际化支持.mp4     322.24MB
    │  │  【Go Web基础】10自建 HTTP 中间件.mp4     354.93MB
    │  │  【Go Web基础】11简易的 RPC 实现.mp4     343.44MB
    │  │  【Go Web基础】12Go Web 扩展学习.mp4     196.55MB
    │  │
    │  └─MP4 在线播放
    │          【Go Web基础】01博客项目设计.mp4     144.12MB
    │          【Go Web基础】02初窥 Web 开发.mp4     256.08MB
    │          【Go Web基础】03模板用法讲解.mp4     205.67MB
    │          【Go Web基础】04登录及分类管理.mp4     278.18MB
    │          【Go Web基础】05文章的添加与删除.mp4     352.5MB
    │          【Go Web基础】06评论与分类显示.mp4     315.88MB
    │          【Go Web基础】07为文章添加标签.mp4     316.24MB
    │          【Go Web基础】08文章附件上传.mp4     232.12MB

    ├─Go名库讲解
    │  ├─00-introduction
    │  │      《Go名库讲解》00-introduction 课程讲义.pdf     1.36MB
    │  │      《Go名库讲解》00-课程学习指南.zip     251.86MB
    │  │
    │  ├─01-goconfig
    │  │  └─class1
    │  │      │  《Go名库讲解》01-goconfig 课时1 课程讲义.pdf     1.4MB
    │  │      │  《Go名库讲解》01-goconfig 课时1:goconfig 使用解析.zip     918.87MB
    │  │      │  课后作业.zip     2KB
    │  │      │
    │  │      └─作业讲解
    │  │              code.zip     637B
    │  │              《Go名库讲解》goconfig - 课时 1 作业讲解.zip     227.11MB
    │  │
    │  ├─02-xorm
    │  │  ├─class1
    │  │  │      《Go名库讲解》02-xorm 课时1 课程讲义.pdf     1.4MB
    │  │  │      《Go名库讲解》02-xorm 课时1:常见用法指导.zip     1.38GB
    │  │  │
    │  │  └─class2
    │  │          《Go名库讲解》02-xorm 课时2 课程讲义.pdf     1.4MB
    │  │          《Go名库讲解》02-xorm 课时2:高级用法讲解.zip     1.06GB
    │  │
    │  ├─03-goconvey
    │  │  └─class1
    │  │          《Go名库讲解》03-goconvey 课时1 课程讲义.pdf     1.47MB
    │  │          《Go名库讲解》03-goconvey 课时1:优雅的单元测试.mp4     66.74MB
    │  │
    │  └─04-macaron
    │      ├─class1
    │      │      《Go名库讲解》04-macaron 课时1 课程讲义.pdf     1.58MB
    │      │      《Go名库讲解》04-macaron 课时1:初识 Macaron.mp4     68.74MB
    │      │
    │      └─class2
    │              《Go名库讲解》04-macaron 课时2 课程讲义.pdf     1.46MB
    │              《Go名库讲解》04-macaron 课时2:核心服务的使用.mp4     92.44MB

    └─Go编程基础
    │  Go编程基础-课堂讲义.pptx     495KB
    │  【Go编程基础】01Go开发环境搭建.rar     27.11MB
    │  【Go编程基础】02Go基础知识.rar     17.6MB
    │  【Go编程基础】03类型与变量.rar     42.03MB
    │  【Go编程基础】04常量与运算符.rar     35.36MB
    │  【Go编程基础】05控制语句.rar     34.44MB
    │  【Go编程基础】06数组array.rar     25.88MB
    │  【Go编程基础】07切片slice.rar     40.24MB
    │  【Go编程基础】08map.rar     27.08MB
    │  【Go编程基础】09函数function.rar     32.05MB
    │  【Go编程基础】10结构struct.rar     47.88MB
    │  【Go编程基础】11方法method.rar     24.42MB
    │  【Go编程基础】12接口interface.rar     30.5MB
    │  【Go编程基础】13反射reflection.rar     28.19MB
    │  【Go编程基础】14并发concurrency.rar     44.16MB
    │  【Go编程基础】15项目与坑.rar     28.64MB

    └─MP4 在线播放
    【Go编程基础】01Go开发环境搭建.mp4     162.25MB
    【Go编程基础】02Go基础知识.mp4     82.45MB
    【Go编程基础】03类型与变量.mp4     175.93MB
    【Go编程基础】04常量与运算符.mp4     155.1MB
    【Go编程基础】05控制语句.mp4     158MB
    【Go编程基础】06数组array.mp4     116.74MB
    【Go编程基础】07切片slice.mp4     196.7MB
    【Go编程基础】08map.mp4     144.2MB
    【Go编程基础】09函数function.mp4     131.07MB
    【Go编程基础】10结构struct.mp4     236.48MB
    【Go编程基础】11方法method.mp4     90.99MB
    【Go编程基础】12接口interface.mp4     160.17MB
    【Go编程基础】13反射reflection.mp4     142.84MB
    【Go编程基础】14并发concurrency.mp4     224.88MB
    【Go编程基础】15项目与坑.mp4     138.47MB

    下载地址:百度云盘

    展开全文
  • 04 Go语言实战开发一个WEB项目博客系统05 Go语言深度讲解(推荐 2018年1月更新)06 Go语言快速入门(2018年2月更新)07 Go语言协程流量统计(2018年3月更新)08 Go语言入门到实战视频教程(2018年3月更新)09 Go语言...
  • Go 编程语言是一个使得程序员更加有效率的开源项目。Go 是有表 达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核 和网络应用,而新的类型系统允许构建有性的模块化程序。Go 编译到机器码非常...
  • Go语言入门教程(一)

    2019-09-25 10:10:55
    GO语言发展史 Go语言是2009年11月,由谷歌公司发布的一款强静态类型、编译型语言。它具有C语言的语法特性,但功能上又具备内存安全,垃圾回收,结构形态和并行计算等特点。 对于广大的开发者的一个福音是go完全开源...

    GO语言发展史

    Go语言是2009年11月,由谷歌公司发布的一款强静态类型、编译型语言。它具有C语言的语法特性,但功能上又具备内存安全,垃圾回收,结构形态和并行计算等特点。

    对于广大的开发者的一个福音是go完全开源。在云原生,云计算的今天,Go语言又被称之为云计算时代的C语言,它诞生的目的是为了让广大程序员们具有快速的开发效率,因为它专门针对多处理器系统应用应用程序提供了优化。

    GO语言的优势

    1、go具有天然的并发优势,特别是针对于高并发,多线程的开发,它能够完美并且简单的大显身手。

    2、他可以直接编译成机器码,不依赖其他库,也无需像java一样需要安装虚拟机进行过渡。

    3、具有丰富的标准库,特别是网络库这一块非常强大。

    4、高度活跃的社区群,一个语言发展自然离不开社区的支持,Go语言具有良好且活跃的社区,各类高手纷纷为Go语言的丰富增砖添瓦。

    5、Go语言内置强大的工具,例如fmt 自动化格式代码,能够让团队成员的codereview 变得简单,且格式统一。

    GO的应用场景

    1、服务器编程,以前你如果使用C或者C 做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。

    2、分布式系统,数据库代理器等。

    3、网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用。

    4、内存数据库,如google开发的groupcache,couchbase的部分组建。

    5、云平台,例如现目前很火爆的k8s 也是利用go语言进行开发完成

    当然讲了这么多,那么小编接下来针对Go语言为大家带来go语言的入门到精通的编程系列教程。当然也是希望大家能够勤学多练,一步一个脚印。

    MON
    04

    GO的搭建环境

    总所周知,要学习任何一门语言,首先的就是要先安装运行环境,当然go语言也不例外,首先我们需要下载Go语言的安装包,如图所示:
    file

    这里go为大家提供了不同平台的版本,由于我这里所使用的是windows版本的,所以下载的是widows 64位。

    下载好之后一路双击msi,然后按照步骤一路点点点即可(PS:值得注意的点是安装路径不要有中文名)。直到这里go语言的安装已经完成了80%了,是不是很简单。

    接下来的重点就是为大家介绍一下go语言的环境变量了,go语言中常用的配置变量有两个GOROOT和GOPATH,当然也存在其他的变量。

    1、GOROOT:go的安装目录,配置后不会再更改;

    file

    2、PATHgobinPATH:需要将go的bin目录添加到系统PATH中以便方便使用go的相关命令,配置后也不会再更改;

    file

    3、$GOPATH:go项目在本地的开发环境的的项目根路径(以便项目编译,go build, go install),不同的项目在编译的时候该环境变量可以不同,当然GOPATH可以有一个或者多个的存在,但是GOROOT只能有一个。

    file

    当我们配置好环境变量后,小伙伴们就可以运行cmd命令查看go语言的环境是否安装完成了。

    运行命令 go version 之后,如果出现以下的画面,那么就代表各位已经成功安装好环境,我们就可以愉快的进行Go语言的代码编写啦!

    file

    GO的代码工具

    针对于go语言的开发,开发工具有很多,例如:

    1、LiteIDE 是一款开源、跨平台的轻量级 Go 语言集成开发环境(IDE)。

    2、eclipse 但是在eclipse上进行go语言的开发,需要下载插件

    3、GoLand (推荐)GoLand 是 Jetbrains 家族的 Go 语言 IDE,专门为Go语言开发而成,非常好用,以后小编的代码讲解也是基于goland 为大家讲解。

    加餐时间:因为Go语言是非常强大的一门语言,所以内置了很多处理go语言代码的命令和工具,这里常用一些命令给小伙伴罗列出来,以防不时之需。

    build:用于编译给定的代码包或Go语言源码文件及其依赖包。
    clean:用于清除执行其他go命令后遗留的目录和文件。
    doc:用于执行godoc命令以打印指定代码包。
    env:用于打印Go语言环境信息。
    fix:用于执行go tool fix命令以修正给定代码包的源码文件中包含的过时语法和代码调用。
    fmt:用于执行gofmt命令以格式化给定代码包中的源码文件。
    get:用于下载和安装给定代码包及其依赖包(提前安装git或hg)。
    list:用于显示给定代码包的信息。
    run:用于编译并运行给定的命令源码文件。
    install:编译包文件并编译整个程序。
    test:用于测试给定的代码包。
    tool:用于运行Go语言的特殊工具。
    version:用于显示当前安装的Go语言的版本信息。

    今天的分享就到此结束了,我们了解到了关于go语言的发展和优势,然后又对go语言的开发环境进行了讲解,下节课我将为大家带来精心准备的Go语言教程系列之初窥门径。

    展开全文
  • go语言高级教程 pdf

    2018-08-28 08:48:00
    go语言高级教程
  • 【千锋Go】最全的Go语言教程(64集)视频没有加密
  • Go语言简明教程

    千次阅读 2016-12-05 10:44:32
    Go语言简明教程

    Go语言简明教程


    简介

    创立时间

    2007年 google作为20%项目开始研发
    2009年11月10日 开源,获得TIOBE年度语言
    2012年3月28日 发布Go1.0版本
    2016年8月18日 发布Go1.7版本

    创始人

    Robert Griesemer (V8,Chubby,HotSpot JVM)
    Rob Pike(Unix,UTF-8,plan9)
    Ken Tompson(B语言、C语言、Unix之父,图灵奖)
    lan Lance Taylor(GCC)
    Brad Fitzpatrick(Memcache,HTTP2)

    吉祥物

    gopher:囊地鼠(产自北美的一种地鼠)
    (https://github.com/golang/go/blob/master/doc/gopher/favicon.svg)

    设计初衷

    设计Go语言是为了解决当时Google内部开发的一些痛点
    所处的环境:

    1. 大量的C++代码,同时又引入了Java和Python
    2. 成千上万的工程师(C系为主)
    3. 分布式的编译系统
    4. 数以百万记行的代码
    5. 数以万记的服务器

    遇到的问题是:

    1. 新的C-like语言需求
    2. 语法繁杂、代码难以维护
    3. 失控的依赖
    4. 编译速度慢
    5. 交叉编译困难、难以部署

    所以Go语言是一门工程上的实用主义语言

    特点

    • C-like 语法风格
    • 强一致类型(静态语言)
    • struct组合复杂类型
    • function和Method
    • 没有异常处理(Error is value)
    • 基于首字母的访问控制
    • 多余的import和变量会引起编译错误
    • 内置GC
    • 完备的标准库包(网络编程、系统编程、互联网应用)
    • 支持各种编程范式:过程式编程、面向对象编程、函数式编程

    语言要素

    标识符

    • 代表一个变更或者一个类型,可以被看作是变量或者类型的代号或者名称
    • 若干字母、下划线(_)和数字组成的字符序列,第一个字符必须为字母
    • 在一个代码块中,不允许重复声明同一个标识
    • 预定义标识符
      • 所有基本数据类型的名称
      • 接口类型 error
      • 常量 true、false 以及 iota
      • 所有内置函数的名称,即 append、cap、close、complex、copy、delete、imag、len、make、new、panic、print、println、real和 recover

    关键字

    • 又称保留字,不允许被使用为标识符
    • 25个关键字:
    break default func interface select
    case defer go map struct
    chan else goto package switch
    const fallthrough if range type
    continue for import return var

    - 程序声明:import、package
    - 程序实体声明和定义:chan、const、func、interface、map、struct、type、var
    - 程序流程控制:go、select、break、case、continue、default、defer、else、fallthrough、for、goto、if、range、return、switch

    字面量

    • 表示值的一种标记法
    • 用于表示基础数据类型值的各种字面量
      • 数字 2016,1e9,1+2i
      • 字符串 “iota”
      • 布尔值 true,false
    • 用户构造各种自定义的复合数据类型的类型字面量
    type Person struct {
        Name string
        Age uint8
        Address string
    }
    • 用于表示复合数据类型的值的复合字面量
      • struct,array,slice,map构造的值
      • Person{Name: “Eric Pan”, Age: 28, Address: “Beijing China”}

    操作符和分隔符

    + & += &= && == != ( )
    - | -= |= || < <= [ ]
    * ^ *= ^= <- > >= { }
    // << /= <<= ++ = := , ;
    % >> %= >>= ! . :
    &^ &^=

    优先级

    优先级 操作符
    5 * / % << >> & &^
    4 + - | ^
    3 == != < <= > >=
    2 &&
    1 ||

    类型

    • 基本类型
      • bool
      • int/uint
      • int8/uint8/byte
      • int16/uint16
      • int32/uint32/rune
      • int64/uint64
      • float32/float64
      • complex64/complex128
      • string
    • 复杂类型
      • Array
      • Slice
      • Map
      • Struct
      • Interface
      • Function
      • Channel
      • Pointer
    • 潜在类型
        type MyString string //MyString是实际类型,string是潜在类型
    
    • 静态类型和动态类型
      除了interface都为静态类型,interface
      的动态性体现在运行时与该interface变量绑定在一起的值的实际类型

    语法

    变量/常量定义

        var v Type
        var v Type = value
        var v = value
        var v1,v2,v3 Type
        var v1,v2,v3 Type = value1,value2,value3
        var v1,v2,v3= value1,value2,value3
        v1,v2,v3:= value1,value2,value3
        i,j = j,i
    //Tips::=为简短声明,编译器根据初始化的值自动推断相应的类型,但是不能定义在函数外部使用。
        const cname = value
        const cname type  = value
    //Tips:声明但未使用的变量会在编译阶段报错。
        //声明分组
        import(
        “fmt”
        “os”
    )
    const(
        s = “string”
        pi = 3.1415
        pi2
    )
    var(
        i int
        pi float32 = 3.1415
    )
    
    iota枚举:为分组中iota++
    const(
    a = 1+iota*2
    b
    c = “iota”
    d
    )
    

    array & slice

    array定义

        var a [2]int = [2]int{1,2}  
        a := [2]int{1,2}    
        a := [...]int{1,2,3,4}
        a2 := [2][3]int{[3]int{1,2,3},[3]int{3,2,1}}    
        a2 := [2][3]int{{1,2,3},{3,2,1}}
    

    slice定义

    slice是引用类型

        var s []int  = make([]int,n)
        s := []int{v1,v2,v3}
    

    slice操作

        copy(dst,src []Type)int //dst必须初始化完成,长度根据需要初始化
        append(slice []Type,elems ...Type)[]Type
        len(slice []Type)int
        cap(slice []Type)int
    

    slice切片操作

        s[:j] == s[0:j]
        s[i:] == s[i:len(s)]
        s[i:j]:包含index区间为[i,j)s的元素
        //不能代替array和slice的copy操作,切片后是原数据的引用
    

    map

    引用类型,无序,长度不定,非线程安全

    var m map[keyType]valueType //keyType可以是string及完全定义了==/!=操作的类型
    m := make(map[keyType]valueType)
    m:=map[keyType]valueType{k1:v1,k2:v2,k3:v3}
    len(m map[keyType]valueType)int
    delete(m map[Type]Type1,key Type)
    

    channel

    引用类型,goroutine之间通信的通道

        c := make(chan Type,n)//不初始化为nil
        c 

    单向channel

        var c chan

    channel操作

        close(ch)
        /*
    关闭一个已关闭的channel会导致panic
    向已关闭的channel中写数据会导致panic
    从已关闭的channel中读数据不会导致panic   
    v,ok := 

    流程控制

    if/else

        if x := getX();x > 0{
        //...
    }else if x == 0{
        //...
    }else{
        //...
    }//依次逐条匹配,若匹配则进入逻辑块
    

    switch/case

    case e1:
        //...
    case e2,e3:
        //...
        fallthrough
    default:
        //...
    }
    //sExpr需要和case的expr类型一致,如果sExpr不存在,则比较类型为bool,只有true可以被匹配
    

    for

    for e1;e2;e3{
    }
    for expression{
    }
    //for + range 遍历slice和map数据
    

    break:跳出当前循环,可以配合标签使用
    continue:跳过本次循环,可以配合标签使用
    for+range 遍历array/slice/map/string,循环接收channel中的数据

    Range expression 1st value 2nd value
    array or slice a [n]E, *[n]E, or []E index i int a[i] E
    string s string type index i int see below rune
    map m map[K]V key k K m[k] V
    channel c chan E, <-chan E element e E

    select

    多channel的场景中,使用select机制,监听各个channel上的数据流动,默认阻塞,当监听的channel中有发送或可接收时才会工作,所有channel都准备好时,随机选择一个执行

        select{
            case c1

    goto

    func myFunc(){
        i := 0
    Here:
        i++
        goto Here
    }
    

    函数

    声明

        func funcName(input1 Type,input2 Type)([output1] Type,[output2] Type){
        return value1,value2
    }
    

    只有一个返回值且不声明返回变量,返回值的括号可以省略
    没有返回值可以省略包括返回值的括号,且可以不需要return
    如果有复数个相同Type的参数或返回值,可以省略重复Type声明,比如(a int,b int) =>(a,b int)
    如果函数是导出的,建议命名返回值,提高可读性

    变参

    func funcName(arg ...Type){}
    //arg为[]Type
    

    支持多值返回

    传值和传指针

    使用指针类型传参
    可以共同操作同一对象
    传指针很轻量级,8B(64位机),对一些大的struct,在copy上会花费较多的系统开销

    匿名函数和闭包

    First-class value:可以作为别的函数的参数、返回值,可以赋值给变量,或者成为类型,函数式编程范式

    func adder() func(int) int {
         sum := 0
         return func(x int) int {
              sum += x
              return sum
         }
    }
    

    特殊函数

    defer函数
    //在函数返回之前,先进后出执行defer语句,一般在需要资源回收的时候使用
    
    main函数
    func main(){
        //...
    }
    //package main中必须包含一个main函数,是程序的入口函数
    
    init函数
    func init(){
     //some init logic...
    }
    /*一个package中最好只写一个init
        1.如果package中需要import其他包,则先导入其他包
        2.所有包import完毕后,依次初始化cons->var->init()
    */
    

    错误处理

    panic

    中断控制流程,之前入栈的defer函数依然会执行,然后返回到被调用的地方,调用方也认为触发了panic行为。依次向上,直到发生panic的goroutine上所有调用函数返回,导致程序退出
    来源:调用panice,runtime error(数组越界,0值除数)

    #

    恢复panic,存在于defer函数中才有效

    面向对象

    struct

    一种自定义用户类型
    初始化

    P := person{“iota”,22} //顺序初始化
    P := person{age:22,name:”iota”} //field:value初始化
    P := new(person) //new初始化
    

    匿名字段
    匿名字段可以是任意内置类型、struct、自定义类型
    匿名字段命名冲突问题:最外层访问优先
    Tag

    method

    • 声明与函数的声明语法几乎一致,但是多了一个receiver部分,表示method依赖的主体
    • “A method is a function with an implicit first argument, called a receiver.”
    • receiver的值传递和引用传递,引用传递相当于OO语言中的this
    • 可以定义在包括struct在内的任何自定义类型(c中的typedef)、内置类型
    • 无论receiver是指针还是值,go都会自动相互转换
    • 继承method后可以重写method
    • 通过声明开头的大小来表明是否可以导出

    interface

    • 一组method签名的组合
    • 如果某个struct实现了某个接口的所有方法,则- 此对象就实现了此接口
    • Any类型:interface{} like void*
    • interface{}的类型转换:
      断言:value,ok = element.(T)
      switch:T := element.(type),这种语法只能在switch代码块中使用,default表示的意义
    • embedded interface
      type ReadWriter interface{
      Reader
      Writer
      }

    package

    • package相当于python中的module
    • 大写字母开头的变量和函数是可导出的,是public的
    • 小写字母开头的变量和函数是不可导出的,是private的
    • import:导入package的方式
      类似树结构的深度优先遍历
      若包已加载,则跳过
      包的初始化顺序:const、var、init()
      依次从GOROOT、GOPATH(可能有多个)寻找目标package
      点import:使用包的导出资源时,可以省略包名
      别名import
      预加载import:不引入包,只是调用该包的init(),比如数据库驱动的加载
    • 禁止循环导入,禁止导入包未使用

    面向对象特性

    • 封装、继承、多态
    • 类的定义
    • interface:动态绑定
    • Any类型:interface{}
    • 包管理:public、private、import

    reflect

    • 检查程序在runtime的状态
    • reflect.Type 类型定义: reflect.TypeOf(v)
      t.Elem().Field(0).Tag
    • reflect.Value 存储的值: reflect.ValueOf(v)
      v.Elem().Field(0).String()
    • Kind():潜在类型的实际类型
    • 若要改变原始变量的值,需要反射变量的指针
      var x float64 = 3.4
      p := reflect.ValueOf(&x)
      v := p.Elem()
      v.SetFloat(7.1)

    并发模型

    • Goroutine:协程、轻量级、底层混合使用nonblockingIO和线程、极小栈内存
    • Channel:功能(传值&同步)读写阻塞
    • Select:同时监听多个channel
    • CSP(Communicating sequential processes)通信顺序进程
    • 通过通信来共享、而不是通过共享来通信

    runtime

    • Goexit:退出当前goroutine,但是defer正常执行
    • Gosched:让出当前goroutine的执行权限,调度器安排其他goroutine执行,并在下次某个时候从该位置恢复执行
    • NumCPU:返回CPU数量
    • NumGoroutine:返回正在执行和排队的任务总数
    • GOMAXPROCS:设置并行计算的最大CPU核数,并返回之前设置的值

    开发环境

    版本

    1.7 截止2016/12

    安装方式

    可执行文件安装
    源码安装

    path

    GOROOT
    GOPATH

    IDE

    • LiteIDE
    • VSCode
    • Sublime Text (Go plugin by offical)
      DEBUG
    • gdb
    • delve
    • log

    go命令

    • go build
    • go clean
    • go run
    • go install
    • go get
    • go tool
    • go doc
    • go env
    • go version

    常用类库

    • 运行时:runtime,runtime/debug,runtime/pprof,runtime/cgo
    • 系统库:os
    • 网络库:net,net/http,net/rpc
    • io操作:io、io/ioutil,
    • 编码库:json,base64,xml
    • 压缩库:gzip
    • 加密库:MD5,SHA-1,SHA-256,aes,des,rsa
    • 同步:sync,sync/atomic
    • 数据库:database/sql

    语言对比

    C/C++

    • 上限高:速度更快、内存利用率高
    • 下限低:内存泄漏、core dump
    • 语言层级没有对并发支持、调用os的并发机制(线程、进程)

    Java

    • 语言繁琐
    • 语言层级的线程并发支持
    • 开发效率低

    PHP/PYTHON/RUBY

    • 开发效率快,但是差距不大
    • 运行速度慢
    • 语言层级裸用os的并发机制

    应用场景

    • 服务中间件
      日志、文件系统
    • 分布式系统、数据库代理器
    • 网络编程
      web应用、api应用、下载应用
    • 数据库
      Groupcache(Google) Couchbase Tidb Cockrouchdb Influxdb
    • 云平台
      CloudFoundy Apcera DaoCloud 七牛云

    优势

    • 学习曲线平滑
    • 容易写出健壮、稳定、高性能的程序
    • 开发效率高(近PHP的开发效率)
    • 运行性能好(近C的运行效率)
    • 语言层级多核并发支持,且简单易用
    • 二进制文件、Copy部署
    • 运行快、开发快、部署快
    展开全文
  • Go的安装与配置 下载Go [^下载地址] : https://golang.google.cn/dl/ 下载完成后,运行.msi文件,然后按照指示进行安装 安装完毕后按Win+R,输入“cmd”打开命令提示符 go version #查看Go的版本 go env #查看Go的...
  • GO 语言结构 Go 语言数据类型 Go 语言变量 第一种,指定变量类型,声明后若不赋值,使用默认值。...GO语言常量 常量的定义格式 iota 特殊常量 Go 语言运算符 条件语句 循环语句 GO语言函数 函数返回多个值 Go ...
  • 04 Go语言实战开发一个WEB项目博客系统05 Go语言深度讲解(推荐 2018年1月更新)06 Go语言快速入门(2018年2月更新)07 Go语言协程流量统计(2018年3月更新)08 Go语言入门到实战视频教程(2018年3月更新)09 Go语言...
  • 这个教程的PDF是英文版的,分Part1 Part2 Part3 ,讲得很易懂,现向大家分享,希望大家喜欢!
  • 首先去官网下载go的安装包,这里用的是:go1.5.1.windows-amd64.msi 安装其实没有什么好说的,我们一路next,采用默认安装,安装在C:\Go下。 这里要说明的是,其实在安装的时候,会自动在系统环境变量里新建一个 ...
  • 我为什么放弃Go语言

    万次阅读 多人点赞 2014-04-14 19:24:19
    我为什么放弃Go语言?有好几次,当我想起来的时候,总是会问自己:这个决定是正确的吗?是明智和理性的吗?其实我一直在认真思考这个问题。开门见山地说,我当初放弃Go语言,就是因为两个“不爽”:第一,对Go语言...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • go语言视频教程系列

    2019-01-22 07:22:29
    go语言视频教程系列
  • 1.1 变量 Go 是静态类型语⾔,不能在运⾏期改变变量类型。使⽤关键字 var 定义变量,⾃动初始化为零值。如果提供初始化值,可省略变量类型,由编译器⾃动推断。var x intvar f float32 = 1.6var s = &...
  • 通过学习go语言视频教程,可以清楚的知道go语言主要用于服务器端开发,其定位是用来开发“大型软件”。学习go语言入门视频教程是十分必要的!它适合许多程序员共同开发大型软件,而且开发周期长,支持云计算网络服务...
  • 这是一套比较全面的视频教程,分享给正在学习或者以后会学习Go语言的各位友友,希望能帮助到你。 〖课程目录〗L001-Go语言 L002-Go语言 L003-Go语言 L004-Go语言 01 Go开发1期 day4 课后作业讲解...
  • 老男孩Go语言18天教程,有视频和源码教程。非常不错哦哦哦

空空如也

1 2 3 4 5 ... 20
收藏数 32,316
精华内容 12,926
关键字:

go语言教程