-
GO中的逃逸分析
所属栏目:[大数据] 日期:2021-07-06 热度:122
1、什么是逃逸分析 以前写c/c++代码时,为了提高效率,常常将 pass-by-value (传值)“升级”成 pass-by-reference ,企图避免构造函数的运行,并且直接返回一个指针。 那么这里还隐藏了一个很大的坑:在函数内部定义了一个局部变量,然后返回这个局部变量[详细]
-
go中内存泄露的发现与排查
所属栏目:[大数据] 日期:2021-07-06 热度:187
内存泄露 前言 场景 暂时性内存泄露 永久性内存泄露 goroutine内存泄露 发送端channel满了 接收端消费的channel为空 生产者消费者异常退出,导致channel满了或者channel为空 channel未初始化 未添加超时处理 使用pprof排查 什么是pprof 浏览器查看 命令行模[详细]
-
go中的线程的实现模型-P G M的调度
所属栏目:[大数据] 日期:2021-07-06 热度:172
线程实现模型 ? go 中线程的实现是依靠 P G M M machine 的缩写。一个 M 代表一个内核线程,或称 “ 工作线程 ” P processor 的缩写。一个 P 代表执行一个 Go 代码片段所需要的资源(或称 “ 上下文环境 ” ) G goroutine 的缩写。一个 G 代表一段 Go 代码[详细]
-
GO代码风格指南 Uber Go (转载)
所属栏目:[大数据] 日期:2021-07-06 热度:124
原文地址:https://github.com/uber-go/guide/blob/master/style.md 译文出处:https://github.com/uber-go/guide 本文永久链接:https://github.com/gocn/translator/blob/master/2019/w38_uber_go_style_guide.md 译者:咔叽咔叽 校对者:fivezh,cvley 目[详细]
-
go1.13errors的用法
所属栏目:[大数据] 日期:2021-07-06 热度:116
go1.13errors的用法 前言 基本用法 fmt.Errorf Unwrap errors.Is As 扩展 参考 go1.13errors的用法 前言 go 1.13发布了 error 的一些新的特性,那么就来探究学习下。 基本用法 fmt.Errorf 使用 fmt.Errorf 加上 %w 格式符来生成一个嵌套的 error ,它并没有[详细]
-
go中的unsafe
所属栏目:[大数据] 日期:2021-07-06 热度:103
unsafe 前言 什么是unsafe,为什么需要unsafe unsafe实现原理 unsafe.Pointer uintptr类型 unsafe.Pointer uintptr 总结 参考 unsafe 前言 在阅读go源码的时候,发现很多地方使用了 unsafe.Pointer 来处理指针类型的转换,这次来深入的探究下。 什么是unsafe,[详细]
-
go中的类型转换成interface之后如何复原
所属栏目:[大数据] 日期:2021-07-06 热度:140
go中interface转换成原来的类型 首先了解下interface 什么是interface? 如何判断interface变量存储的是哪种类型 fmt 反射 断言 来看下interface的底层源码 eface iface 接口的动态类型和动态值 interface如何支持泛型 参考 go中interface转换成原来的类型 首[详细]
-
go中的error小结
所属栏目:[大数据] 日期:2021-07-06 热度:178
go中的error error和panic error接口 go中err的困局 推荐方法 总结 参考 go中的error go中的错误处理,是通过返回值的形式来出来,要么你忽略,要么你处理(处理也可以是继续返回给调用者),对于golang这种设计方式,我们会在代码中写大量的if判断,以便做[详细]
-
golang环境安装和配置
所属栏目:[大数据] 日期:2021-07-06 热度:189
go中环境安装 前言 最近在工作中需要新配置go环境,每次都要去网上查找教程,浪费时间,那么就自己总结下。 下载安装 linux Golang官网下载地址:https://golang.org/dl/ 1、选择你要安装的版本 File name Kind OS Arch Size SHA256 Checksumgo1. 13.8 .src.[详细]
-
go语言学习--内核态和用户态(协程)
所属栏目:[大数据] 日期:2021-07-06 热度:158
go中的一个特点就是引入了相比于线程更加轻量级的协程(用户态的线程),那么什么是用户态和内核态呢? 一、什么是用户态和内核态 当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特[详细]
-
defer使用小结
所属栏目:[大数据] 日期:2021-07-06 热度:104
defer 前言 defer的定义 defer执行的规则 为什么需要defer defer进阶 作为匿名函数 作为函数参数 defer命令执行的时机 defer配合recover 总结 参考 defer 前言 defer作为go里面一个延迟调用的机制,它的存在能够大大的帮助我们优化我们的代码结构。但是我们[详细]
-
gRPC 中 Client 与 Server 数据交互的 4 种模式
所属栏目:[大数据] 日期:2021-07-06 热度:82
项目地址:grpc-modes 最近使用 gRPC 入门微服务开发,特此总结了 gRPC 中 4 种运行模式 目录结构 $GOPATH└── grpc ├── simple // 简单模式 RPC │ ├── client │ │ └── client.go # 客户端代码 │ ├── proto │ │ ├── user.pb.go │ │[详细]
-
如何在客户端使用Java读取gRPC中的元数据
所属栏目:[大数据] 日期:2021-07-06 热度:127
我正在使用 Java和Protoc 3.0编译器,我的proto文件在下面提到. https://github.com/openconfig/public/blob/master/release/models/rpc/openconfig-rpc-api.yang Syntax = "proto3";package Telemetry;// Interface exported by Agentservice OpenConfigTelem[详细]
-
go基于grpc构建微服务框架-结构化日志输出
所属栏目:[大数据] 日期:2021-07-06 热度:103
1.结构化日志的意义 1.1 日志格式化 日志主要用于跟踪服务的运行信息,作为后端攻城狮,一般都会有一种想法,平时的时候希望日志越少越好,出问题的时候又总是抱怨,怎么才tmd这点日志,还在关键的地方没打印. 因此,日志很重要,将日志进行格式化也很重要,日志格式[详细]
-
go基于grpc构建微服务框架-服务注册与发现
所属栏目:[大数据] 日期:2021-07-06 热度:62
概述 grpc 是谷歌开源的rpc框架,基于http2实现,并支持跨语言,目前基本涵盖了主流语言.跨语言的实现主要得益于protobuf,通过编写proto文件,通过protobuf工具生成对应语言的类库进行使用. 对于go这样一门新生语言来说,生态链还处于发展阶段,微服务框架也是如此[详细]
-
golang 网络框架之 grpc
所属栏目:[大数据] 日期:2021-07-06 热度:89
grpc 是 google 开源的一款网络框架,具有极好的性能,可能是目前性能最好的网络框架,支持流式 rpc,可以很方便地构建消息订阅发布系统,支持几乎所有主流的语言,使用上面也很简单,公司很多服务基于 grpc 框架构建,运行非常稳定 开始之前首先你要知道网[详细]
-
Go实战--golang中使用gRPC和Protobuf实现高性能api(golang/proto
所属栏目:[大数据] 日期:2021-07-06 热度:163
生命不止,继续 go go go !!! 号外号外,插播一条广告,通过博客的uv可以看到周五,程序员是不怎么干活的: 本篇博客,使用gRPC和Protobuf,实现所谓的高性能api。 protobuf golang中的protobuf大家应该不会很陌生,之前也有博客介绍过: Go实战–go中使用go[详细]
-
gRPC在golang中的应用
所属栏目:[大数据] 日期:2021-07-06 热度:86
GRPC是google开源的一个高性能、跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x。 前面写过一篇golang标准库的rpc包的用法,这篇文章接着讲一下google的grpc。 介绍 在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器[详细]
-
go的grpc实现
所属栏目:[大数据] 日期:2021-07-06 热度:162
??gRPC是Google的RPC框架, 开源、高性能、跨语言 ,基于HTTP/2通讯协议和Protocol Buffer 3数据序列化协议。 过程如下图所示: ??调用的双方可以使用完全不同的两种语言来实现,分别实现client端和server端,按照约定的protobuf协议进行交互。client端会保[详细]
-
Golang gRPC 示例
所属栏目:[大数据] 日期:2021-07-06 热度:161
Golang gRPC 示例 1、安装gRPC runtime go get google.golang.org/grpc 为了自动生成Golang的gRPC代码,需要安装protocal buffers compiler以及对应的GoLang插件 2、protocal buffer安装 从https://github.com/google/protobuf/releases下载安装包,例如:pr[详细]
-
gRPC golang开发指南
所属栏目:[大数据] 日期:2021-07-06 热度:161
为什么使用gRPC 样例代码和环境的建立 样例测试 服务定义 生成客户端和服务端代码 创建服务端 实现RouteGuide Simple RPC Server-side streaming RPC Client-side streaming RPC Bidirectional streaming RPC Starting the server Creating the client 创建[详细]
-
Golang gRPC实践 连载七 HTTP协议转换
所属栏目:[大数据] 日期:2021-07-06 热度:125
gRPC HTTP协议转换 正当有这个需求的时候,就看到了这个实现姿势。源自coreos的一篇博客,转载到了grpc官方博客gRPC with REST and Open APIs。 etcd3改用grpc后为了兼容原来的api,同时要提供http/json方式的API,为了满足这个需求,要么开发两套API,要么[详细]
-
Golang gRPC实践 连载五 拦截器 Interceptor
所属栏目:[大数据] 日期:2021-07-06 热度:152
@H_502_1@ Interceptor grpc服务端提供了interceptor功能,可以在服务端接收到请求时优先对请求中的数据做一些处理后再转交给指定的服务处理并响应,功能类似middleware,很适合在这里处理验证、日志等流程。 在自定义Token认证的示例中,认证信息是由每个服[详细]
-
Golang gRPC实践 连载四 gRPC认证
所属栏目:[大数据] 日期:2021-07-06 热度:83
gRPC 默认提供了两种认证方式: 基于SSL/TLS认证方式 远程调用认证方式 两种方式可以混合使用 TLS认证示例 这里直接扩展hello项目,实现TLS认证机制 首先需要准备证书,在hello目录新建keys目录用于存放证书文件。 证书制作 制作私钥 (.key) # Key considera[详细]
-
Golang gRPC实践 连载二 Hello gRPC
所属栏目:[大数据] 日期:2021-07-06 热度:65
Hello gRPC 按照惯例,这里从一个Hello项目开始,本项目定义了一个Hello Service,客户端发送包含字符串名字的请求,服务端返回Hello消息。 流程: 编写 .proto 描述文件 编译生成 .pb.go 文件 服务端实现约定的接口并提供服务 客户端按照约定调用方法请求服[详细]