07.变量声明须一致
本文视频地址Go 语言,使用变量之前需要先进行变量的声明。var s string = “Golang" n := 666Go 语言有两类变量包级别(package varible):在 package 级别可见的变量。如果是导出变量,该变量也可以被视为全局变量; 局部变量(local varible):函数或方法体内声明的变量,仅在函数或方法体内可见。 1. 包级别变量包级变量使用var 关键字的变量声明形式,从变量声明的时候是否延迟初始化这个角度对包级变量进行一次分类。1). 声明并同时显式...阅读全文
06.命名惯例-见名知意
本文视频地址日常工作中,命名这件事看似简单,如果在大规模软件开发中,做出好的命名并非易事。命名是编程语言的要求:好的命名是为了提高程序的可读性和可维护性。什么是好的命名呢?无论哪门编程语言,良好的命名应该遵循一些通用的原则,不同编程语言在命名上还会有一些个性化的命名习惯。要想做好 Go 标识符命名(包括 package 命名),最少要遵循两个原则:1 简单且一致 2 利用上下文辅助命名1. 简单且一致对于简单,我们最直观地理解就是越短越好,但这里的简单还包含着清晰明确。短意味着能用一个单词命名的...阅读全文
05.Go代码风格的唯一标准
本文视频地址gofmtGo 语言设计的目标之一就是解决大型软件系统的大规模开发的问题,解决大型团队的开发问题,Go 核心团队给它起了一个名字叫:规模化(scale)。gofmt 是伴随着 Go 语言诞生的第一批在“规模化”这个目标上的实践和尝试。gofmt 将统一的代码风格内化到 Go 语言之中,并和 Go 语言一起推广给所有 Go 开发者。在一致的代码风格下,Go 开发人员阅读和维护他人代码时,效率大幅。gofmt 代码风格已经成为 Go 开发者的一种共识。如果你是Go 开发人员,提交代码前使...阅读全文
04.Go项目布局-你如何设计项目结构
本文视频地址Go 语言典型项目结构在多年的 Go 语言实践积累后逐渐形成了一种典型项目结构,如下图所示:上面就是一个支持构建二进制可执行文件(在 src 下)的典型 Go 项目的结构。1 src 目录:存放项目要编译构建的可执行文件对应的 main 包的源文件。如果有多个可执行文件需要构建,每个可执行文件的 main 包单独放在一个子目录中,比如图中的 appA、appB;src 目录下的各 app 的 main 包将整个项目的依赖连接在一起。我们在 main 包中会做一些命令行参数解析、资源初...阅读全文
01.Go语言的设计哲学之一:简单
本文视频地址Go 语言从诞生到今天已经有十年多了,Go 语言的魅力使得其在全世界范围内拥有了百万级的支持用户。那究竟是什么让大量的开发人员学习 Go 或从其他语言转向 Go 语言呢?根源就在于 Go 语言的设计哲学。关于 Go 语言的设计哲学,Go 语言之父们以及 Go 核心团队的开发者们并没有给出明确的官方说法。但在这里我将根据我个人对他们以及 Go 社区主流观点和代码行为的整理、分析和总结,列出三条 Go 语言的设计哲学。理解这些设计哲学将对读者形成 Go 原生编程思维、编写高质量 Go 代...阅读全文
golang使用protobuf中的oneof
作用类似c里的联合体,写配置文件类似message BBB{ string b=1; } message CCC{ int b=1; } message AAA { oneof payload { BBB b; CCC c; } }使用的时候导入例如为xxx模块:创建结构体时候要手动创建oneof里的结构,写法类似:msg := &xxx.AAA{Payload: &xxx.AAA_BBB{B: &xxx.B{"123"}}}解析出来判断是BBB还是CCC的时候使用switch msg.Payl...阅读全文
gitlab-flow 用于团队协作开发的分支管理工具(分支模型类似与 gitflow)
https://github.com/yeqown/gitlab-flow一个 CLI 工具,可帮助管理 gitlab 上的开发流程。 这和 git-flow 之间的区别在于 gitlab-flow 将操作远程( gitlab )资源,例如:里程碑,问题,合并请求和分支。 重要的是,如果您的团队一起使用 gitlab-flow,则 gitlab-flow 可以通过使用 MilestoneId 或交互模式来帮助您同步其他开发数据。另外,gitlab-flow 还提供了 dashboard 能力,方...阅读全文
企业项目迁移go-zero全攻略(一)
作者:Mikael最近发现 golang 社区里出了一个新兴的微服务框架。看了一下官方提供的工具真的很好用,只需要定义好 .api 文件模版代码都可以一键生成,只需要关心业务;同时 core 中的工具极大减少了开发成本。废话不多说,来看看这个微服务框架:go-zero起源聊聊与go-zero结缘最先接触go-zero是2020年10月国庆假期,说来也巧,看到有人在go-micro群中问go-zero情况,当时go-zero作者在群中就大概回答了一下,引起了我的好奇,当时公司用的go-micro1...阅读全文
Go 源码阅读之 flag 包
Go 源码阅读系列是我的源码阅读笔记。因为本人的电脑上 Go 的版本是1.13.4,所以就选择了该版本作为学习的版本。为此我在 Github 上 Fork 了 Go 的源码,并创建了 study1.13.4 分支,来记录对于源码的个人理解或者说中文注释也行。每当阅读完一个包后都会进行一下小结,就像这篇是对flag包的总结整理。当然在整理的过程中发现 Go夜读系列视频,也让我受益颇多。简介文件结构运行测试总结接口转换能实现类似 C++ 中模板的功能函数 vs 方法new vs make指针赋值给接...阅读全文
Golang应用性能问题排查分析
一、背景 公司有一个使用golang开发的采集模块,负责调用多个外部系统采集数据;最近做了一次架构上的调整,将采集模块分成api、job两个子模块,并部署到容器中,拆分前部署在虚机上。 二、现象 部分采集任务在容器中的执行时间比虚机中执行时间要长,8倍左右,本地测试无异常 三、排查思路 1. 调用外部接口耗时过长? 只有部分任务执行时间长,怀疑容器调用那部分系统接口比较慢,于是在容器中curl外部接口接口,发现并不慢,排除这个可能。 2. 程序问题? 将现有部署在虚机中的正常运行的应用,部署到容...阅读全文
golang xorm mysql代码生成器
原来的代码生成器都是用java写的,心血来潮,把其中的生产golang数据层的代码,用golang实现了一下。 主体代码 package main import ( "flag" "fmt" "os" "strings" "text/template" "unsafe" _ "github.com/go-sql-driver/mysql" "xorm.io/xorm" ) const ( selectCurrentDbSql = "SELECT DATABASE()" allColumnInfo...阅读全文
golang 原子操作
在众多的同步工具中,真正能够保证原子性执行的只有原子操作(atomic operation)。原子操作在进行的过程中是不允许中断的。 更具体地说,正是因为原子操作不能被中断,所以它需要足够简单,并且要求快速。你可以想象一下,如果原子操作迟迟不能完成,而它又不会被中断,那么将会给计算机执行指令的效率带来多么大的影响。因此,操作系统层面只对针对二进制位或整数的原子操作提供了支持。 Go语言的原子操作当然是基于CPU和操作系统的,所以它也只针对少数数据类型的值提供了原子操作函数。这些函数都存在于标准库...阅读全文
2021最新京东、字节跳动「3面面经」盘点大厂后端面试高频题
马上又要到金三银四,想着面试大军可能也过不了几天就要来了。所以今天给大家分享“京东和字节的面经,每家一二三面,我想大家可以自己测试一下能坚持到哪里。 2021最新京东、字节跳动「3面面经」盘点大厂后端面试高频题 京东三面 一面 1. 自我介绍 2. 常用的数据结构有哪些?并大说了一些操作的时间复杂度 3. 数组从下标最大的删与最小的删有什么区别? 4. 介绍主要用到的技术(技术栈) 5. 介绍一下集合类 6. list和set的区别?以及各个实现类和底层实现 7. CopyOnWriteList...阅读全文
Redis 实战 —— 01. Redis 数据结构简介
一些数据库和缓存服务器的特性和功能 P4 名称 类型 数据存储选项 查询类型 附加功能 Redis 使用内存存储(in-memory)的非关系数据库 字符串、列表、哈希表、集合、有序集合 每种数据类型都有自己的专属命令,另外还有批量操作(bulk operation)和不完全(partial)的事务支持 发布与订阅,主从复制(master/slave replication) memcached 使用内存存储的键值缓存 键值之间的映射 增删改查以及其他几个命令 为提升性能而设的多线程服务器 My...阅读全文
Beego 框架学习笔记 05 | 视图、模板引擎
一、模板引擎 1. 模板中绑定基本数据、字符串、数值、布尔值 default.go: package controllers import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } func (c *MainController) Get() { // 1. 模板中绑定基本数据、字符串、数值、布尔值 c.Data["website"] = "beego 教程" c.Data["ti...阅读全文
微服务架构实战160讲
课程地址:http://itxueba.cn/thread-464-1-1.html点击跳转到课程页IT学吧(www.itxueba.cn)[it学吧itxueba.cn]学it教程大全-微服务架构实战160讲第一模块 :微服务安全架构与实践 (24讲)01 | 第一模块课程介绍免费02 | 微服务安全要解决什么问题免费03 | 白话 OAuth2免费04 | OAuth2 的正式定义免费05 | OAuth2 有哪些典型模式免费06 | OAuth2 模式该如何选型07 | Spring S...阅读全文