Golang标准库——strings

strings strings包实现了用于操作字符的简单函数。 func EqualFold func EqualFold(s, t string) bool 判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。 func main() { fmt.Println(strings.EqualFold("Go", "go")) // true } func HasPrefix func HasPrefix(s, prefix string) bool 判断...阅读全文

简书 2020-10-21 23:32:39 DevilRoshan

Golang标准库——sync

sync sync包提供了基本的同步基元,如互斥锁。除了Once和WaitGroup类型,大部分都是适用于低水平程序线程,高水平的同步使用channel通信更好一些。 本包的类型的值不应被拷贝。 type Locker type Locker interface { Lock() Unlock() } Locker接口代表一个可以加锁和解锁的对象。 type Once type Once struct { // done indicates whether the action has been...阅读全文

简书 2020-10-21 23:32:38 DevilRoshan

go-zero的业务中的内存缓存神器collection.Cache

转自go-zero点击查看原文go-zero微服务库地址https://github.com/tal-tech/go-zero通过 collection.Cache 进行缓存go-zero微服务框架中提供了许多开箱即用的工具,好的工具不仅能提升服务的性能而且还能提升代码的鲁棒性避免出错,实现代码风格的统一方便他人阅读等等,本系列文章将分别介绍go-zero框架中工具的使用及其实现原理进程内缓存工具collection.Cache在做服务器开发的时候,相信都会遇到使用缓存的情况,go-zero 提...阅读全文

Segmentfault 2020-10-26 09:32:31 Keson

企业级RPC框架zRPC详解

近期比较火的开源项目go-zero是一个集成了各种工程实践的包含了Web和RPC协议的功能完善的微服务框架,今天我们就一起来分析一下其中的RPC部分zRPC。zRPC底层依赖gRPC,内置了服务注册、负载均衡、拦截器等模块,其中还包括自适应降载,自适应熔断,限流等微服务治理方案,是一个简单易用的可直接用于生产的企业级RPC框架。zRPC初探zRPC支持直连和基于etcd服务发现两种方式,我们以基于etcd做服务发现为例演示zRPC的基本使用:配置创建hello.yaml配置文件,配置如下:Nam...阅读全文

简书 2020-10-21 19:32:42 Java资深架构师联盟盟主

linux信号透彻分析理解与各种实例讲解

本文将从以下几个方面来阐述信号:(1)信号的基本知识(2)信号生命周期与处理过程分析(3) 基本的信号处理函数(4) 保护临界区不被中断(5) 信号的继承与执行(6)实时信号中锁的研究第一部分: 信号的基本知识1.信号本质:信号的本质是软件层次上对中断的一种模拟。它是一种异步通信的处理机制,事实上,进程并不知道信号何时到来。2.信号来源(1)程序错误,如非法访问内存(2)外部信号,如按下了CTRL+C(3)通过kill或sigqueue向另外一个进程发送信号3.信号种类信号分为可靠信号与不可靠信...阅读全文

简书 2020-10-21 17:32:42 linux大本营

Golang哈希类型

Map类型 Go语言中,map无需引用任何库,Go语言自带map类型。 Map是一堆键值对的未排序集合。 1. 简单使用 package main import "fmt" type PersonInfo struct { ID string Name string } func main() { var personDB map[string]PersonInfo personDB = make(map[string]PersonInfo) personDB["12345"] = Person...阅读全文

简书 2020-10-21 17:32:40 ShawnLee_123

Go并发编程之并发模型—(1)概念

前言在开始学习 Go 特性的并发编程之前,先来简单了解一些基础概念,这对理解学习 Go 并发模型会有一些帮助。概念内核态也被称为内核空间,是系统内核的运行空间,与用户空间隔离。控制计算机的硬件资源。用户态也被称为用户空间,代码运行在较低的特权级别上,不能直接访问内核空间和硬件设备。系统调用用户空间不能直接调用系统资源,必须通过调用系统接口,由内核完成相关指令。进程进程是操作系统分配资源的最小单元。线程有时也被称为轻量级进程(LWP),是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥...阅读全文

Segmentfault 2020-10-25 21:32:32 sown

企业级RPC框架zRPC

近期比较火的开源项目go-zero是一个集成了各种工程实践的包含了Web和RPC协议的功能完善的微服务框架,今天我们就一起来分析一下其中的RPC部分zRPC。zRPC底层依赖gRPC,内置了服务注册、负载均衡、拦截器等模块,其中还包括自适应降载,自适应熔断,限流等微服务治理方案,是一个简单易用的可直接用于生产的企业级RPC框架。zRPC初探zRPC支持直连和基于etcd服务发现两种方式,我们以基于etcd做服务发现为例演示zRPC的基本使用:配置创建hello.yaml配置文件,配置如下:Nam...阅读全文

Segmentfault 2020-10-25 20:32:33 kevinwan

Go数据结构之数组与切片

前言数组的长度是声明的时候就固定好的,后面不可能变大,而且长度和容量相等。切片的长度和容量后面可以随着元素增多而增长,但是容量不可能小于长度。正文声明&初始化在 Go 中声明即初始化,如果在声明的时候没有初始化值,那么就会赋值为声明类型的「零值」。func TestDemo1(t *testing.T) { // 数组 var array1 [5]int // 只需设置长度,后面不可变 var array2 = new([5]int) // 返回指针 // 切片 var slice1 []int...阅读全文

Segmentfault 2020-10-24 14:32:32 sown

【golang踩坑日记】go install/build/run 读取不到最新代码问题

执行go install时老是报错,该错误对应的代码文件已修改,但似乎未读取到,网上翻了几个帖子,一种情况是go install时,仅编译当前package的代码,其他package已生成.a文件的不会再重复编译,此种情况可以删除${GOPATH}/pkg/linux_amd64/**/路径下对应的.a文件后重新go install编译! 但楼主遇到的是另一个问题,迁移代码路径带来的问题: 旧版代码 main.go旧版中引用了pkg1.go中定义的一个func: package main imp...阅读全文

简书 2020-10-21 14:32:41 王小奕er

go learning and tool

Quick Start: https://golang.org/doc/install https://tour.golang.org/welcome/1 语言层面: 《Effective Go》 https://golang.org/doc/effective_go.html (我是看这个入门,官方推荐的文档,轻松易读 https://item.jd.com/12187988.html (比较详细的书籍 实战 & 规范: 《Code Review Comments》 en:https://gi...阅读全文

简书 2020-10-21 14:32:41 simok

字符串相乘

给定两个以字符串形式表示的非负整数 num1 和 num2 ,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式示例:输入: num1 = "2", num2 = "3" 输出:“6”思路按照平时计算乘法的方式:竖式乘法。把 num1 和 num2 的每一位都分别相乘,结果保存在数组中,然后把乘积相加。但是在实际的计算中,可以进行优化,在计算每一位的乘积的时候,把上一位的进位也考虑进去,这样代码更优雅一些。关键部分num1[i] * num2[j] 的结果,本位保存在 sumAr...阅读全文

Segmentfault 2020-10-24 10:32:32 五行缺金

为什么 go 中字符串不能用下标访问

在大多数编程语言中,字符串是可以直接通过下标访问的,但是在使用 go 语言的时候,直接使用下标访问有时候会出现一些乱码。<!--more-->数组在解决这个问题之前,要先了解一个东西--数组:数组是用于存储多个相同类型数据的集合。并且数组在申请内存的时候,是一次申请一块连续的内存。比如我们创建一个数组,里面存了这几个元素。由于内存是连续的,元素的类型也是相同的,所以每个元素占用的内存空间也是固定的,比如 java 中 char 类型占用两个字节。数组的内存空间是平等划分的,这样就可以解释为什么可...阅读全文

Segmentfault 2020-10-24 09:32:33 五行缺金

阿里 双11 同款,流量防卫兵 Sentinel go 源码解读

作者 | 于雨 apache/dubbo-go 项目负责人本文作者系 apache/dubbo-go 项目负责人,目前在 dubbogo 项目中已内置可用 sentinel-go,如果想单独使用可参考 在 dubbo-go 中使用 sentinel 一文,若有其他疑问可进 dubbogo社区【钉钉群 23331795】进行沟通。导读:本文主要分析阿里巴巴集团开源的流量控制中间件 Sentinel,其原生支持了 Java/Go/C++ 等多种语言,本文仅仅分析其 Go 语言实现。下文如无特殊说明,...阅读全文

Segmentfault 2020-10-23 22:32:33 阿里巴巴云原生

Go语言HTTP服务生命周期

在 go 语言里启动一个 http 服务非常简单,只需要一行代码http.ListenAndServe()就可以搞定,这个方法会一直阻塞着直到进程关闭,如果这个时候来了些特殊的需求比如: 监听服务启动 手动关闭服务 监听服务关闭 在 go 中应该怎么实现呢?下面来一一举例。 监听服务启动 方法一(推荐) 将Listen步骤拆分出来,先监听端口,再绑定到server上,代码示例: l, _ := net.Listen("tcp", ":8080") // 服务启动成功,进行初始化 doInit()...阅读全文

简书 2020-10-21 11:32:41 mklee

Ubuntu Server搭建Hyperledger Fabric 2.1学习环境

最近在学习Hyperledger Fabric,它是由 Linux 基金会发起创建的开源区块链分布式账本。 Hyperledger Fabric是一个开源区块链实现,开发环境建立在 VirtualBox 虚拟机上,部署环境可以自建网络,也可以直接部署在 BlueMix 上,部署方式可传统可 Docker 化,共识达成算法插件化,支持用 Go 和 JavaScript 开发智能合约,尤以企业级的安全机制和 membership 机制为特色。 今天来聊聊怎么搭建一个基于Ubuntu Server的H...阅读全文

简书 2020-10-21 10:36:18 番茄鸡蛋炒饭被抢注啦

golang - channel(通道)

1、声明 var ch chan int fmt.Println(ch) // nil ch = make(chan int) ch1 := make(chan bool) ch2 := make(chan string) 2、操作 发送 <- : 将数据发送到通道中 接收 <- :从一个通道中接收值 关闭 // 发送 ch<-10 // 接收 x := <-ch // 关闭 close(ch) 3、无缓冲和有缓冲channel 以下执行后会阻塞:创建了一个无缓冲通道,并且有向发送数据,但是没有...阅读全文

简书 2020-10-21 09:32:39 hellocassiel