GithubHelp home page GithubHelp logo

golang-100-days's Introduction

Golang - 100天从新手到大师

作者:韩茹,Davie,Steven

最近有很多小伙伴都在寻找go语言完整学习资料,但是录制视频和教程都需要不少的时间,平时也在筹备Go语言学科的事情,所以时间上比较紧张,我和Davie老师分别负责一部分Golang内容的产出。从技术文章,到视频,到项目代码。也都公布在各大平台上,但是知乎上就只方便看技术文章,B站上就只方便看视频。所以我们在github上上传了我们所有的学习资料,从最基础的入门到项目设计,希望帮助更多想了解和学习Go语言的伙伴,为方便大家交流学习。我们建了学习讨论群组(Go语言学习营:784190273)可以加群进行学习讨论。

因为是持续创作,所以也会持续更新。有些章节目录还没有内容,敬请期待。。

创作不易,感谢大家的支持。如果看后觉得有收获,可以打赏请作者喝咖啡吧,如果有疑问可以进群讨论。

最后感谢千锋教育Go语言教学部的鼎力支持。

WechatIMG723_meitu_1

Go语言应用领域和就业分析

Go语言是谷歌2009年发布的第二款开源编程语言(系统开发语言),它是基于编译、垃圾收集和并发的编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美 C / C++代码的速度,而且更加安全、支持并行进程。作为出现在21世纪的语言,其近C的执行性能和近解析型语言的开发效率,以及近乎于完美的编译速度,已经风靡全球。特别是在云项目中,大部分都使用了Golang来开发。不得不说,Golang早已深入人心。而对于一个没有历史负担的新项目,Golang或许就是个不二的选择。

Golang的哲学理念:“Less is more or less is less”。

  • 学习曲线容易
  • 效率:快速的编译时间,开发效率和运行效率高
  • "出身名门、血统纯正"
  • 自由高效:组合的**、无侵入式的接口
  • 强大的标准库
  • 部署方便:二进制文件,Copy部署
  • 并行和异步编程几乎无痛点

