Go语言中文网 为您找到相关结果 1832

区块链和数据库

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链技术是一种不依赖第三方、通过自身分散式节点进行网路数据的存储、验证、传递和交流的一种技术方案。因此,有人从金融会计的角度,把区块链技术看成是一种分散式开放性去中心化的大型网路记账薄,任何人任何时间都可以採用相同的技术标准加入自己的信息,延伸区块链,持续满足各种需求带来的数据录入需要。 通俗一点说,区块链技术就指一种全民参与记账的方式。所有的系统背后都有一个资料库,你可以把资料库看成是就是一个大账本。那麽谁来记这个账本就变得很重要。目前就是谁的系统谁来记账,微信的账本就是腾讯在记,淘宝的账本就是阿裡在记。但现在区块链系统中,系统中的每个人都可以有机会参与记账。在一定时间段内如果有任何数据变化,系统中每个人都可...阅读全文

Go语言之类型断言与反射

目录 小记 make与new的区别 map操作 类型断言 反射 1. 变量的内在机制 2. 反射与空接口 3. 怎么分析? 4. 常用类型的变量类型分析 5. 通过反射获取结构体的字段值信息和类型信息 6. 通过反射给结构体字段赋值 7. 获取结构体方法的类型信息 8. 通过反射调用结构体的方法 9. 通过反射获取结构体字段的tag信息 小记 make与new的区别 make()用来分配引用类型的内存,比如map、slice以及channel new()用来分配除了引用类型以外的所有其他类型的内存,比如int、数组等; new返回类型的指针; package main import `fmt` func main() { var a *int = new(int) fmt.Println(a...阅读全文

博文 2020-04-27 19:32:58 CaiGuangyin

基于 MySQL Binlog 实现可配置的异构数据同步

随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经 不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们在业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 Part.1 现有方案及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张MySQL 表中,这张中间表对应了业务需要的Elasticsearch 索引,每一列对应索引中的一个Mapping 字段。通过脚本以 Crontab 的方式,读取 MySQL 中间表中 UTime 大于上一次读取时间的所有数据,即该段时间内的增量,写入Elasticsearch。 所以,一旦业务逻辑中有相...阅读全文

博文 2020-04-17 07:32:49 Minna_1122

【他山之石】大话密码学·默克尔树·章三 扬前帆

前帆(Jib):主桅杆前面使用的帆 基本定义 Merkle Tree 是由计算机科学家 Ralph Merkle 在很多年前提出的,并以他本人的名字来命名,中文翻译过来叫默克尔树,也叫哈希树。 哈希树 主要用途 Merkle Tree 常用来做完整性校验的,所谓的完整性校验,就是检查一下数据有没有损坏或者被恶意篡改。 Merkle Tree 的最大的应用场合就是在点对点网络上,早期的 BT ,电驴,快播等各种下载器,以及目前普遍使用的 Git 版本控制系统,NMP包管理,GoLang 包管理,IPFS 协议以及比特币以太坊等等项目都用到了它。例子太多了……欢迎补充…… Merkle Tree Merkle Tree 如果直接去看定义,会看到一张比较复杂的图,可能会把你一下子吓到,然后就不想学...阅读全文

2019-08-07

2019-08-07MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。mongodb特点它的特点是高性能、易部署、易使用,存储数据非常方便。主要功能特性有:*面向集合存储,易存储对象类型的数据。模式自由。*支持动态查询。*支持完全索引,包含内部对象。*支持查询。*支持复制和故障恢复。*使用高效的二进制数据存储,包括大型对象(如视频等)。*自动处理碎片,以支持云计算层次的扩展性。*支持 Gol...阅读全文

博文 2019-08-08 10:33:16 Overonenewsi

【go】指针的风骚操作(结合unsafe.point与uintptr)

指针是具有类型的 总所周知,声明的变量都是有具体类型的,而对于存储指针的变量是否有类型,有时是一头雾水,在此做一个小总结,指针是具有类型的。 就如: var c int fmt.Println(reflect.TypeOf(c)) d := &c fmt.Println(reflect.TypeOf(d)) 结果: int *int 那可能一些人就会有疑问,指针既然具有类型,那指针之间可以进行类型转换吗。就如下面一样操作 #(*Type)ptr a := (*int)(&xx) 在Go 的指针是不支持指针运算和转换 下面就详细说一下指针类型怎么互相转换 不同类型指针的互相转换 go语言是强语言类型,不同类型,不可以跨类型计算、赋值等操作。 如下: num := 2 p := &num fp ...阅读全文

博文 2020-04-06 21:32:54 dongzaidong

GoLang 学习笔记 - 基本数据类型

GoLang 的数据类型   在 GoLang 中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。   GoLang 有以下几种数据类型: 类型 描述 布尔 基本数据类型,只有两个值,并且只可以是常量 —— true 或者 false。 数值 基本数据类型,GoLang 支持整型、浮点型数字,并且支持复数,其中位的运算采用补码。 字符串 基本数据类型,GoLang 中 string 类型被官方定为基本数据类型,是一串由单个字节连接起来的字符序列。GoLang 字符串的字节使用 UTF-8 编码标识 Unicode 文本。 派生 派生类型包括很多种,其中有:指针、数组、结构体、管道、切片、接口...阅读全文

博文 2019-07-20 20:32:39 凉丶心园

golang Map与sync.Map

内置的map package main import ( "strconv" "fmt" "sync" ) var map_obj = make(map[string]int) // 应对高并发时不安全 // 定义设置map数据类型的方法 func set(key string, val int) { map_obj[key] = val } // 定义读取map数据类型的方法 func get(key string) int { return map_obj[key] } func main() { //map_obj := make(map[string]int, 6) //map_obj["name"] = 666 //var map_obj map[string]int //fmt....阅读全文

博文 2020-04-17 23:32:46 小麦客

图解kubernetes中api聚合机制的实现

kubernetes中apiserver的设计无疑是复杂的,其自身内部就包含了三种角色的api服务,今天我们一起来臆测下其内部的设计,搞明白aggregator、apiserver、apiExtensionsServer(crd server)的设计精要 1.从web服务到web网关到CRD apiserver还是蛮复杂的,今天我们只讨论其kube-aggregator/apiserver/apiextensions三者架构上的设计,而不关注诸如请求认证、准入控制、权限等等 1.1 最基础的REST服务 一个最基础的Rest服务通常会包括一个resource资源和一组HTTP请求的方法, 在kubernetes中被称为一个REST,其内部还内嵌了一个Store(可以理解为继承),其提供了针...阅读全文

博文 2020-03-04 18:35:26 8小时_2020

HyperLogLog 算法在监控场景中的运用

HyperLogLog 算法在监控场景中的运用 背景介绍 OpsMind 低代码开发平台监控模块,为了支撑B站众多监控数据的管理场景,研发人员在分布式层做了众多优化工作。为了更好的掌握每个 metric 自身的空间占用以及各个存储节点的时序分布情况,需要对每个指标的时序数目(基数)有一个大致的预估(允许存在误差),以便于 OpsMind 系统能更加合理的均衡各个存储节点的负载。 为何选用 HyperLogLog OpsMind 系统指标的形式与 prometheus 完全兼容(在此 prometheus 基础上做了一些拓展),一个监控指标(metric)的时序数,可以看做是该指标所有 labels 的组合(对 labels 求 fingerprint)数目。在对每个指标时序集合进行统计的过程...阅读全文

博文 2020-03-16 17:38:14 啊哟喂_

解析DataWorks数据集成中测试连通性失败问题

摘要: 大家好,这里和大家分享的是DataWorks数据集成中测试连通性失败的排查思路。与测试连通性成功与否的相关因素有很多,本文按照多个因素逐步排查,最终解决问题,希望大家以后再遇到此类问题,请参考此文,相信能够顺利解决您的问题。 一、问题现象 此案例中,DataWorks项目位于华东2,RDS Mysql数据源位于华东1(VPC网络),使用DataWorks进行数据同步之前,首先需要建立数据源,但在建立数据源RDS Mysql的配置页面,“测试连通性”失败,即数据源并没有连通。 1 二、问题处理过程 (1)首先,应该判断该数据源是否支持“测试连通性” 遇到测试连通性问题,首先应该判断该数据源是否支持“测试连通性”,请大家参考《各数据源测试连通性支持情况》。...阅读全文

至联云讲解《IPFS生态最新进展及分布式存储未来市场潜力》

IPFS作为一种新型的储存技术,致力于改变传统存储的提供与使用方式,是存储应用普及的重要突破口。目前客户遍及中国8个省份,三年内将遍及东南亚,走出中国。公司立足中国安徽,服务全球存储市场 IPFS生态近期有比较大的发展,比如内容分享、社交网络、身份服务、区块链应用、金融电子化等等各个方面。非常重要的是,目前有比较多的浏览器开始支持IPFS,包括Firefox, Chrome, Brave, Opera 等。IPFS 0.5.0改进巨大IPFS 0.5版是IPFS 到目前为止最大的一次更新。这次更新主要在IPFS的效率、安全和更具弹性方面得到巨大提升。效率的提升是全方位的,重要指标包括:2倍存储速度提升:现在IPFS存储文件的速度是普通文件系统的2.5倍速度;2.5倍广播速度提升:一千个节点测...阅读全文

博文 2020-05-28 21:32:56 雨中的泡面

Golang实现UDP Server

Server端1、net.ListenUDP() 监听UDP服务2、net.UDPConn.ReadFromUDP() 循环读取数据 3、net.UDPConn.WriteToUDP() 写数据package main import ( "fmt" "log" "net" ) func main() { // 监听UDP服务 udpConn,err := net.ListenUDP("udp",&net.UDPAddr{ IP: net.IPv4(0,0,0,0), Port: 9090, }) if err != nil{ log.Fatal("Listen failed,",err) return } // 循环读取消息 for { var data [1024]byte n,addr,...阅读全文

博文 2020-06-08 00:33:47 筑梦攻城狮

8. Go 语言流程控制:if-else

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. 条件语句模型 Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 今天先来讲讲 if-else 条件语句 Go 里的条件...阅读全文

博文 2020-04-30 08:32:41 Python编程时光

Go语言的Channel

什么是Channel Channel 是 Go 中为 goroutine 提供的一种通信机制,channel 是有类型的,而且是有方向的,可以把 channel 类比成 unix 中的 pipe。 channel的使用 channel创建 channel 字面意义是 “通道”,类似于 Linux 中的管道。声明 channel 的语法如下: chan T // 可以接收和发送类型为 T 的数据 chan<- float64 // 只可以用来发送 float64 类型的数据 <-chan int // 只可以用来接收 int 类型的数据 复制代码使用make初始化Channel,并且可以设置容量: make(chan int, 100) 复制代码因为 channel 是一个引用类型,所以在它被...阅读全文

博文 2020-06-07 12:34:22 隔壁小王_

go 字符串

什么是字符串? 定义 字符串是一个不可改变的字节序列。 字符串的定义 package main import "fmt" import "strings" import "strconv" func stringtest() { var name string = "Cloud natic cloud" fmt.Println(name) 输出 Cloud natic cloud // 常用方法 // 1、转译 字符 \n \t address := "中国\n上海" fmt.Println(address) 输出 中国 上海 // 2、反引号,以原生形式输出,包括特殊字符,防止注入*** var address2 string = ` 上海迪士尼度假乐园\n 浦东 上海 静安寺 上海\n...阅读全文

博文 2020-01-08 23:33:13 水滴石川1

Golang 复合数据类型:接口

接口 Golang 不是传统的面向对象编程语言,它没有类和继承的概念,但是有非常灵活的接口概念,通过它可以实现很多面向对象的特性,接口提供了一种方式来说明这样的行为:如果谁能搞定这件事,它就可以在这里调用。接口定义了一组方法(方法集),这些方法都是抽象的,即不包含实现这些方法的代码,接口也不包含变量。Golang 中的接口方法不会很多,一般只有0~3个方法;而且 Golang 是接口可以有值,表现为一个接口变量或者一个值。 //声明接口类型speaker //不管是什么类型,只要实现了speak方法,都可认为是接口类型 type speaker interface { speak() } //声明三个具体实现接口方法的结构体 type cat struct { } func (c cat)s...阅读全文

博文 2020-06-03 16:32:43 sunlingbot

QuickBI助你成为分析师——搞定数据源

摘要: QuickBI支持多种数据源连接,添加数据源是数据分析展示的第一步,下面来详细介绍一下产品数据源支持情况! Quick BI是一个基于云计算的灵活的轻量级的自助BI工具服务平台,提供海量数据即时分析 ,拖拽式操作、丰富的可视化效果,帮助您轻松自如地完成数据分析、业务数据洞察 。它不仅是业务人员看数据的工具 ,更是数据化运营的助推器,解决大数据应用“最后一公里”的问题,实现“人人都是数据分析师”。 产品的核心流程如下图所示, ![图片描述](http://img.blog.csdn.net/20180328113309600?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveXVucWlpbnNpZ2h0/font/5a6L5...阅读全文

mvc

1、MVC这个阶段主要是快速实现产品,没考虑其他的,设计之初划分多个app,app内高类聚,app之间低耦合,DB表设计好了之后,实现view层功能需求,利用Django来快速实现功能,后端有许多预留设计,避免产品逻辑的变更带来整个表结构的变动,架构如下图; MVC架构nginx是负载均衡,通过权重法,把请求发送到多个Django服务(其实中间还有一个uwsgi),如果是静态请求,nginx直接返回给客户端,如果是其他请求,通过uwsgi传给Django,Django拿到请求,处理响应请求。耗时大的需要异步的,我们用celery处理,使用mysql作为数据库,redis作为缓存,加快请求的响应,减轻mysql负担,同时还有实时消息通知的需要使用了Nginx Push Module。问题以及处...阅读全文

博文 2019-12-17 18:32:49 yustyal

6. Go 语言数据类型:字典与布尔类型

Hi,大家好。 我是明哥,在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. 字典 字典(Map 类型),是由若干个 key:value 这样的键值对映射组合在一起的数据结构。 它是哈希表的一个实现,这就要求它的每个映射里的key,都是唯一的,可以使用 == 和 != 来进行判等操作,换句话说就是key必须是可哈希的。 什么叫可哈希的?简单来说,一个不...阅读全文

博文 2020-04-28 08:32:43 Python编程时光

数据结构和算法(Golang实现)(27)查找算法-二叉查找树

二叉查找树 二叉查找树,又叫二叉排序树,二叉搜索树,是一种有特定规则的二叉树,定义如下: 它是一颗二叉树,或者是空树。 左子树所有节点的值都小于它的根节点,右子树所有节点的值都大于它的根节点。 左右子树也是一颗二叉查找树。 二叉查找树的特点是,一直往左儿子往下找左儿子,可以找到最小的元素,一直往右儿子找右儿子,可以找到最大的元素。 看起来,我们可以用它来实现元素排序,可是我们却使用了二叉堆来实现了堆排序,因为二叉查找树不保证是一个平衡的二叉树,最坏情况下二叉查找树会退化成一个链表,也就是所有节点都没有左子树或者没有右子树,树的层次太深导致排序性能太差。 使用二分查找,可以很快在一颗二叉查找树中找到我们需要的值。 我们来分析二叉查找树添加,删除,查找元素的方法。 一、添加元素 以下是一个二叉查...阅读全文

博文 2020-04-07 16:32:51 陈星星

35. Go 语言中关于接口的三个"潜规则"

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 1. 对方法的调用限制 接口是一组固定的方法集,由于静态类型的限制,接口变量有时仅能调用其中特定的一些方法。 请看下面这段代码 package main import "fmt" type Phone interface { call() } type iPhone struct ...阅读全文

博文 2020-06-16 08:32:40 Python编程时光

14. Go 语言中的类型断言是什么?

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Type Assertion Type Assertion(中文名叫:类型断言),通过它可以做到以下几件事情 检查 i 是否为 nil 检查 i 存储的值是否为某个类型 具体的使用方式有两种: 第一种: t := i.(T) 这个表达式可以断言一个接口对象(i)里不是 nil,并且...阅读全文

博文 2020-05-11 09:32:44 Python编程时光

simpread-golang select-case 实现机制

本文由 简悦 SimpRead 转码, 原文地址 https://hitzhangjie.github.io/jekyll/update/2018/05/19/golang-select-case%E5%AE%9E%E7%8E%B0%E6%9C%BA%E5%88%B6.html 在介绍 select-case 实现机制之前,最好先了解下 chan 操作规则,明白 goroutine 何时阻塞,又在什么时机被唤醒,这对后续理解 select-case 实现有帮助。所以接下来先介绍 chan 操作规则,然后再介绍 select-case 的实现。 1.1 chan 操作规则 1 当一个 goroutine 要从一个 non-nil & non-closed chan 上接收数据时,gorouti...阅读全文

博文 2019-10-08 18:32:57 aside section ._1OhGeD

Go语言(十五) 反射

反射 变量介绍 变量的内在机制 类型信息,这部分是元信息,是预先定义好的 值类型,这部分是在程序运行过程中动态改变的 反射介绍 反射与空接口 空接口可以存储任何类型的变量 在程序运行时动态获取变量的类型信息和值信息,就叫反射 import ( "fmt" "reflect" ) func TestType(a interface{}) { //获取类型(静态信息) t := reflect.TypeOf(a) kind := t.Kind() switch kind { case reflect.Int: fmt.Printf("a is a int\n") a = 2 case reflect.String: fmt.Printf("a is a string\n") } fmt.Prin...阅读全文

博文 2020-04-23 16:33:23 wx5b285b48ed74e

【Go语言踩坑系列(一)】基本数据类型

声明 本系列文章并不会停留在Go语言的语法层面,更关注语言特性、学习和使用中出现的问题以及引起的一些思考。 要点 本文只关注Go语言的基本类型:如整型、浮点型、常量相关的内容。字符串、数组和切片等高级类型会在下一篇文章中讲述。 包 初始化顺序:当前包级别变量 -> 导入外部包的init() -> 当前包内的init() -> main()。通常可将一个包导入但是不使用的方式,初始化某些配置数据。 下面这段代码会运行config包和model包下的init()方法: import ( "cmdb-bg/cmd" _ "cmdb-bg/config" _ "cmdb-bg/model" ) 零值 我们都知道,当我们仅仅声明一个变量、但未对其进行初始化的时候,Go会给每种变量类型赋一个零值: 整型...阅读全文

从零学习 Go 语言(26):通道死锁经典错误案例详解

![](http://image.iswbm.com/20200607145423.png) 在线博客:http://golang.iswbm.com/ Github:https://github.com/iswbm/GolangCodingTime --- ## 错误示例一 看下面这段代码 ```go package main import "fmt" func main() { pipline := make(chan string) pipline <- "hello world" fmt.Println(<-pipline) } ``` 运行会抛出错误,如下 ``` fatal error: all goroutines are asleep - deadlock! ``` 看起来好...阅读全文

博文 2020-07-08 08:47:18 hello_wbm

Golang学习笔记--Slice

slice切片(Slice)由指针、长度、容量组成,属于引用类型,是一种基于数组的可变长数据类型,与数组array类型关系密切,其中: 1. 指针指向所引用数组的特定元素,该元素为slice的首元素,但不一定是数组的首元素 2.长度(len)为切片的长度 3.容量,从指针指向的数组的位置,到数组最后元素位置的长度 使用append可以向切片添加元素,像slice添加元素,实际上是向slice所引用的数组添加元素,如果对应数组存在空间添加,则直接添加元素,当切片所引用的数组空间已满,无法再添加元素时,则底层,会新建一个匿名数组,并将slice内的元素从旧的数组中copy到新的匿名数组,该匿名数组的大小,为slice的容量*2,slice则指向这个新的匿名数组,同时在数组中添加元素,完成appe...阅读全文

通过例子学习 Go 和 Rust ---- 指针

指针表示内存上的一段数据的位置、长度、类型信息。在 Go 和 Rust 里面都可以操作指针,咱用一个最简单的例子来看看它们的异同之处。 Go func zeroval(ival int) { ival = 0 } func zeroptr(iptr *int) { *iptr = 0 } func main() { i := 1 fmt.Println("initial:", i) zeroval(i) fmt.Println("zeroval:", i) zeroptr(&i) fmt.Println("zeroptr:", i) fmt.Println("pointer:", &i) } initial: 1 zeroval: 1 zeroptr: 0 pointer: 0xc00002...阅读全文

博文 2020-03-03 16:32:45 Tericoder

Go实现数据结构--线性表之顺序表

使用golang语言的interface接口类型创建顺序表 package main import "fmt" // 数据结构之线性表--顺序表 type List struct { Len int //线性表长度 Capacity int // 表容量 Prt *[]interface{} // 指向线性表空间指针 } // 初始化 func (l *List) ListInit(capacity int) { l.Capacity = capacity l.Len = 0 m := make([]interface{}, capacity) l.Prt = &m } // 判空 func (l *List) ListIsEmpty() bool { if l.Len == 0 { ret...阅读全文

博文 2020-04-09 21:32:42 阿鸠先生

好程序员大数据培训之掌握Hive的静态分区与动态分区

分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不关心的分区,快速定位,提高查询效率。分动态和静态分区两种: 1.静态分区:若分区的值是确定的,那么称为静态分区。新增分区或者是加载分区数据时,已经指定分区名。 createtableifnotexistsday_part1( uidint, unamestring ) partitionedby(yearint,monthint) rowformatdelimitedfieldsterminatedby'' ; ##加载数据指定分区 loaddatalocalinpath'/root/Desktop/student.txt'intotabl...阅读全文

4. Go 语言数据类型:byte、rune与字符串

Hi,大家好呀,我是一个刚学习 Go 语言不久的新手,在入门 Golang 的这段时间里,我写了很多详细的学习笔记,很适合新手学习噢。这些文章已经发布在我的个人微信公众号里:《Go编程时光》里,今天开始将文章内容搬运到这里,希望有更多的人看到,给更多的人带来帮助,但是这里文章会相对滞后,想获取最新文章,可以前往关注《Go编程时光》,请放心关注,这是一个纯分享的号,完全没有广告。 1. byte 与 rune byte,占用1个节字,就 8 个比特位,所以它和 uint8 类型本质上没有区别,它表示的是 ACSII 表中的一个字符。 如下这段代码,分别定义了 byte 类型和 uint8 类型的变量 a 和 b import "fmt" func main() { var a byte = 6...阅读全文

博文 2020-04-25 20:32:42 Python编程时光

Golang——接口

接口(interface)定义一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。 在go语言中,接口(interface)是一种抽象的类型。 interface是一组method 的集合,是duck-type programming的一种体现,不关心属性(数据),只关心行为(方法)。 Go语言提倡面向接口编程。 定义接口如下: type 接口类型名 interface { 方法名1(参数列表1) 返回值列表1 方法名2(参数列表2) 返回值列表2 } 其中, 接口名:Go语言中的接口命名时候,一般会再单次后面添加er,例如写文件的接口叫Writer。 type animal interface { eat() string } 一个对象只要全部实现了接口中的方法,那么就实现...阅读全文

博文 2020-06-13 17:32:45 Cici冬雪

带你学够浪:Go语言基础系列 - 10分钟学方法和接口

文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定。可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 正文共4302字,预计阅读时长 11 分钟 对于一般的语言使用者来说 ,20% 的语言特性就能够满足 80% 的使用需求,剩下在使用中掌握。基于这一理论,Go 基础系列的文章不会刻意追求面面俱到,但该有知识点都会覆盖,目的是带你快跑赶上 Golang 这趟新车。 最近工作上和生活上的事情都很多,这篇文章计划是周末发的,但是周末太忙时间不够,同时为了保证文章质量,反复修改到现在才算完成。 有时候还是很想回到学校,一心只用读书睡觉打游戏的日子,成年人的世界总是被各种中断。不过,不用担心 lemon 能处理好,答应大家要写完的 Go 基础系列可能会迟到,...阅读全文

博文 2020-06-16 19:32:43 柠檬橙1024

Go之断言类型(assert type)

1.背景介绍: 笔者最近在使用一个数据结构实现多个接口,但是却发现想要在一段时间内转换成接口1,另外一段时间转换成接口2,所以也就使用到了断言类型。在看过断言类型之后,觉得还是很有必要讲一讲这个断言类型,于是便有了这篇文章。2.断言类型介绍:接口类型提供一种,将接口类型转换成具体类型的转换方法,也就是断言类型(assert type)。使用方法如下所示:t := i.(T) // T:表示的是具体的数据类型,i:表示的是接口变量i,t:表示的是转换之后的变量。这个语句实现的功能是:将接口变量i按照类型T转换成t,其中t中的值是i转换得来的,一旦转换不成功就会触发一个panic。除此之外还有另外一个写法:t, ok := i.(T)// 表达式里面多了一个ok,实现的功能是:将接口i按照类型T...阅读全文

博文 2020-06-17 05:32:42 灰常出色

Golang 之context库用法

1. context Golang 中的context 是Go语言在 golang1.7 发布时新增的标准包 目的是增强Golang开发中并发控制技术 简单来讲当一个服务启动时,可能由此服务派生出多个多层级的 goroutine , 但是本质上来讲每个层级的 goroutine 都是平行调度使用,不存在goroutine '父子' 关系 , 当其中一个 goroutine 执行的任务被取消了或者处理超时了,那么其他被启动起来的Goroutine 都应该迅速退出,另外多个多层的Goroutine 想传递请求域的数据该如何处理? 如果单个请求的Goroutine 结构比较简单,或者处理起来也不麻烦,但是如果启动的Goroutine 是多个并且结构层次很深那么光是保障每个Goroutine 正常退...阅读全文

博文 2020-06-24 18:32:42 楚江云

分布式监控系统WGCLOUD,server如何做水平扩容啊

首先,wgcloud从v3.0开始支持server集群模式,master-slave。 下载:http://www.wgstart.com 500个监控主机以下,不用做server集群和负载均衡,server是springboot架构,天然支持高并发。 注意server的配置,config/application.yml #自定义配置参数 base: #登陆账号admin的密码 admindPwd: 111111 #通信token,agent端和此保持一致 wgToken: wgcloud #是否开启公众看板,yes开启,no关闭,公众看板页面无需登陆 dashView: yes #数据表监控间隔,单位秒,默认60分钟 dbTableTimes: 3600 #服务接口监控间隔,单位秒,默认1...阅读全文

博文 2020-06-09 11:34:44 tianshiyeben

3.2.8Golang的map

总目录:https://www.jianshu.com/p/e406a9bc93a9 Golang - 子目录:https://www.jianshu.com/p/8b3e5b2b4497 map map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。 map的定义 语法: map[键数据类型]值数据类型 map类型的变量默认初始值为nil,需要使用make()函数来分配内存。 语法: make(map[键数据类型]值数据类型, [容量]) map的基本使用 package main import "fmt" func main() { // 定义一个map 并初始化 长度最好在初始化时就设置好 scoreMap := make(map[str...阅读全文

博文 2020-03-17 23:32:46 寒暄_HX

25. 学习 Go 协程:详解信道/通道

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Go 语言之所以开始流行起来,很大一部分原因是因为它自带的并发机制。 如果说 goroutine 是 Go语言程序的并发体的话,那么 channel(信道) 就是 它们之间的通信机制。channel,是一个可以让一个 goroutine 与另一个 goroutine 传输信息的通道...阅读全文

博文 2020-06-02 08:32:41 Python编程时光

Golang UDP的连接性(网关如何阻碍Golang的UDP通信)

自知乎专栏(防止挂掉):https://zhuanlan.zhihu.com/p/94680036golang中udp的连接性 曾经浮华装逼招雷劈​关注他golang中udp分为已连接和未连接两种,两者在发送、接收消息行为模式上有重大区别背景前段时间,我们组开发一个紧急需求,需要与其它部门某组进行协议交互,暂且称之为B组。 B组底层通信采用UDP形式,使用pb为传输协议,本来很简单的事情,可是联调过程中却遇到一个大坑,关于golang中udp的连接性问题。我们这边采用golang技术栈,以DialUDP的接口与B组交互,先send数据,再recv数据。就这么简单的逻辑,却出问题了,B组能收到我们的请求数据,我们这边却无法接收到B组的返回数据。经过与B组交流,他们那边的架构比较奇怪。我们设计系...阅读全文

博文 2020-05-04 23:32:44 鹿沐浔

数据结构和算法(Golang实现)(28)查找算法-AVL树

AVL树 二叉查找树的树高度影响了查找的效率,需要尽量减小树的高度,AVL树正是这样的树。 一、AVL树介绍 AVL树是一颗严格自平衡的二叉查找树,1962年,发明者Adelson-Velsky和Landis发表了论文,以两个作者的名字命名了该数据结构,这是较早发明的平衡二叉树。 定义如下: 首先它是一颗二叉查找树。 任意一个节点的左右子树最大高度差为1。 由于树特征定义,我们可以计算出其高度h的上界h<=1.44log(n),也就是最坏情况下,树的高度约等于1.44log(n)。 假设高度h的AVL树最少有f(h)个节点,因为左右子树的高度差不能大于1,所以左子树和右子树最少节点为:f(h-1),f(h-2)。 因此,树根节点加上左右子树的节点,满足公式f(h) = 1 + f(h-1) ...阅读全文

博文 2020-04-07 16:32:57 陈星星

25. 学习 Go 协程:详解信道/通道

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime Go 语言之所以开始流行起来,很大一部分原因是因为它自带的并发机制。 如果说 goroutine 是 Go语言程序的并发体的话,那么 channel(信道) 就是 它们之间的通信机制。channel,是一个可以让一个 goroutine 与另一个 goroutine 传输信息的通道,我把他叫做...阅读全文

博文 2020-06-02 11:35:02 王一白

当查询的数据来自多个数据源,有哪些好的分页策略?

概述 在业务系统开发中,尤其是后台管理系统,列表页展示的数据来自多个数据源,列表页需要支持分页,怎么解决? 问题 如上图,数据源可能来自不同 DB 数据库,可能来自不同 API 接口,也可能来自 DB 和 API 的组合。 我这也没有太好的解决方案,接到这样的需求,肯定首先和需求方沟通,这样分页是否合理。 无非就两种方案: 数据定期同步,首先将查询的数据汇总到一个地方,然后再进行查询分页。 内存中分页,首先将查询的数据存放到内存,然后再进行查询分页。 如果以某一数据源进行分页,其他字段去其他数据源获取,这样还好处理一些。 如果以多个数据源融合后再分页的话,就数据定期同步 或 内存中分页吧。 数据定期同步方案可以根据实际情况去设计同步频率,至于同步到 ES/MySQL/MongoDB 自己决定...阅读全文

博文 2020-03-16 13:37:08 新亮笔记

Go之URL Query String 编码器和解码器

项目地址 https://github.com/hetiansu5/... 简介 使用Go语言实现的URL Query字符串编码器和解码器。写好后才发现官方已有实现的querystring,但只实现了编码器,没有解码器,且只支持顶层数据结构为结构体,实现上不算特别完善。 特性 支持丰富的Go数据结构互转: 基础数据类型: 有符号整型[8,16,32,64] 无符号整形[8,16,32,64] 字符串 布尔值 浮点型[32,64] 字节 字面量 复合数据类型: 数组 切片 哈希 结构体 嵌套结构体 支持顶层的数据结构为数组 切片 哈希,不仅仅是结构体 支持自定义的URL-Encode编码规则,支持全局、局部设置方式,支持默认规则 支持自定义的键名映射规则(结构体Tag示例:query:"nam...阅读全文

Golang基础(六) | 接口

Interface类型 简单的说,interface是一组method签名的组合,我们通过interface来定义对象的一组行为。interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。详细的语法参考下面这个例子。 type Human struct { name string age int phone string } type Student struct { Human //匿名字段Human school string loan float32 } type Employee struct { Human //匿名字段Human company string money float32 } //Human对象实现Sayhi方法 func ...阅读全文

博文 2020-03-24 22:32:49 youzhihua

c++对象模型

使用c++有些年头了,有一本深度搜索c++对象模型的书写的很赞,很经典。本文是本书的读书笔记。 #### 关于对象 ##### 加上封装后的布局成本 c语言中如下声明一个结构体 ``` typedef struct point3d{ float x; float y; float z;}Point3d; ``` struct point3d 转化为class Point3d之后 ``` class Point3d { public: Point3d(float x = 0.0f, float y = 0.0f; float z = 0.0f) :_x(x),_y(y),_z(z){} private: float _x,_y,_y; } ``` 封装带来的布局成本增加了多少?实际是没有增加布...阅读全文

博文 2019-11-06 09:53:55 bytemode

36. 图解:Go 语言的反射三定律,也没什么难的嘛

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 当我在使用 Python 的时候,我甚至可以做到不需要知道什么是内省,什么是反射,就可以立即使用内省去做一些事情。 而在学习 Go 语言后,反射在我这却变成了一个难点,一直感觉这个 反射对象 的概念异常的抽象。 这篇文章还是会跟上篇文章一样,尽量使用图解来解释一些抽象的概念,如果...阅读全文

博文 2020-06-18 09:33:05 Python编程时光

Golang Map 实现 (四) map的赋值和扩容

golang map 操作,是map 实现中较复杂的逻辑。因为当赋值时,为了减少hash 冲突链的长度过长问题,会做map 的扩容以及数据的迁移。而map 的扩容以及数据的迁移也是关注的重点。 数据结构 首先,我们需要重新学习下map实现的数据结构: type hmap struct { count int flags uint8 B uint8 noverflow uint16 hash0 uint32 buckets unsafe.Pointer oldbuckets unsafe.Pointer nevacuate uintptr extra *mapextra } type mapextra struct { overflow *[]*bmap oldoverflow *[]*bma...阅读全文

博文 2020-04-30 10:32:41 搬砖程序员带你飞

Go实现数据结构--栈

使用golang语言的interface接口类型创建栈,栈可以操作各种数据类型,非常简洁方便 package main import "fmt" // 栈:先进后出,从栈顶取数据,栈低固定 type Stack struct { Top int // 栈顶 Capacity int // 栈容量 Prt *[]interface{} // 指向栈指针 } // 初始化栈 func (s *Stack) StackInitial(capacity int){ s.Capacity =capacity s.Top =0 // 使用interface类型,所有数据类型都能兼容 m:= make([]interface{},capacity) s.Prt =&m } // 元素入栈,栈顶上升 fun...阅读全文

博文 2020-04-09 18:32:54 阿鸠先生

流?I/O操作?阻塞?epoll?

一、流?I/O操作? 阻塞? (1) 流 可以进行I/O操作的内核对象 文件、管道、套接字…… 流的入口:文件描述符(fd) (2) I/O操作 所有对流的读写操作,我们都可以称之为IO操作。 当一个流中, 在没有数据read的时候,或者说在流中已经写满了数据,再write,我们的IO操作就会出现一种现象,就是阻塞现象,如下图。 (3) 阻塞 阻塞场景: 你有一份快递,家里有个座机,快递到了主动给你打电话,期间你可以休息。 非阻塞,忙轮询场景: 你性子比较急躁, 每分钟就要打电话询问快递小哥一次, 到底有没有到,快递员接你电话要停止运输,这样很耽误快递小哥的运输速度。 阻塞等待 空出大脑可以安心睡觉, 不影响快递员工作(不占用CPU宝贵的时间片)。 非阻塞,忙轮询 浪费时间,浪费电话费,占用...阅读全文

博文 2020-03-12 23:32:46 aceld