Go reflect

reflection 反射(reflection)是程序在运行时通过检查其定义的变量和值获得对应的真实类型。 在计算机科学领域,反射是指一类应用能够自描述和自控制。此类应用采用某种机制来实现自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 反射机制就是在运行时动态的调用对象的方法和属性 每种编程语言的反射模型都不同,有些语言并不支持反射。支持反射的语言可以在程序编译期将变量的反射信...阅读全文

简书 2021-04-03 22:32:31 JunChow520

go中x/sync/semaphore解读

go中x/sync/semaphore解读semaphoreAcquireTryAcquireReleasesemaphore的作用如何使用分析下原理总结参考semaphoresemaphore的作用信号量是在并发编程中比较常见的一种同步机制,它会保证持有的计数器在0到初始化的权重之间,每次获取资源时都会将信号量中的计数器减去对应的数值,在释放时重新加回来,当遇到计数器大于信号量大小时就会进入休眠等待其他进程释放信号。go中的semaphore,提供sleep和wakeup原语,使其能够在其它同...阅读全文

51CTO博客 2021-04-03 21:27:27 mb6063e380e7d47

体系课-Go+Python双语言混合开发 盯紧技术先机 抓紧高薪机遇

download:体系课-Go+Python双语言混合开发 盯紧技术先机 抓紧高薪机遇 适合人群 首次开发微服务,高并发项目从1年初级开发进阶高级工程师提高crud水平,无自研框架底层原理经验技术栈单一,缺乏就业竞争力想攻克分布式常见面试问题 技术储备要求 具备Python基础Mysql数据库任意语言Web后端项目经验IL void access(int x) {//打通從根節點到x的途径,x最深for(R y=0; x; x=fa(y=x)) {splay(x),rs(x)=y,pushup(...阅读全文

51CTO博客 2021-04-03 20:02:46 mb60502f49a42bb

Go实践:Socket编程

Socket如何通信 在网络中要唯一确定一个进程需要用一个三元组(Protocol,IP,Port),IP地址唯一确定一台主机,再通过协议和端口唯一确定一个进程,这里也可以看到TCP和UDP可以绑定同一个端口。能唯一确定网络中的进程了,便可以利用这个标志在他们之间进行数据交互。 Socket基础 TCP/IP Go支持的IP类型 IPv4 IPv6 Go支持的协议类型 TCP UDP Go Socket编程 Go语言的net包对TCP和UDP协议提供了支持,可以借助net改包方便的开发Socke...阅读全文

简书 2021-04-03 12:32:34 HYIndex

go-concurrentMap

这个map是一个github上的开源项目,地址是https://github.com/fanliao/go-concurrentMap,对比golang中自带的线程安全map,这种map的实现方式比较简单,还是通过加锁来解决多routine操作map的问题。但是和sync.Map不同的是,cmap使用了分段锁的方式,先看下cmap主要的数据结构 image.png cmap其实就是一个ConcurrentMapShared结构体的切片,而每一个ConcurrentMapShared结构体都单独维...阅读全文

简书 2021-04-03 12:32:33 亖狼何需装羴

“竟想替代 C 语言?编程语言Go、Rust、C++ 和 Zig 生产力对比!

C 已经快 50 岁了。对于一瓶葡萄酒来说,这个年龄很棒,但对于快速发展的行业中的编程语言而言,它就不同了。在过去的十年中,出现了许多具有不同风格的新语言,所有这些语言都试图在某种程度上成为 C 语言的替代者。当一种新语言或多或少变得流行时 —— 开发人员开始编写基准测试,以展示该语言编写的软件性能,CPU 利用率和内存使用量以及二进制文件的大小等等。在这里,我想在不同的层面上进行一些实验 —— 编程语言的 UX(用户体验),使用这种语言时开发人员的效率,使用它们的容易程度,常见的挫败感,阅读代...阅读全文

51CTO博客 2021-04-03 07:53:24 mb6063e380e7d47

Golang Context深入理解

Golang Context深入理解 Context背景 和 适用场景 golang在1.6.2的时候还没有自己的context,在1.7的版本中就把golang.org/x/net/context包被加入到了官方的库中。golang 的 Context包,是专门用来简化对于处理单个请求的多个goroutine之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API 调用。 比如有一个网络请求Request,每个Request都需要开启一个goroutine做一些事情,这些...阅读全文

51CTO博客 2021-04-02 11:36:03 mob604756e7db9c

Golang的反射reflect深入理解和示例

Golang的反射reflect深入理解和示例 【记录于2018年2月】 编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 每种语言的反射模型都不同,并且有些语言根本不支持反射。Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自...阅读全文

51CTO博客 2021-04-02 11:27:16 mob604756e7db9c

Golang面向对象编程之构造函数【struct&new】

Golang面向对象编程之构造函数【struct&new】 201808 构造函数是一种特殊的方法,主要用来在创建对象时初始化对象,即为对象成员变量赋初始值。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们,即构造函数的重载。 Golang里面没有构造函数,但是Golang却可以像C++一样实现类似继承、构造函数一样等面向对象编程的思想和方法。Golang里面要实现相关的构造函数定义可以通过通过new来创建构造函数。 一个简单的构造函数的实现 定义一个结构 ty...阅读全文

51CTO博客 2021-04-02 11:22:36 mob604756e7db9c

Golang面向对象编程之继承&虚基类【组合&接口】

Golang面向对象编程之继承&虚基类【组合&接口】 201808 相关说明 Golang里面没有像C++一样有继承相关的概念,但是我们却可以实现继承相关的用法,这就要用到struct、interface这两个结构。 Golang里面有组合的概念,也就是一个struct 里面可以包含一个或者多个struct,struct可以近似理解为面向对象编程中的class,但是不能等同,有很多区别。如果一个struct实现了某个接口的所有方法,那么只要是包含这个struct的所有其他struct也都是实现了...阅读全文

51CTO博客 2021-04-02 11:21:37 mob604756e7db9c

Golang interface接口深入理解

Golang interface接口深入理解 interface 介绍 如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键。在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。 Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。 没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它在效果上实现了类似于C++的“多态”概念,虽然与C++的多态在语法上并...阅读全文

51CTO博客 2021-04-02 11:42:49 mob604756e7db9c

Go实践:基于Thrift框架的Go-RPC简单示例

Thrift架构简介 Thrift自顶向下可分为四层 Server(single-threaded, event-driven)服务器进程调度 Processor(compiler generated)RPC接口处理函数分发,IDL定义接口的实现将挂接到这里面 Protocol (JSON, compact etc)协议,定义数据传输格式 TBinaryProtocol(二进制格式) TCompactProtocol(压缩格式) TJSONProtocol (JSON格式) TDebugProt...阅读全文

简书 2021-04-02 23:32:42 HYIndex

OpenTelemetry 简析

OpenTelemetry 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方 vendor 无关的服务。 2021.02.10,OpenTelemetry 的 tracing spec 达到 1.0 版本 (link),基于这个里程碑,笔者对 OpenTelemetry 进行了探索,判断在可观测性领域带来的价值和发展前景。 下面给出笔者对 OpenTelemetry 的理解,抛砖引玉。由于笔者能力有限,理解不当...阅读全文

简书 2021-04-02 23:32:40 阿里云云栖号

go语言vim怎么设置

golang vim 插件设置多数情况使用vim编写golang代码,需要有语法高亮显示以及自动format。为此需要给vim编辑器增加支持golang语法的插件,插件配置的方法如下:1、下载vim插件管理工具,如果有git的话可以直接用git clonehttps://github.com/tpope/vim-pathogen2、在建立文件夹~/.vimmkdir ~/.vim3、拷贝vim-pathogen下的autoload文件夹到~/.vim下:4、在~/.vim下建立bundle文件夹...阅读全文

简书 2021-04-02 23:32:36 也许会了

sync.map

image.png mu是在阻塞操作时加的锁; read和dirty是两个map,可以把read理解为dirty的缓存(之后会详解sync.map中的读操作),且需要注意read和dirty中存储的value都是指针; misses是一个int值,用于记录在read中没有读到但在dirty中存在的值的次数(缓存未命中)且在misses值到一个阈值之后会发生一次dirty转换为read(后面简称dr转换); image.png Load方法比较简单,用于从map中获取对应key的value,主要逻...阅读全文

简书 2021-04-02 23:32:36 亖狼何需装羴

Go-Struct

自定义类型 //将NewString定义为string类型 type NewString string 类型别名 type byte = uint8 type rune = int32 go 结构体 Go语言提供了一种自定义数据类型,可以封装多个基本数据类型,这种数据类型叫结构体 定义结构体 type StructName struct { field1 fieldType field2 fieldType … } type person struct { name string city st...阅读全文

简书 2021-04-02 23:32:32 SodaCrush

2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。

2021-04-02:给定一个正方形或者长方形矩阵matrix,实现zigzag打印。[[0,1,2],[3,4,5],[6,7,8]]的打印顺序是0,1,3,6,4,2,5,7,8。 福大大 答案2021-04-02: 两个for循环嵌套。 外层循环。先遍历第一列,再遍历不包含列号为0的最后一行。每循环一次,修改标志位。 内层循环。根据标志位判断,从左下到右上,还是从右上到左下。 代码用golang编写。代码如下: package main import "fmt" func main() {...阅读全文

简书 2021-04-02 23:32:32 福大大架构师每日一题

手撸golang etcd raft协议之7

手撸golang etcd raft协议之7 缘起 最近阅读 [云原生分布式存储基石:etcd深入解析] (杜军 , 2019.1) 本系列笔记拟采用golang练习之 gitee: https://gitee.com/ioly/learning.gooop raft分布式一致性算法 分布式存储系统通常会通过维护多个副本来进行容错, 以提高系统的可用性。 这就引出了分布式存储系统的核心问题——如何保证多个副本的一致性? Raft算法把问题分解成了四个子问题: 1. 领袖选举(leader ele...阅读全文

简书 2021-04-02 23:32:31 老罗话编程