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-21 17:32:39 sown

企业级RPC框架zRPC

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

Segmentfault 2020-10-21 17:32:39 kevinwan

Go数据结构之数组与切片

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

Segmentfault 2020-10-21 17:32:38 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-21 17:32:38 五行缺金

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

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

Segmentfault 2020-10-21 17:32:38 五行缺金

阿里 双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-21 17:32:37 阿里巴巴云原生

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

golang json

用于json相关结构体中tag定义的时候需要注意 字段的tag是"-",那么这个字段不会输出到JSON tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中 tag中如果带有"omitempty"选项,那么如果该字段值为空,就不会输出到JSON串中 如果字段类型是bool, string, int, int64等,而tag中带有",string"选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串 解析已知的固定格式的json package main ...阅读全文

简书 2020-10-20 23:32:40 realPeanut

Golang标准库——strconv

strconv strconv包实现了基本数据类型和其字符串表示的相互转换。 Constants const IntSize = intSize IntSize是int或uint类型的字位数。 Variables var ErrRange = errors.New("value out of range") ErrRange表示超出目标类型表示范围。 var ErrSyntax = errors.New("invalid syntax") ErrSyntax表示不符合目标类型语法。 type N...阅读全文

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

约瑟夫问题

大家自行百度下约瑟夫问题,这里用golang+单向循环链表的方式解决约瑟夫问题,下面先提供一下代码:func (h *people)joseph(nint) { p :=h q := p.next i :=0 for { if p != q { i++ if i == n-1 { // fmt.Println(q.name, ":", q.age) p.next = q.next p = p.next q = p.next i =0 continue } p = q q = q.next }el...阅读全文

简书 2020-10-20 23:32:39 GoSnail