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

LeetCode 1311. Get Watched Videos by Your Friends

链接: https://leetcode-cn.com/problems/get-watched-videos-by-your-friends/ 难度:medium 解题思路:广搜找到对应level的所有朋友,然后累加相应的video,最后排序。go语言没有啥priority queue,图简单这里排序用的直接插入排序,有点挫 Golang的数据结构支持太少了,各种都要自己写,真是麻烦。。 func watchedVideosByFriends(watchedVideos [][]string, friends [][]int, id int, level int) []string { visited := map[int]int{} queue := []Person {Person{i...阅读全文

博文 2020-05-15 23:32:47 码农老姜

golang mongoldb

使用gopkg.in/mgo.v2库操作,插入操作主要使用mongodb中Collection对象函数原型 func (c *Collection) Find(query interface{}) *Query 查找的时候Find的参数都会用bson.M类型 type M map[string]interface{} 例如:bson.M{"name": "Tom"}相当直接mongodb的查询条件{"name": "Tom"} 连接数据库 package main import ( "fmt" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) // get mongodb db func getDB() *mgo.Database { session, e...阅读全文

博文 2019-08-29 20:32:45 Steven_25bb

MaxCompute访问TableStore(OTS) 数据

摘要: MaxCompute作为阿里云大数据平台的核心计算组件,承担了集团内外大部分的分布式计算需求。 免费开通大数据服务:https://www.aliyun.com/product/odps **前言** MaxCompute作为阿里云大数据平台的核心计算组件,承担了集团内外大部分的分布式计算需求。而MaxCompute SQL作为分布式数据处理的主要入口,为快速方便处理/存储EB级别的离线数据提供了强有力的支持。 随着大数据业务的不断扩展,新的数据使用场景在不断产生,在这样的背景下,MaxCompute计算框架也在不断的演化,原来主要面对内部特殊格式数据的强大计算能力,也正在一步步的开放给不同的外部数据。 之前我们介绍了怎样[在MaxCompute上处理存储在OSS上...阅读全文

从插入排序来理解 Go 的接口

