开始摸索学习go,具体内容和过程就慢慢补充吧。

计划学习路线

2022-11-20 记录一下开始时间
2023-4-18 更新 开始写项目 go-start搭了博客

书籍

《go语言核心编程》 -腾讯作者

《go语言编程之旅》 -5个项目 --对go语言能做的内容做了整体介绍吧,对细节还不够细化,对独立编写代码帮助有限

第二章 swaage 有版本冲突,等问题

代码

《go语言底层原理刨析》 – 对基础部分的内容 做一些原理讲解,能更容易理解各种东西的边界,和一些书中一笔带过的地方

《Go并发编程实战》 --推荐读,感觉不错 内容比较硬核

代码

《Go Web编程》

《Go语言高并发与微服务实战》

《kubernetes in action》

《系统架构 - 复杂系统的产品设计与开发》 思维导图

《云原生服务网格Istio:原理、实践、架构与源码解析》

《Kubernetes权威指南:从Docker到Kubernetes实践全接触(第4版)》

《基于Kubernetes的容器云平台实战/云计算与虚拟化技术丛书》

《KVM虚拟化技术》

《开源容器云OpenShift》

16706390838575

开源项目

Go42 语言42章经 – 推荐看go语言核心编程

go 夜读学习路线

go 夜读视频

感觉对应 java 若依

获取被墙的包

资料网站

搜包 看包中方法

中文官网golang导航菜鸟教程跟着煎鱼学go中文api
中文api2
思维导图零碎知识kubernetesgRPC

课程


goWeb : 腾讯

项目实战 :腾讯

不太推荐慕课网。买了某一课,观感很糟糕

时长补充
自主开发 Paas34825224
go+es859916630
重构Redis49931920作者有三星认证
容器微服务系统36875520看着东西挺新颖的
开发读书社区29946614技术倒是用了不少
秒杀项目328137315
企业抽奖29964414

gin 、gorm、

一般开发:grpc、gin、orm

生态:helm、operator

零碎

搜索包

web框架

41个开源web整理

go 的web框架非常多。主流框架:gin、beego、kit、echo、fsthttp

gin:非常简单的mvc功能简单 官中 示例代码

beego: 开发效率,封装完整

fsthttp: 没有使用net/http原生库,自己解析 超文本传输协议,封装网络事件驱动。追求极高的http性能

数据库

ORM将数据的表映射为类的一种技术(java Hibernate这种) Gorm(v1-v2版本有很大区别需要注意) 国人开发,golang中非常活跃

gorm : 数据库映射框架 中文文档

  • 驱动支持
  • MySQL 的 Gorm 驱动地址为 gorm.io/driver/mysql
  • Postgres 的 Gorm 驱动地址为 gorm.io/driver/postgres
  • SQLite 的 gorm 驱动地址为 gorm.io/driver/sqlite
  • SQL Server 的 gorm 驱动地址为 gorm.io/driver/sqlserver
  • ClickHouse 的 gorm 驱动地址为 gorm.io/driver/clickhouse

go-redis

日志

优秀的开源日志使用教程

log:标准包 Print、Panic、Fatal

glog: google 推出的日志包

  • 日志级别:info、warning、error、fatal
  • 根据文件大小切割日志
  • 自定义日志级别
  • 不同文件不同日志级别、vmodule
  • 打印指定位置的栈信息

logrus: star最多,功能强大切灵活,docker、prometheus工具都在用

  • 日志级别:debug、info、warn、error、fatal、panic
  • 可扩展logrus的hook机制运行作者通过hook方式,将日志发到任意地方
  • 支自定义格式日志。logrus内置了JSONFormatter和TextFormatter两周格式
  • 结构化日志结论
  • 预设日志字段
  • 注册一个或多个handler

zap:高性能的日志

  • 日志级别:debug、info、warn、error、Dpanic、Panic、Fatal
  • 高性能
  • 设置日志级别输出堆栈
  • 结构化目录日志、预设字段、支持hool扩展

工具包

cast:常见类型之间的转换

cobra: 命令行工具 (原生 flag 基础上完善了功能 可以实现多层命令)

cron : 定时器 (原生timer 基础上实现 支持时区、秒定时)

fsnotify : 对文件监听。 例如:配置文件热更新

file-rotatelogs :用于日志文件的切割

swagger java语言 在线文档(目前推荐使用2.0版本 golang 不支持3.0目前)

gomail : 电子邮件

Pflag: 命令行参数解析

Viper : 配置文件解析

gotests :自动测试工具

基础 命令行工具

cobra: 命令行工具 (原生 flag 基础上完善了功能)

原文

源码说明

