go-zero微服务实战系列(十一、大结局)
本篇是整个系列的最后一篇了,本来打算在系列的最后一两篇写一下关于k8s部署相关的内容,在构思的过程中觉得自己对k8s知识的掌握还很不足,在自己没有理解掌握的前提下我觉得也很难写出自己满意的文章,大家看了可能也会觉得内容没有干货。我最近也在学习k8s的一些最佳实践以及阅读k8s的源码,等待时机成熟的时候可能会考虑 ...
go-zero实战demo(一)
前言
听说下一个项目 可能要用微服务开发,趁着项目的空档期,对于go微服务的框架进行了学习。目前go的微服务框架个人认为处于百家齐放的时代,可能这也是go的生态的一个特点吧,也曾简单用过go-miecro,gin+micro+gorm+mysql+redis 常见方案使用起来还是蛮顺手的,可惜该框架成了个人仓库,生成的依赖会出现引用错误,其他 ...
Go 语言实战(9):指针、引用和值
在经过编写 CLI 程序的尝试之后,我们继续回来聊 Go 语言的基础知识。
相信实际写过一些代码之后,会更容易理解。
原计划这期聊 数组和切片。考虑到聊切片时,无论如何绕不开指针和引用的话题,干脆提到前面来。
目录
[TOC]
指针
指针(Pointer)本质上是一个指向某块计算机内存的地址。就像日常的门牌地址一样。只不过内 ...
(六)Ubuntu20.04安装GO
Go(通常称为golang)是Google创建的一种现代开源编程语言,可让您构建可靠且高效的应用程序。Go是一种编译语言,这意味着您需要编译源代码以创建用于运行该软件的可执行文件。本教程说明了如何在Ubuntu 20.04上下载和安装Go。
如何因为网络问题可以参考这篇文章:https://github.com/golang/go/wiki/Ubuntu
Go编写了许多流 ...
Go微服务框架go-kratos实战学习05:分布式链路追踪 OpenTelemetry, jaeger 使用
一、分布式链路追踪发展简介
1.1 分布式链路追踪介绍
关于分布式链路追踪的介绍,可以查看我前面的文章 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习(https://www.cnblogs.com/jiujuan/p/16097314.html) 。
这里的 OpenTelemetry 有一段发展历程。
APM(Application Performance Monitoring) 和 Distribute ...
GO GMP协程调度实现原理 5w字长文史上最全
1 Runtime简介
Go语言是互联网时代的C,因为其语法简洁易学,对高并发拥有语言级别的亲和性。而且不同于虚拟机的方案。Go通过在编译时嵌入平台相关的系统指令可直接编译为对应平台的机器码,同时嵌入Go Runtime,在运行时实现自身的调度算法和各种并发控制方案,避免进入操作系统级别的进程/线程上下文切换,以及通过原子操 ...
go-zero 微服务实战系列(一、开篇)
前言
在社区中经常看到有人问有没有基于 go-zero 的比较完整的项目参考,该类问题本质上是想知道基于 go-zero 的项目的最佳实践。完整的项目应该是一个完整的产品功能,包含产品需求、架构设计、关键流程的编码、表设计以及各种性能优化和数据一致性等,是一个真正贴近生产级的项目,是可以直接拿来在自己的生产项目中进行 ...
Go微服务框架go-kratos实战学习03:使用 gorm 实现增删改查操作
一、简介
在上一篇文章 go-kratos学习02 (https://www.cnblogs.com/jiujuan/p/16331967.html)中,详细介绍了用 kratos 编写项目代码的步骤。这篇就在上篇基础上,再结合 Go 数据库操作库 gorm 一步一步来实现一个简单的增删改查操作。
首先假定你已经会使用 gorm 的基本操作。
安装 gorm:
$ go get -u gorm.io/gorm
go: do ...
Go微服务框架go-kratos实战学习02:proto 代码生成和项目代码编写步骤
在上一篇 kratos quickstart 文章(https://www.cnblogs.com/jiujuan/p/16322725.html)中,我们直接用 kratos new 命令生成了一个项目。
这一篇来看看 kratos API 的定义和使用。
一、kratos 中 API 简介
1.1 简介
API 全称是 Application Programming Interface,应用程序接口。
在 kratos 中,API 指的是 REST API 和 RPC ...
Go微服务框架go-kratos实战学习01:quickstart 快速创建项目
先来感受下用 kratos 快速创建项目
一、环境准备
1.1 安装依赖软件
protoc
protoc-gen-go
安装 protoc:
到 protobuf release 页面,选择适合自己操作系统的文件包。
或者文档
也可以看 grpc.io 官方安装文档: https://grpc.io/docs/protoc-installation/
安装 protoc-gen-go:
简单点可以直接用 go install 安装 :g ...
Go语言标准库操作Redis数据库 go-redis
Go语言标准库操作Redis数据库
快速了解 Redis 数据库
描述: Redis是一个开源的内存数据库, Redis提供了多种不同类型的数据结构,很多业务场景下的问题都可以很自然地映射到这些数据结构上。除此之外,通过复制、持久化和客户端分片等特性,我们可以很方便地将Redis扩展成一个能够包含数百GB数据、每秒处理上百万次请求的系 ...
简单易懂的 Go 泛型使用和实现原理介绍
原文:A gentle introduction to generics in Go by Dominik Braun
万俊峰Kevin:我看了觉得文章非常简单易懂,就征求了作者同意,翻译出来给大家分享一下。
本文是对泛型的基本思想及其在 Go 中的实现的一个比较容易理解的介绍,同时也是对围绕泛型的各种性能讨论的简单总结。首先,我们来看看泛型所解决的核心问题。
问 ...
Golang(go语言)开发环境配置
VSCode开发环境配置
目录VSCode开发环境配置先到VSCode官网去下载适合自己系统的VSCode安装软件演示在WIndows下 安装使用演示在Linux(Ubuntu/centos)下安装vscode并使用。演示在MAC下安装vscode并使用Windows下搭建Go开发环境-安装和配置SDKSDK介绍下载SDK工具包windows下安装sdkWindows下配置Golang环境变量:Linux下搭 ...
Client-go的四种客户端的简单使用
Client-go的四种客户端使用
我们知道kubectl是通过命令行交互的方式与Kubernetes API Server进行交互的,Kubernetes还提供了通过编程的方式与Kubernetes API-Server进行通信。
client-go是从 Kubernetes的代码中单独抽离出来的包,并作为官方提 供的Go语言的客户端发挥作用。
client-go简单、易用, Kubernetes系统的其他组 ...
Go单体服务开发最佳实践
单体最佳实践的由来
对于很多初创公司来说,业务的早期我们更应该关注于业务价值的交付,并且此时用户体量也很小,QPS 也非常低,我们应该使用更简单的技术架构来加速业务价值的交付,此时单体的优势就体现出来了。
正如我直播分享时经常提到,我们在使用单体快速交付业务价值的同时,也需要为业务的发展预留可能性,我们 ...
一文读懂原子操作、内存屏障、锁(偏向锁、轻量级锁、重量级锁、自旋锁)、Disruptor、Go Context之上半部分
我不想卷,我是被逼的
在做了几年前端之后,发现互联网行情比想象的差,不如赶紧学点后端知识,被裁之后也可接个私活不至于饿死。学习两周Go,如盲人摸象般不知重点,那么重点谁知道呢?肯定是使用Go的后端工程师,那便利用业余时间找了几个老哥对练一下。其中一位问道在利用多个goroutine发送请求拿到结果之后如果进行销毁 ...
Go是怎么解决包依赖管理问题的?
我们先来了解一下 Go 构建模式的演化过程,弄清楚 Go 核心开发团队为什么要引入 Go module 构建模式。
Go 构建模式时怎么演化的?
Go 程序由 Go 包组合而成的,Go 程序的构建过程就是确定包版本、编译包以及将编译后得到的目标文件链接在一起的过程。
Go 语言的构建模式历经了三个迭代和演化过程,分别是最初期的 GOPATH、1 ...
go etcd服务发现
一.etcd简介
etcd 是一个分布式键值对存储系统,由coreos 开发,内部采用 raft 协议作为一致性算法,用于可靠、快速地保存关键数据,并提供访问。通过分布式锁、leader选举和写屏障(write barriers),来实现可靠的分布式协作。etcd集群是为高可用、持久化数据存储和检索而准备。
概念词汇
Raft ...
Go语言设计与实现
Go 语言设计与实现
2.1 编译过程
2.1.1 预备知识
抽象语法树
抽象语法树(Abstract Syntax Tree、AST),是源代码语法的结构的一种抽象表示,它用树状的方式表示编程语言的语法结构1。
指令集
x86 是目前比较常见的指令集,除了 x86 之外,还有 arm 等指令集,不同的处 ...
k8s的client-go的使用
学习地址:https://github.com/kubernetes/client-go
如果你要安装最新的需要的环境是: go1.16+ ,使用下面的命令安装:
go get k8s.io/client-go@latest
client-go 是用 Golang 语言编写的官方编程式交互客户端库,提供对 Kubernetes API server 服务的交互访问。它是 Kubernetes 的核心处理框架,k8s源码中已经集成了 ...