插入排序 根据插入排序的思想,我们很容易就可以完成插入排序的代码如下。 func insertionSort(data []int) { lo, hi := 0, len(data) - 1 for i := lo + 1; i < hi; i++ { for j := i; j > lo && data[j] < data[j-1]; j-- { data[j], data[j-1] = data[j-1], data[j] } } } 复制代码我们可以验证一下,确实没有问题。 package main import ( "fmt" ) func main() { nums := []int{2, 3, 4, 1, 7, 9, 10, 21, 17} insertionSort(nums)...阅读全文

博文 2019-12-03 11:34:19 咔叽咔叽

MySQL数据库入门学习

课程介绍 本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 课程目标 让小白也能够熟练掌握常用的数据库使用技巧,理解数据库的存储结构 适合人群 数据库入门学习者 前端学习者 课时列表 • 课时1: MySQL概要 • 课时2:MySQL在windows下的安装 • 课时3:MySQL在linux下的安装 • 课时4:MySQL在Mac下的安装 • 课时5:MySQL配置 • 课时6:添加和删除数据库(DB) • 课时7:数据类型 • 课时8:添加和删除数据表(table) • 课时9:给数据表添加或者删除列 • 课时10:修改某个数据列的名字或者数据类型 • 课时...阅读全文

7. Go 语言数据类型:指针

Hi,大家好。 我是明哥,在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime 0. 什么是指针 当我们定义一个变量 name var name string = "Go编程时光"复制代码 此时,name 是变量名,它只是编程语言中方便程序员编写和理解代码的一个标签。 当我们访问这个标签时,机算机会返回给我们它指向的内存地址里存储的值:Go编程时光。 出于某些需要,我们会...阅读全文

博文 2020-04-29 11:35:21 王一白

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通道的无阻塞读写

无论是无缓冲通道,还是有缓冲通道,都存在阻塞的情况,但其实有些情况,我们并不想读数据或者写数据阻塞在那里,有1个唯一的解决办法,那就是使用select结构。 这篇文章会介绍,哪些情况会存在阻塞,以及如何使用select解决阻塞。 阻塞场景 阻塞场景共4个,有缓存和无缓冲各2个。 无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它阻塞场景: 通道中无数据,但执行读通道。 通道中无数据,向通道写数据,但无协程读取。 // 场景1 func ReadNoDataFromNoBufCh() { noBufCh := make(chan int) <-noBufCh fmt.Println("read from no buffer channel success") // Output: /...阅读全文

博文 2018-11-02 15:34:43 shitaibin

探索 Go 语言数据类型的内部实现

向新程序员讲解 Go 语言的时候,必要的是解释 Go 各种数据值在内存中的组织来给他们建立正确的思想,知道哪些操作是开销昂贵的,哪些是不昂贵的。这篇文章就是关于基本类型,结构,数组和切片的内部实现原理。基本类型让我们从一个简单的例子开始 图1 变量 i 的类型是 int, 在内存中用一个32比特位的字来表示。j 的类型是 int32 ,由于显示类型转换。即使 i 和 j 由相同的内存布局,他们本质上还是不同的类型:在 Go 中直接 i = j 赋值将会产生一个错误,我们必须显示的转化 j,i = int(j)。值 f 的类型是 float,在内存中用 32 比特位的浮点值格式表示,它和 int32 有相同的内存使用量但是内部布局是不同的,感兴趣的可以去了解一个浮点数如何在内存中表示。结构体和...阅读全文

博文 2020-05-29 13:32:54 CXX_FLAGS

剖析nsq消息队列(三) 消息传输的可靠性和持久化[二]diskqueue

剖析nsq消息队列-目录 上一篇主要说了一下nsq是如何保证消息被消费端成功消费,大概提了一下消息的持久化,--mem-queue-size 设置为 0,所有的消息将会存储到磁盘。 总有人说nsq的持久化问题,消除疑虑的方法就是阅读原码做benchmark测试,个人感觉nsq还是很靠谱的。 nsq自己实现了一个先进先出的消息文件队列go-diskqueue是把消息保存到本地文件内,很值得分析一下他的实现过程。 整体处理逻辑 go-diskqueue 会启动一个gorouting进行读写数据也就是方法ioLoop 会根据你设置的参数来进行数据的读写,流程图如下 evernotecid://D2602A6B-6F53-4199-885D-97DFC21CBA3E/appyinxiangcom/2...阅读全文

博文 2019-11-15 18:04:17 li_peng

小白也能够熟练掌握常用的数据库使用技巧

课程介绍 本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 课程目标 让小白也能够熟练掌握常用的数据库使用技巧,理解数据库的存储结构 适合人群 数据库入门学习者 前端学习者 课时列表 • 课时1: MySQL概要 • 课时2:MySQL在windows下的安装 • 课时3:MySQL在linux下的安装 • 课时4:MySQL在Mac下的安装 • 课时5:MySQL配置 • 课时6:添加和删除数据库(DB) • 课时7:数据类型 • 课时8:添加和删除数据表(table) • 课时9:给数据表添加或者删除列 • 课时10:修改某个数据列的名字或者数据类型 • 课时...阅读全文

golang文件操作-读操作的常见方式汇总

1、ioutil读取整个文件(io/ioutil) ioutil的方式能够读取整个文件,只需传入文件名,操作简单。该操作方式需要把文件读入内容,效率高,同样占用内存也高 func ReadFile(filename string) ([]byte, error)ReadFile 从filename指定的文件中读取数据并返回文件的内容。成功的调用返回的err为nil而非EOF。因为本函数定义为读取整个文件,它不会将读取返回的EOF视为应报告的错误。 // ioutil.ReadFile读取整个文件 func main() { content, err := ioutil.ReadFile("./main.go") if err != nil { fmt.Println("read file f...阅读全文

博文 2020-03-08 19:32:40 司国瑞

使用golang设计静态文件授权访问 go设计类似大厂对象存储令牌功能

1、什么是静态文件授权访问比如访问静态文件1.jpg常规访问http://域名/1.jpg问题:如果我希望1.jpg只有特定的参数才能被访问。授权访问http://域名/1.jpg?token=shjdshjkdshjdks这个地址增加了令牌token,token设置了有效期和加密规则。类似临时下载,即使别人拿到了下载地址令牌被消费或过期也是无法下载的。非常是呵呵下载站2、如何提供静态文件服务你可能知道nginx+lua可以实现认证授权访问,这里不再介绍。这里介绍使用golang设计静态文件服务,并支持token参数验证过。注意该代码没有实现token加密规则,只是设计了参数。代码无依赖第三方库原文https://www.sucaim.com/yuanma/3579.htm...阅读全文

博文 2019-11-13 14:33:32 更多精彩内容面向对象的用电信息数据交换协议庭说面试题cosWriter《Python 网络数据采集》第一部分笔记万事皆成最好的K8S 安全机制介绍 1 ——认证部分陈Sir的流水账Oauth2.0详解及安全使用木子小三金

数据结构和算法(Golang实现)(18)排序算法-前言

排序算法 人类的发展中,我们学会了计数,比如知道小明今天打猎的兔子的数量是多少。另外一方面,我们也需要判断,今天哪个人打猎打得多,我们需要比较。 所以,排序这个很自然的需求就出来了。比如小明打了5只兔子,小王打了8只,还有部落其他一百多个人也打了。我们要论功行赏,谁打得多,谁就奖赏大一点。 如何排序呢,怎么在最快的时间内,找到打兔子最多的人呢,这是一个很朴素的问题。 经过很多年的研究,出现了很多的排序算法,有快的有慢的。比如: 插入类排序有:直接插入排序和希尔排序 选择类排序有:直接选择排序和堆排序 交换类排序有:冒泡排序和快速排序 它们的复杂度如下: 稳定性概念 定义:能保证两个相等的数,经过排序之后,其在序列的前后位置顺序不变。(A1=A2,排序前A1在A2前面,排序后A1还在A2前面)...阅读全文

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

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 阿鸠先生

数据结构和算法(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 陈星星

Reflect-Go一分钟快速入门

Reflect 本文侧重讲解reflect反射的实践应用,适合新手初窥门径。 reflect两个基本功能 reflect.TypeOf() 动态获取输入数据的类型 reflect.ValueOf() 动态获取输入数据的值 func TypeOf(i interface{}) Type func ValueOf(i interface{}) Value 通过reflect.Type和reflect.Value支持的方法,可以对输入的动态数据进行解析。那么了解reflect.Type和reflect.Value提供的方法尤为重要,因为比较多,此介绍放在文末。 reflect.Kind 在reflect.Type和reflect.Value上调用Kind()方法,可以得到reflect.Kind类...阅读全文

博文 2020-01-10 17:32:41 tinson

基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(v6.9.0版)

TableGo_20200520 v6.9.0 正式版发布,此次版本更新如下:1、新增对JDK9及以上版本Java环境的支持2、生成JavaBean更名为生成数据模型并且提供了C#、C++、Golang、Rust、Python、Objective-C、Swift等编程语言数据模型的简单模板3、新增生成SpringBoot项目工程的功能,在生成自定义文件界面直接生成一个可以跑起来的项目4、新增对数据库视图的支持5、新增大量自定义模板示例6、新增SQL查询导出数据功能,在生成自定义文件时通过配置SQL查询数据导出生成任何需要的文件7、新增一些内置静态对象用于生成自定义文件时使用,例如:org.apache.commons.lang.StringUtils8、移除是否目录直通,如果文件保存路径设置...阅读全文

博文 2020-05-31 22:33:14 TableGo

2018-09-17

go语言基础 hello world1.常量的定义//常量定义const PI =3.142.一般类型声明type myInt int//数据类型3.全局变量的声明与赋值var myName ="golang"4.结构的声明type myPerson struct {}5.接口的声明type myGolang interface {}6.hello world !func main() {fmt.Println("hello world! 你好世界! ")...阅读全文

博文 2018-09-17 21:34:39 tomato波

面向接口 - day 3

type Traversal interface { Traverse() } func main() { traversal := getTraversal() traversal.Traverse() } duck typing 描述事物的外部行为而非内部结构 golang类似duck typing golang中接口是由使用者定义的 实现者只需要实现接口的方法就可以 接口的内部实现 接口中包含实现者的类型和实现者的值/实现者的指针 将实现者赋值给接口变量时有两种方式:值赋值和指针赋值 值赋值是将实现者的值赋给接口的内部变量 指针赋值是将实现者的指针赋值给接口的内部变量 接口的指针赋值只能将实现者的指针赋值给接口变量 接口的值赋值既可以将实现者的指针赋值给接口变量又可以将值赋值给接口变量...阅读全文

第九天:golang学习笔记之bufio

★bufio | bufio 包实现了带缓存的I/O操作. golang界里我老八,今天给大家看个bufio。bufio包实现了带缓存的I/O,把io.Reader或io.Writer封装成更牛逼的对象 bufio bufio包内没有接口定义,只有结构体: 1. bufio.Reader 内部全私有变量,通过如下方法创建: - NewReader(rd io.Reader) *Reader:调用NewReaderSize创建defaultBufSize大小(4096B)的bufReader - NewReaderSize(rd io.Reader, size int) *Reader 结构体定义如下: type Reader struct { buf []byte rd io.Reader ...阅读全文

博文 2019-12-27 16:32:43 Macmillan_

[GO语言]Golang中new和make的根本区别

new和make的根本区别 1、没有指向底层数组的区别 2、new返回指针,make返回引用实例 例子new: var p *[]int = new([]int) 或 p := new([]int) 以上分配了一个slice结构,但是结构中的应该指向底层数组的ptr指针为空,故实际不能往这个slice里面存取数据 同时分配了一个指针p,也即(在32位系统中)占4个字节并存放slice结构的地址 例子make: var v []int = make([]int, 0) v := make([]int, 0) 以上分配了一个slice结构,且结构中的应该指向底层数组的ptr指针已经指向了某个底层数组,这个底层数组应该已经分配了,故这个slice已经可以使用了 注意v就是这个slice结构,而不是...阅读全文

博文 2020-05-15 17:34:07 小龙in武汉

Golang中make和new的区别

new:func new(Type) *Type 接受一个参数,这个参数是一种类型,而不是一个值,分配好内存后, 返回一个指向该类型内存地址的指针,这个指针指向的内容的值为该类型的零值。 对于不同的数据类型,零值的意义是完全不一样的。 比如,对于bool类型,零值为false;int的零值为0;string的零值是空字符串 make:func make(t Type, size ...IntegerType) Type 同样用于内存分配,但和new不同,make用于channel,slice和map的分配, 而且返回的类型就是这三个类型本身,而不是它们的指针, 因为这三种类型本身就是引用类型,所以就没必要返回他们的指针了。 具体而言,有如下几种用法: (1)make(map[string]s...阅读全文

博文 2020-04-18 17:32:50 普朗tong

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

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编程时光

MySQL学习中,数据库事务有哪些特性?

MySQL数据库学习中,总有人会遇到问题,在面对问题的时候,我们一般都是自己先思索、解决,自己无法解答的时候,求助于他人。这是一个很好的习惯,有自学的能力,也有请教的态度。那么有朋友就问了,啥是数据库事务啊,事务又有哪些特性? 什么是数据库事务? ACID是逻辑上的一组操作,组成这个操作的各个单元,要不全部都成功,要不全部都失败,这个特性就是事务。 那事务有什么特性呢? 原子性(atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成 一致性(consistency):事物必须始终保持系统处于一致的状态,不管在任何给定的时间并发事物有多少。 隔离性(isolation):当多个事务并发访问同一个数据源时,数据库能够保持每个访问的事务之间是隔离的,互不影响。 持久化(durab...阅读全文

博文 2019-11-15 16:39:20 zhouzhou2018

QuickBI助你成为分析师——数据源FAQ小结

摘要: 添加数据源的时候经常会遇到各种问题,下面来讲解一下常见情况,若仍有疑问扫码咨询哦! 使用 Quick BI 分析数据时,需要先指定原始数据所在的数据源,测试连通数据源是数据分析的基础,下面让我们看一下添加数据源时常遇到的问题吧! **MaxCompute** 注意以下几点: AccessId和AccessKey 必须是有效的 对应账号最好是项目admin或者owner 若为普通用户,需具有 list、select、create instance权限。 **ECS自建库** 目前ECS自建库经典网络添加白名单时常常遇到下面情况: ![图片描述](http://img.blog.csdn.net/20180328105245739?water...阅读全文

12 - go简单实现hashmap

注意:还没有解决hash冲突和hash倾斜的问题。 package main import "fmt" var nowCapacity = 10 //当前容量 const maxCapacity = 100 //最大容量 const loadFactor = 0.75 //负载因子(决定扩容因数) type Entry struct { k string //key v interface{} //值 next *Entry } type HashMap struct { size int //map的大小 bucket []Entry //存放数据的桶,为slice } //创建一个CreateHashMap的函数,返回一个HashMap指针 func CreateHashMap() *H...阅读全文

博文 2020-05-12 19:32:47 欢乐毅城

聊聊golang的context

golang的context的主要用途在于在多个goroutine之间传递数据,管理多个goroutine的生命周期。实际的应用场景有比如,在http服务中,每个请求就对应一个goroutine,而请求之中可能又会调用别的api,而产生更多的goroutine,用context来管理这些goroutine就能比较方便在这些goroutine中传递数据和管理。 主要方法 func Background() Context Background() 返回一个空的context,这是一个根节点。 func TODO() Context TODO()返回的也是一个空的context,它跟Background的区别在于目的,当你使用一个todo的context时,代码维护者便知道当时的设计意图是待定的...阅读全文

博文 2020-03-21 22:33:49 wx5e1abbbb0a5e5

Go Web编程--解析JSON请求和生成JSON响应

现在无论是网站、App、小程序还是移动端H5页面应用,都是采用前端与后端单独部署,相互之间以API接口交互的形式构建而成的。因为在结合可读性、编码数据大小和开发者使用难度上都JSON格式是一个比较好的选择,所以接口的数据格式通常都采用JSON,即前端在发送POST,PUT,PATCH请求添加,更改数据时会把数据以JSON格式放到请求的Body中。而后端则是所有数据都会以JSON格式返回。 关于JSON可读性、编码数据大小和开发者使用难度上,因为其可读性不如XML结构,但是数据量小,用程序操作起来更方便。对比Protobuf来说,Protobuf编码速度、编码后数据大小比JSON都要好,但是用程序操作起来没有JSON方便简单,编码后的数据是二进制格式的,易读性完全没有。所以整体来说JSON是一...阅读全文

博文 2020-04-03 11:32:53 Kevin

3. Go语言数据类型:整型与浮点型

Hi,大家好呀,我是一个刚学习 Go 语言不久的新手,在入门 Golang 的这段时间里,我写了很多详细的学习笔记,很适合新手学习噢。这些文章已经发布在我的个人微信公众号里:《Go编程时光》里,今天开始将文章内容搬运到这里,希望有更多的人看到,给更多的人带来帮助,但是这里文章会相对滞后,想获取最新文章,可以前往关注《Go编程时光》,请放心关注,这是一个纯分享的号,完全没有广告。 1. 整型 Go 语言中,整数类型可以再细分成10个类型,为了方便大家学习,我将这些类型整理成一张表格。 int 和 uint 的区别就在于一个 u,有 u 说明是无符号,没有 u 代表有符号。 解释这个符号的区别 以 int8 和 uint8 举例,8 代表 8个bit,能表示的数值个数有 2^8 = 256。 u...阅读全文

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

GO译文之并发模型一 Pipeline和Cancellation

作者:Sameer Ajmani原文:https://blog.golang.org/pipelines介绍Go并发模型使构建能高效利用IO和多核CPU的实时流式数据的pipeline非常方便。这篇文章将对此进行介绍,同时会着重强调一些在实践中的易犯错误以及对应的解决方法。什么是Pipeline在GO中,pipeline无明确定义;它是语言提供的一种并发编程方式,由连接各个chanel而形成的一系列阶段组成。在其各个阶段,可能分别运行着很多的goroutine。这些goroutine从输入channel接收数据对数据作相应处理,例如在此基础上产生新数据再通过输出channel把数据发送出去除了开始和结束,每个阶段都会包含任意多个输入和输出channel。开始阶段只有输出channel,结束阶...阅读全文

博文 2019-06-09 10:10:10 波罗学​

Go语言 Channel

Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。 它的操作符是箭头 <- 。 ch <- v // 发送值v到Channel ch中 v := <-ch // 从Channel ch中接收数据,并将数据赋值给v (箭头的指向就是数据的流向) 就像 map 和 slice 数据类型一样, channel必须先创建再使用: ch := make(chan int) Channel类型 Channel类型的定义格式如下: ChannelType = ( "chan" | "chan" "<-" | "<-" "chan" ) ElementType . 它包括三种类型的定义。可选的<-代表channel的...阅读全文

关于一致性hash,这可能是全网最形象生动最容易理解的文档,想做架构师的你来了解一下

问题提出 一致性hash是什么?假设有4台缓存服务器N0,N1,N2,N3,现在需要存储数据OBJECT1,OBJECT2,OBJECT3,OBJECT4,OBJECT5,OBJECT5,OBJECT7,OBJECT8, 我们需要将这些数据缓存到这4台服务器上,相应的问题是 如何设计数据存放策略?即ObjectX 应该存放在哪台服务器上? 为了解决这个问题,我们有如下几个思路。 1. 余数hash方案 采用hash(Objectx)%4来确定服务器节点 假设 hash(OBJECT1)=2,由 2%4=2,可知,Object1则应该存放到节点N2上 假设 hash(OBJECT2)=3,由 3%4=3,可知,Object2则应该存放到节点N3上 假设 hash(OBJECT3)=1,由 1%...阅读全文

博文 2019-08-24 01:32:49 非正式解决方案

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 隔壁小王_

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

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

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

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

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

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

Golang学习笔记-并发

goroutine goroutine是Go内置的轻量级线程,它的调度由Go运行时管理,调用函数时前面加上关键字go就可以让函数在goroutine中执行。 func print123(){ for i:=0;i<3;i++{ time.Sleep(time.Millisecond*100) fmt.Println(i+1) } } func main(){ go print123() print123()//1 1 2 2 3 3 time.Sleep(time.Second*5) } 通道 通道可通过一个指定类型的值来传递数据,<-chan表示只读通道,只能从通道中接受数据,chan<-表示只写通道,只能向通道发送数据,如果未指定方向,则为双向通道。 默认情况下,通道是不带缓冲区的,向无...阅读全文

博文 2019-09-27 23:32:43 aside section ._1OhGeD

首发特性:goproxy.cn 现已推出首个 Go 模块代理统计数据 API

前言 这周很值得纪念,首先是 goproxy.cn 已缓存的模块版本总数突破了一百万,这甚至比起 Go 官方的 proxy.golang.org 已缓存的还要多出不少。其次是 goproxy.cn 的日访问量已稳定在千万级,正在朝着亿级进发,目前这在国内我了解到的别的几个同类服务中是最多的了。另外尤为重要的一点是,经过我们的不懈努力,甚至付出了两次事故的代价(详见:status.goproxy.cn),我们终于使得 goproxy.cn 达到了零错误率!现在的 goproxy.cn 可以说是很稳的了,大家可以放心使用。 刚刚在开头稍微为这一个月发生的事情做了个小总结。接下来说一下本次的重点,也就是 goproxy.cn 推出了 Go 模块代理世界中的首个统计数据 API(文档详见:gopro...阅读全文

博文 2020-03-30 21:32:45 煎鱼

探索 Go 语言数据类型的内部实现

向新程序员讲解 Go 语言的时候,必要的是解释 Go 各种数据值在内存中的组织来给他们建立正确的思想,知道哪些操作是开销昂贵的,哪些是不昂贵的。这篇文章就是关于基本类型,结构,数组和切片的内部实现原理。基本类型让我们从一个简单的例子开始​图1 变量 i 的类型是 int, 在内存中用一个32比特位的字来表示。j 的类型是 int32 ,由于显示类型转换。即使 i 和 j 由相同的内存布局,他们本质上还是不同的类型:在 Go 中直接 i = j 赋值将会产生一个错误,我们必须显示的转化 j,i = int(j)。 值 f 的类型是 float,在内存中用 32 比特位的浮点值格式表示,它和 int32 有相同的内存使用量但是内部布局是不同的,感兴趣的可以去了解一个浮点数如何在内存中表示。结构体...阅读全文

DjanFey的基础库解读--io包

// io包提供了原始I/O的基础接口 // 它的主要工作是去包含这些原始I/O已经存在的实现 // 比如在os包中的这些,抽象出功能做成共享接口,加上其它相关的原始I/O // 因为这些接口和原始I/O包裹着各种各样的实现的低级操作,除非非常了解客户端否则不能假定他们是并发安全的 package my_io import "errors" // Seek值的来源 const ( SeekStart = 0 //seek对应文件的起始处 SeekCurrent = 1 // seek对应当前的偏距 SeekEnd = 2 // seek对应结尾 ) // ErrShortWrite意味着一个write接收到少于要求字节数的数据,并没有返回一个明确的错误 var ErrShortWrite =...阅读全文

博文 2020-03-06 22:54:36 DjanFy

Golang——数组array

数组是同一种数据类型元素的集合。 数组声明时需要确定数组大小,一旦定义,不可修改。 数组的长度必须是常量,并且长度是数据类型的一部分。[5]int和[3]int是不同的类型。 数组索引从0开始。 数组是值类型。 var 变量名 [数量]T 声明和初始化 func main() { //数组声明 var a [5]int var b [3]int //数组赋值 a = [5]int{1,2,3,4,5} b = [3]int{1} fmt.Println(a) //[1 2 3 4 5] fmt.Println(b) //[1 0 0] fmt.Printf("a:%T b:%T\n", a, b) //a:[5]int b:[3]int //数组声明又赋值 var c = [3]string...阅读全文

博文 2020-05-22 11:33:59 Cici冬雪

【Golang】通道channel

Java的并发:基于线程 Golang的并发:基于协程goroutine 并发会导致资源竞争:加锁 防止资源竞争的三种方式: 原子函数:atomic.LoadInt32,atomic.StoreInt32 互斥锁:mutex sync.Mutex, mutex.Lock(), mutex.Unlock() 通道:channel 通道Channel 声明 使用chan声明通道,并指明需要发送和接收的数据类型。例如: ch := make(chan int) 声明通道可以有第二个参数,用来指定通道大小。 ch := make(chan int) ch := make(chan int, 0) ch := make(chan int, 2) 第一种和第二种等价,都为无缓冲通道。第三种为有缓冲通道,...阅读全文

博文 2020-03-23 19:32:48 冉小妹Ran

26. Go 语言中通道死锁经典错误案例详解

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 刚接触 Go 语言的信道的时候,经常会遇到死锁的错误,而导致这个错误的原因有很多种,这里整理了几种常见的。 fatal error: all goroutines are asleep - deadlock! 错误示例一 看下面这段代码 package main import "f...阅读全文

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

迷宫搜索算法

```go 迷宫数据文件 maze.in 12 16 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 0 1 1 1 1 1 1 0 0 1 1 1 0 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 1 0 1 1 0 0 0 0 1 0 0 0 1 0 1 1 0 0 0 0 1 1 1 1 0 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 0 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 1 0 0 1 0 1 1 1 1 1 1 1 0...阅读全文

学习单元测试,告别祈祷式编程

祈祷式编程 祈祷式编程 如果代码中包含以下代码 或者上线后进行这种活动 那么这种编程方式就是祈祷式编程。 用流程图表示基本就是这个样子。 祈祷式编程有什么危害呢? 累,每次写完代码还需要再祈祷 不受控,代码运行结果主要看运气,大仙忙的时候可能保佑不了 解决这个问题有好多种方法,单元测试是其中之一。 单元测试 什么是单元测试 单元测试是由开发人员编写的,用于对软件基本单元进行测试的可执行的程序。单元(unit)是一个应用程序中最小的课测试部分。(比如一个函数,一个类 google 把测试分成小型测试、中型测试和大型测试。单元测试基本和小型测试的作用类似,但是通常也会使用mock或者stub 的方式模拟外部服务。 理想情况下,单元测试应该是相互独立、可自动化运行的。 目的: 通常用单元测试来验证...阅读全文

博文 2019-10-07 15:02:38 goodspeed

Go教程第四篇:数据类型

第四篇:数据类型 这篇文章是我们的《Golang系列教程》的第四篇文章。 下面是Go语言中的基本数据类型: bool Numberic Types int8, int16,int32,int64,int uint8,uint16,uint64,uint float32,float64 complex64,complex128 byte rune bool 布尔类型代表了一个布尔值,它要么是true要么是false。 package main import "fmt" func main() { a := true b := false fmt.Println("a:", a, "b:", b) c := a && b fmt.Println("c:", c) d := a || b fmt....阅读全文

[Golang实现JVM第二篇]解析class文件是万里长征第一步

正确解析class文件是万里长征第一步。本篇我们会全程使用golang完成class文件的解析工作。 数据类型 JVM的class文件完全是二进制文件,最小单位是字节,也有数据类型,但都是字节的整数倍(废话)。规范中class文件一共有两类数据,一种是无符号整数,一种是表。无符号整数一共有u1,u2, u4, u8四种类型,分别表示8bit, 16bit, 32bit, 64bit的无符号整数。表则是无符号整数的集合,class文件中在出现表之前都会先跟着一个u2类型的长度数据,表名后面表的总长度,这样才能正确解析表。 另外还要注意字节序的问题,JVM规范规定class文件统一采用Big Endian字节序,也就是低地址存储高位,高地址存放低位。如果是用C/C++语言写JVM,则程序使用的字...阅读全文

博文 2020-05-27 19:32:48 司青玄

Golang channel

channel简介 channel俗称管道,用于数据传递或数据共享,其本质是一个先进先出的队列,使用goroutine+channel进行数据通讯简单高效,同时也线程安全,多个goroutine可同时修改一个channel,不需要加锁 。 channel可分为三种类型: 只读channel:只能读channel里面数据,不可写入 只写channel:只能写数据,不可读 一般channel:可读可写 channel使用 定义和声明 var readOnlyChan <-chan int // 只读chan var writeOnlyChan chan<- int // 只写chan var mychan chan int //读写channel //定义完成以后需要make来分配内存空间,不然...阅读全文

博文 2020-04-09 11:33:09 frederick_hou

数据结构和算法(Golang实现)(16)常见数据结构-字典

字典 我们翻阅书籍时,很多时候都要查找目录,然后定位到我们要的页数,比如我们查找某个英文单词时,会从英语字典里查看单词表目录,然后定位到词的那一页。 计算机中,也有这种需求。 一、字典 字典是存储键值对的数据结构,把一个键和一个值映射起来,一一映射,键不能重复。在某些教程中,这种结构可能称为符号表,关联数组或映射。我们暂且称它为字典,较好理解。 如: 键=>值 "cat"=>2 "dog"=>1 "hen"=>3 我们拿出键cat的值,就是2了。 Golang提供了这一数据结构:map,并且要求键的数据类型必须是可比较的,因为如果不可比较,就无法知道键是存在还是不存在。 Golang字典的一般的操作如下: package main import "fmt" func main() { // ...阅读全文

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