// Command代表执行命令的结构
type Command struct {
        // 代表当前命令的,如何执行,root 最好和生成的命令工具名称一致
        Use string
        
        // 代表这个工具的别名,在 subCommand 中有用,比如 root cmd1 和 root cmd_1 想要都执行一个 subCommand 就需要这样
        Aliases []string

        // 由于不强制设置,用于输入错误的时候建议字段
        SuggestFor []string

        // 这个就是在 help 的时候一句话描述这个命令的功能
        Short string

        // 详细描述这个命令的功能
        Long string

        // 例子
        Example string

        // 需要验证的参数
        ValidArgs []string

        // 有多少个参数,这里放了一个验证函数,可以是 ExactArgs,MaximumNArgs 等,验证有多少个参数
        Args PositionalArgs

        // 参数别名
        ArgAliases []string

        // 自动生成的命令设置
        BashCompletionFunction string

        // 如果这个命令已经废弃了,那么就这里写上废弃信息
        Deprecated string

        // 如果这个命令要被隐藏,设置这个字段
        Hidden bool

        // Annotations are key/value pairs that can be used by applications to identify or
        // group commands.
        Annotations map[string]string

        // 这个命令的版本
        Version string

        // 是否要打印错误信息
        SilenceErrors bool

        // 是否要打印如何使用
        SilenceUsage bool

        // 是否有 flag,如果这个命令没有 flag,设置为 true,那么所有的命令后面的参数都会是 arguments
        DisableFlagParsing bool

        // 是否打印自动生成字样: ("Auto generated by spf13/cobra...")
        DisableAutoGenTag bool

        // 是否显示[flags]字样
        DisableFlagsInUseLine bool

        // 是否打印建议
        DisableSuggestions bool

        // 两个字符串的差距多少会进入 suggest
        SuggestionsMinimumDistance int

        // 是否使用 Traverse 的方式来解析参数
        TraverseChildren bool

        // 解析错误白名单, 比如像未知参数
        FParseErrWhitelist FParseErrWhitelist
        
        // The *Run 函数运行顺序:
        //   * PersistentPreRun()
        //   * PreRun()
        //   * Run()
        //   * PostRun()
        //   * PersistentPostRun()
        // 会被继承的前置 Run
        PersistentPreRun func(cmd *Command, args []string)

        // 会被继承的前置 Run, 带 error
        PersistentPreRunE func(cmd *Command, args []string) error

        // 当前这个命令的前置 Run
        PreRun func(cmd *Command, args []string)
        // 当前这个命令的前置 Run,带 Error
        PreRunE func(cmd *Command, args []string) error
        // zh: 实际跑的时候运行的函数
        Run func(cmd *Command, args []string)
        // zh: Run 执行错误了之后
        RunE func(cmd *Command, args []string) error
        // 后置运行
        PostRun func(cmd *Command, args []string)
        // 后置运行,带 error
        PostRunE func(cmd *Command, args []string) error
        // 会被继承的后置运行
        PersistentPostRun func(cmd *Command, args []string)
        // 会被继承的后置运行,带 error
        PersistentPostRunE func(cmd *Command, args []string) error
}

16737602422527

代码示例

// InitFoo 初始化 Foo 命令
func InitFoo() *cobra.Command {
   FooCommand.AddCommand(Foo1Command)
   return FooCommand
}
// FooCommand 代表 Foo 命令
var FooCommand = &cobra.Command{
   Use:     "foo",
   Short:   "foo 的简要说明",
   Long:    "foo 的长说明",
   Aliases: []string{"fo", "f"},
   Example: "foo 命令的例子",
   RunE: func(c *cobra.Command, args []string) error {
      container := c.GetContainer()
      log.Println(container)
      return nil
   },
}
// Foo1Command 代表 Foo 命令的子命令 Foo1
var Foo1Command = &cobra.Command{
   Use:     "foo1",
   Short:   "foo1 的简要说明",
   Long:    "foo1 的长说明",
   Aliases: []string{"fo1", "f1"},
   Example: "foo1 命令的例子",
   RunE: func(c *cobra.Command, args []string) error {
      container := c.GetContainer()
      log.Println(container)
      return nil
   },
}

cobra.Command 当前命令;args命令参数;err 成功失败

RunE: func(c *cobra.Command, args []string) error 

启动命令

看不太懂

// RunCommand  初始化根 Command 并运行
func RunCommand(container framework.Container) error {
   // 根 Command
   var rootCmd = &cobra.Command{
      // 定义根命令的关键字
      Use: "hade",
      // 简短介绍
      Short: "hade 命令",
      // 根命令的详细介绍
      Long: "hade 框架提供的命令行工具,使用这个命令行工具能很方便执行框架自带命令,也能很方便编写业务命令",
      // 根命令的执行函数
      RunE: func(cmd *cobra.Command, args []string) error {
         cmd.InitDefaultHelpFlag()
         return cmd.Help()
      },
      // 不需要出现 cobra 默认的 completion 子命令
      CompletionOptions: cobra.CompletionOptions{DisableDefaultCmd: true},
   }
   // 为根 Command 设置服务容器
   rootCmd.SetContainer(container)
   // 绑定框架的命令
   command.AddKernelCommands(rootCmd)
   // 绑定业务的命令
   AddAppCommand(rootCmd)
   // 执行 RootCommand
   return rootCmd.Execute()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值