目前几个比较流行的领域,Go都有用武之地。

  • 云计算基础设施领域

    代表项目:docker、kubernetes、etcd、consul、cloudflare CDN、七牛云存储等。

  • 基础软件

    代表项目[tidb、influxdb、cockroachdb等。

  • 微服务

    代表项目:go-kit、micro、monzo bank的typhon、bilibili等。

  • 互联网基础设施

    代表项目:以太坊、hyperledger等。

  • 分布式系统、数据库代理器、中间件等,例如Etcd

  • DevOps - Go / Python / Shell / Ruby

作为一名Go语言开发者,主要的就业领域包括:

  • Golang开发工程师 / Golang研发工程师
  • Golang服务器后台开发 / 游戏服务器开发
  • 云计算平台(golang)开发工程师
  • 区块链开发(golang)工程师
  • Golang架构师

给初学者的几个建议:

  • Make English as your working language.
  • Practice makes perfect.
  • All experience comes from mistakes.
  • Don't be one of the leeches.
  • Either stand out or kicked out.

Day01~15 - Go语言基础

  • Go语言简介 - Go语言的历史 / Go语言核心特性 / Go语言的logo版本 / Go的应用领域

  • Go语言环境搭建 - Windows系统 / Linux系统 / MacOS系统

  • HelloWorld程序 - Go语言文件的结构格式 / fmt包 / Print函数

  • Go的执行原理 - Go的命令

  • 安装IDE - Goland工具 / 其他的IDE

  • 注释 - 注释的作用 / 单行注释 / 多行注释

  • 编码规范

Day02 - 基本语法

  • 进制以及转换 - 计算机原理 / 二进制 / 十进制 / 八进制 / 十六进制 / 进制转换

  • 变量 - 变量的命名 / 变量的使用 / 变量的分析 / 变量的注意事项

  • 常量 - 常量的命名 / 常量的使用 / 常量的分析 / 常量的注意事项 / iota关键字

  • 数据类型 - 整数 / 浮点数 / 复数 / 字符串 / 字符编码

  • 数据类型的转换 - 强制转换 / 自动转换

  • 运算符 - 算术运算符 / 赋值运算符 / 比较运算符 / 逻辑运算符 / 位运算符 / 位移运算符 / 运算符的优先级

  • 表达式 - 表达式的值 / 表达式的类型

  • 键盘输入和打印输出 - Scanln() / Scanf() / Print() / Printf() / Println()

  • 格式化占位符 - %v / %T / %t / %s / %f / % d / %p / %c 。。。

Day04 - 分支语句

  • 分支结构的应用场景 - 条件 / 结构 / 代码块 / 流程图

  • if语句 - 简单的if / if-else结构 / if-elif-else结构 / 嵌套的if / if的其他写法

  • switch语句 - switch的结构 / case语句 / break语句 / fallthrough语句 / switch的其他写法

Day05 - 循环语句

  • 循环结构的应用场景 - 条件 / 结构 / 代码块 / 流程图
  • for循环 - 基本结构 / 循环中的分支结构 / 嵌套的循环 / for的其他写法
  • 循环控制语句 - break / continue
  • goto语句 - goto的结构 / goto的注意点
  • 生成随机数 - 随机数的生成
  • 应用案例 - 1~100求和 / 判断素数 / 猜数字游戏 / 打印九九表 / 打印三角形图案 / 水仙花数 / 百钱百鸡

Day06 - 数组

  • 数组 - 数组的概念 / 数组的使用 / 数组的语法 / 数组的长度 / 数组的注意点

  • 数组的遍历 - 数组的下标 / 普通for遍历数组 / for…range 遍历

  • 数组的排序 - 冒泡排序 / 选择排序 / 插入排序 。。。

  • 多维数组 - 二维数组 / 二维数组的使用 / 二维数组的遍历

  • 数组的数据类型 - 数组是值类型数据

Day07 - 切片

  • 切片 - 切片的概念 / 切片的使用 / 切片的语法 / 切片的长度和容量 / 切片的注意点

  • 切片的原理 - 切片的底层数组 / 已有数组上创建切片 / 截取切片

  • 切片的遍历 - 切片的下标 / 普通for遍历切片 / for…range 遍历

  • 切片相关函数 - make() / append() / copy() / len() / cap()

  • 切片拷贝 - 深拷贝 / 浅拷贝

  • 切片的数据类型 - 切片是引用类型数据

Day08 - Map

  • Map - Map的概念 / Map的使用 / Map的语法 / Map的长度和容量 / Map的注意点

  • Map的存储特点 - key-value / Map的key类型 / Map中的键值对无序

  • Map的创建 - 空Map /

  • Map的操作 - 添加数据 / 修改数据 / 获取数据 / 删除数据

  • Map的数据类型 - Map是引用类型数据

Day09 - string

  • 字符串的使用 - 计算长度 / 下标运算 / 切片 / 常用方法
  • strings包
  • strconv包

Day10 - 函数

  • 函数 - 函数的概念 / 函数的作用

  • 函数的语法 - 定义函数 / 调用函数

  • 函数的参数 - 参数的使用 / 可变参数 / 参数传递

  • 函数的返回值 - 返回值 / return语句 / 没有返回值 / 返回单个值 / 返回多个值

  • 变量作用域 - 局部变量 / 全局变量

  • 递归函数 - 递归算法 / 递归函数实现

  • 函数高级 - 函数的本质 / 匿名函数 / 高阶函数 / 回调函数 / 闭包结构

  • defer函数 - 延迟函数 / 延迟参数 / 堆栈的延迟 / defer注意点

Day11 - 包的管理

  • 包管理 - 包的概念 / 包的定义 / 包的导入 / main包

  • 包的关键字 - package / import

  • 包的导入逻辑 - init()函数 / 同包的多个init()函数 / 不同包的多个init()函数

  • 管理外部包

Day12 - 指针

  • 指针 - 指针的概念 / 获取变量的地址 / 操作指针改变变量

  • 指针的语法 - 定义指针 / * / 获取指针数值 / & / 指针的指针

  • 指针的注意点 - 指针的类型 / 指针的地址 / 空指针

  • 指针的应用 - 指针作为参数 / 指针作为函数的返回值 / 数组指针和指针数组 / 指针函数和函数指针

Day13 - 结构体

  • 结构体 - 结构体的概念 / 结构体的定义 / 结构体的初始化 / 结构体的访问 / make和new
  • 结构体的匿名字段
  • 结构体的嵌套 - 结构体嵌套 / 匿名嵌套 / 提升字段
  • 结构体的使用 - 结构体指针 / 结构体作为函数的参数 / 结构体作为函数的返回值
  • 方法 - 方法的概念 / 方法的使用

  • 方法的语法 - 方法接受者 / 方法和函数

  • 结构体嵌套中的方法 - 方法的"继承" / 方法的"重写"

  • 接口 - 接口的概念 / 接口的使用

  • 接口的语法 - interface / 接口类型

  • 接口的应用 - 空接口 / 类型断言 / type关键字

Day15 - 错误处理

  • 错误 - 错误的概念 / 错误的用法 /

  • 错误的类型 - error接口 / 错误类型表示 / 自定义错误

  • 错误的处理 - 返回错误的函数 / 错误的处理

  • 相关知识 - panic()函数 / recover()函数 / defer()函数

Day16 - I/O操作

  • I / O - 什么是I/O / os包的使用

  • 文件操作 - 获取文件信息 / 文件创建

  • I / O 操作

  • 相关包 - bufio包 / ioutil包

  • I / O 应用 - 复制文件 / 断点续传 / 遍历文件夹

Day19 - 反射机制

Day20 - 综合练习

Day21~22 - 网络编程

Day26~31 - Web前端

Day26 - HTML

Day27 - CSS

Day28~30 - JavaScript

Day31 - jQuery

Day32~35 - [Go Web开发](./Day32-35(Go Web开发))

Day32 - Web初识

Day35 - 文本处理

Day36~37 - beego框架

  • beego框架 - beego简介 / beego安装 / beego特性

  • bee工具 - bee简介/ bee安装

  • bee的用法 - bee命令

  • beego程序流程分析 - beego程序入口 / go语言执行顺

  • beego框架功能 - 请求拦截 / 路由分发

  • beego控制器 - 处理逻辑

  • beego.Run方法 - 解析配置 / 路由分发 / 监听服务

  • conf配置 - 项目数据配置 / 配置数据读取

  • controllers - 控制器介绍 / 控制器功能 / 控制器定义

  • models- 数据层作用 / model定义

  • routers - 路由层功能 / 路由分类

  • 静态资源 - 静态资源目录作用 / 静态资源路径设置

  • 数据库安装及配置 - mysql数据库安装 / mysql数据库基本命令 / 可视化工具

  • 数据库驱动 - 数据库驱动分类 / mysql驱动安装 / 连接配置 / 连接数据库

Day38~41 - 项目实战一

  • bee工具使用 - 项目创建 / 项目运行

  • mysql数据库操作 - 数据库连接配置 / 读取数据库配置 / 连接数据库

  • models- 数据库表设计 / 执行数据库操作方法封装

  • 用户注册 - 视图表单数据提交 / 服务器接收post数据 / 操作数据库表添加数据

  • 用户登录 - 登录功能控制器 / 路由注册 / 服务器接收Post数据 / 数据库表条件查询

  • Session处理 - session功能启用配置 / 添加session数据 / 获取session数据 / 删除session数据

  • BaseController - BaseController作用 / controller方法执行顺序 / Parepare方法作用

  • model层 - 数据库表设计 / 数据库添加操作

  • 控制器 - 写文章功能控制器定义 / get方法解析html页面 / Post方法接收form表单数据

  • 路由层 - 注册路由解析

  • 视图层 - html功能页面 / js逻辑判断 / js表单提交

  • 分页功能 - 分页设计 / 数据库limit操作实现分页查询

  • 首页内容显示 - model转换 / 分页视图功能

  • Markdown语法 - 常见第三方库 / markdown格式编程语法 / markdown与html转换

  • 修改文章功能 - 注册修改功能路由 / 修改功能controller逻辑实现 / get方法渲染页面 / post方法接收表单数据 / 数据库表数据修改操作

  • 删除功能 - 按条件删除数据库表数据 / 删除后视图重定向

  • 标签功能 - 数据库查询

  • 功能扩展 - tags查询 / page查询 / 多条件逻辑判断 / 多条件查询&的使用

  • 文件上传 - 数据表设计 / js实现文件提交 / 服务器接收文件数据 / 文件类型判断 / 文件大小判断 / 文件名 / 保存文件

  • 项目总结 - beego框架组成 / bee调试工具 / beego程序执行流程 / 数据库操作 / beego项目架构 / session处理 / 模板文件语法

Day42~43 - Gin框架

Day45 - Git

Day46~50 - 项目实战二

Day51 - Node.js

Day52 - Vue

Day54~55 - Iris框架

  • web开发 - 项目架构 / 开发流程 / 实战项目介绍 / 项目技术栈

  • iris框架 - iris简介 / iris特性 / iris框架安装 / iris参考资料

  • http请求和处理 - 数据请求和分类 / http1.0和http1.1 / iris标准请求处理 / 自定义请求处理 / 请求处理数据格式封装

  • 路由处理 - Context概念 / 正则表达式路由

  • 路由组 - Party实现路由组 / context.Next()方法 / taml配置文件 / yaml配置文件设置 / 自定义配置文件 / 自定义配置设置

  • mvc包 - mvc.Application作用 / mvc特性 / 声明周期 / mvc.Configure配置

  • session处理和使用 - session与cookie区别 / session支持数据类型 / session创建 / session使用

  • 实战项目 - 创建企业管理平台项目 / 目录说明 / 项目资源集成

Day56~60 - 项目实战三

Day61 - Linux

Day62~64 - 容器

Day63 - Docker

Day65~75 - 分布式

Day76~95 - 微服务

  • 微服务简介 - 构建单体应用 / 互联网公司架构

  • 单体应用困境 - 应用发展趋势 / 困难与困境

  • 复杂问题解决方案 - 微服务架构 / 系统扩展性 / 微服务的优点 / 微服务不足

  • 微服务实践 - 微服务的定义 / 微服务实践要解决的问题 / 常见的微服务架构

  • Protobuf介绍 - Protobuf简介 / Protobuf应用场景 / Protobuf 优点 / Protobuf 缺点
  • 编程实现Protobuf传输 - 环境准备 / Protobuf 协议语法 / 使用Protobuf的步骤
  • Protobuf语法 - Protobuf 协议语法 / Protobuf序列化原理

Day78~79 - 微服务管理

  • 服务发现 / 使用服务发现原因 / 服务发现方案 / Consul介绍 / 分布式与单点故障 / Consul环境配置 / Consul内部原理 / Consul启动 / Consul节点发现
  • 服务管理 / 服务的定义 / 服务的注册与发现 / 服务查询 / 注册多个服务 / 多节点服务集群 / Docker环境的搭建
  • RPC介绍 - RPC简介及原理介绍 / 本地过程调用 / RPC技术实现

  • RPC编程与实现 - RPC官方库 / net/rpc库实现RPC调用编程

  • RPC与Protobuf结合 - 传输数据格式定义 / Protobuf格式数据与RPC结合

  • gRPC介绍和安装 - 什么是gRPC / grpc-go介绍

  • gRPC框架使用 - 定义服务 / 编译.proto文件 / gRPC实现RPC编程

  • gRPC编程使用 - 服务端流RPC / 编译.protoc文件 / 服务端代码 / 客户端代码生成 / 服务的注册监听处理 / 客户端数据接收 / 客户端流模式 / 双向流模式

  • TLS验证和Token认证 - 授权认证 / SSL/TLS工作原理 / Token认证过程 / 自定义Token认证

  • 拦截器的使用 - Interceptor介绍 / 自定义UnaryServerInterceptor / 拦截器注册

  • micro框架介绍 - 背景 / micro概述介绍 / micro组成 / micro工具组件:API、Web、Sidecar、Bot / Go-Micro特性 / consul安装及环境准备

  • 创建微服务 - 微服务的定义 / 初始化服务实例 / Options可选项配置 / 定义服务接口,实现服务业务逻辑 / 微服务调用 / 自定义指定服务发现组件

  • 心跳机制与可选项配置 - 心跳机制的由来 / consul心跳配置 / TTL和间隔时间

  • 事件驱动机制 - 发布/订阅机制 / Broker组件设计 / go-plugins安装 / MQTT介绍及环境搭建 / 编程实现消息订阅和发布

  • Selector机制 - 负载均衡算法 / Mico的Selector / Selector的定义 / DefaultSelector / registrySelector
  • RESTful设计规范及使用 - Go-Micro API网关 / 安装Micro工具 / Micro API工作原理 / 反向代理的API服务启动 / REST 映射

Day96~100 - 完美收官

Day98 - 项目总结

Day99 - 面试指导

Day100 - 英文面试

致谢:

​ 感谢的千锋教育以及千锋教育Go语言组的同事:Steven老师,Davie老师等在技术上给与的知道和帮助。# Golang-100-Days

golang-100-days's People

Contributors

rubyhan1314 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

golang-100-days's Issues

day26-day35缺失

另外qfgolang的网络编程部分也缺失,go redis的部分其实是java操作redis的

[Bug] Day07 关于append的错误

在day07最后一部分,1.5 append() 和 copy() 函数中,运行结果是错误的

正确结果如下

len=0 cap=0 slice=[]
len=1 cap=1 slice=[0]
len=2 cap=2 slice=[0 1]
len=6 cap=6 slice=[0 1 2 3 4 5]
len=6 cap=12 slice=[0 1 2 3 4 5]

建议在这里详细讲一下append的扩容

day09_string.md 问题

package main

import (  
    "fmt"
)

func main() {  
    name := "Hello World"
    for i:= 0; i < len(s); i++ {
        fmt.Printf("%d ", s[i])
    }
    fmt.Printf("\n")
    for i:= 0; i < len(s); i++ {
        fmt.Printf("%c ",s[i])
    }
}

这段的 name := "Hello World" 应该要修正为 s:= "Hello World"

English branch ?

Hey, this repo looks really interesting, I wanna give it a chance and try everything cause I am not really confident with Golang , just wander if there are any English based forks if this project or if there are any plans to translate it . Thanks in advance

您好!发现在《读写锁》一课中,最后的结果不能复现。

当go3写完成后,并不是每次go2读操作结束后,go1写操作才开始。
打印的结果有go2、go1会交替进行的情况。
2 正在读取数据: reading。。。
1 正在写: writing。。。
2 读结束: read over...
1 写结束: write over..
难道是系统的原因?我是win7系统,go是1.12.7版本。

更新

由于疫情的原因,好多培训机构都关门了,作者是因为这个原因不会在更新了吗?

day42-day53内容缺失

Day4243 - Gin框架
Day44 - MySQL数据库高级
Day45 - Git
Day46
50 - 项目实战二
Day51 - Node.js
Day52 - Vue
Day53 - Redis数据库

Day01-第四节

三、功能
‘常量只能是数字’ 描述不准确吧

gRPC使用TLS验证,TLS认证失败。

我按照 tutorial 给出的,使用 openssl 在本地生成了私钥和证书文件,服务端、客户端都添加上 TLS 认证。
但是当客户端调用远程过程时报错了:
rpc error: code = Unavailable desc = connection error: desc = "transport: authentication handshake failed: x509: certificate relies on legacy Common Name field, use SANs or temporarily enable Common Name matching with GODEBUG=x509ignoreCN=0"
我尝试了更换服务端、客户端的端口,但结果还是一样。
烦请知道的前辈指点一二。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.