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

整型和字节数组之间的转换

整型和字节数组之间的转换:(以int64到[]byte之间的转换为例,其他类似) package main import ( "fmt" "encoding/binary" ) func main() { var i int64 = 2323 buf := Int64ToBytes(i) fmt.Println(buf) fmt.Println(BytesToInt64(buf)) } func Int64ToBytes(i int64) []byte { var buf = make([]byte, 8) binary.BigEndian.PutUint64(buf, uint64(i)) ...阅读全文

主题 2013-03-22 03:50:19 polaris

golang中defer的执行

golang中defer的执行 大家都知道golang的defer关键字,它可以在函数返回前执行一些操作,最常用的就是打开一个资源(例如一个文件、数据库连接等)时就用defer延迟关闭改资源,以免引起内存泄漏。例如: func do() (ok bool) { file,_ := os.Open("c:\a.txt") defer file.Close() // doSomething return ok } 我们可以在官方的文档中看到defer的执行顺序是逆序的,也就是先进后出的顺序: for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) } 打印结果是:4,3,2,1,0 那么再看这个例子: func deferRet(x,y int) ...阅读全文

博文 2014-10-04 19:26:10 wowzai

go语言的排序和搜索

晚上准备动手写点 go 的程序的时候,想起 go 如何排序的问题。排序 sort 是个基本的操作,当然搜索 search 也是。c 提供一个 qsort 和 bsearch,一个快排一个二分查找,不过是使用起来都不方便; c++ 中的 sort 貌似很不错,因为 c++ 支持泛型(或是说模板),所以很多东西使用起来很方便。go 是通过 sort 包提供排序和搜索,因为 go 暂时不支持泛型(将来也不好说支不支持),所以,go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 补注: 近来又看 go 的排序, 发现以前对 go 的排序理解的有点浅了。 go 的排序思路和 c 和 c++ 有些差别。 c 默认是对数组进行排序, c+...阅读全文

博文 2014-10-24 11:38:53 陆仁贾

golang 数组 slice 乱序

数组乱序 方法1.sliceOutOfOrder 选定随机数r 将下标r和下边i交换,i– ,就是和当前最后一位交换 方法2.rand.Perm(数组长度) 将原数组下标按照随机出来的数据赋值给另一数组 package main import "fmt" import "math/rand" import "time" var ( rr = rand.New(rand.NewSource(time.Now().UnixNano())) a1 = [2]int{} a2 = [10]int{} ) func main() { a := []int{0, 1} for i := 0; i < 10000; i++ { randslice() //fmt.Println(rr.Intn(10)) ...阅读全文

博文 2015-10-20 18:00:37 csapr1987

常用位操作技巧(Golang)

1,判断奇偶 for i := 0; i < 100; i++ { if i % 2 == 0 { println(i) } if i & 0x1 == 0 { println(i) } } 2,交换两个数 func Swap(a, b *int) { if *a^*b != 0 { temp := *a *a = *b *b = temp } } func Swap(a, b *int) { if *a^*b != 0 { *a = *a + *b *b = *a - *b *a = *a - *b } } func Swap(a, b *int) { if *a^*b != 0 { *a ^= *b *b ^= *a *a ^= *b } } 3,交换符号 func ExcangeSym...阅读全文

博文 2014-11-14 08:00:01 xlplbo

微信小程序解码工具

项目地址 https://github.com/sjatsh/unw... & 个人博客 https://sjatsh.com 起因 前段时间想学习微信小程序开发但是又没有什么深厚前端功底,看到很多很好玩的小程序想要做一个类似的学习学习,所以想着借鉴一下现有的小程序。但是苦于没有源码,抓包也没有办法获取源码。 google后知道可以用安卓模拟器安装微信然后安装小程序,然后在文件系统中找到小程序对应的wxapkg文件,拿到压缩包解压后就可以得到小程序源码。 但是压缩包是2进制文件,找了一遍后发现一个现有现有的开源项目可以直接解压小程序压缩包。 废话不多说,直接开干~ 获取小程序压缩包文件一、下载网易MuMu安卓模拟器 下载地址 http://mumu.163.com/ 二、安装微信和RE文件管...阅读全文

博文 2019-01-08 01:34:44 打瞌睡滴花花

阿里云MaxCompute携手华大基因打造精准医疗应用云平台,十万基因组计算成本降低至1000美金以内

摘要:华大基因股份公司总监金鑫介绍了华大基因,并浅谈了与阿里云的情缘,包括Maxcompute等方面应用案例。一起来看下吧。 关于华大基因 华大基因是中国最领先的基因科技公司,华大基因为消除人类病痛、经济危机、国家灾难、濒危动物保护、缩小贫富差距等方面提供分子遗传层面的技术支持。 **原文地址:http://click.aliyun.com/m/43992/** 华大基因股份公司总监金鑫介绍了华大基因,并浅谈了与阿里云的情缘,包括Maxcompute等方面应用案例。一起来看下吧。 **关于华大基因** 华大基因是中国最领先的基因科技公司,华大基因为消除人类病痛、经济危机、国家灾难、濒危动物保护、缩小贫富差距等方面提供分子遗传层面的技术支持。目前,世界上只有两个国家...阅读全文

Google公布实现Go 1.5自举的计划

Google最近公布了实现Go 1.5自举(Bootstrap)的计划。相关文档的作者是Go核心开发者Russ Cox,他在Go语言上已经耕耘了接近6年。据Russ介绍,Google就“如何从Go源码树中去除所有的C程序”已经酝酿了一年。 自举(Bootstrapping) 是这样的过程,“用要编译的目标编程语言编写其编译器(或汇编器)”。一般而言,自举有几个优势,比如: 用于测试被自举的语言; 支持使用通常更为高级、提供更多高级抽象的语言来编写编译器; 编译器也可以得益于语言层面的任何改进。 如前所述,Google在一年前就开始了从Go源码树中去除C代码的努力,转换计划分为5个步骤: 第1阶段——开发一个从C语言到Go语言的翻译器,将现有的C编译器翻译成Go语言的。这一阶段利用了一个事实:...阅读全文

博文 2015-02-24 14:00:06 u012275397

为开发者赋能,阿里云大学人才交流市场全新上线!

据了解,阿里云大学为了打造DT时代下全链路的人才培养生态,再次重磅发力,即打造从学、到练、到赛、到考之后,阿里云大学人才交流市场重磅上线,全力打造创新型人才培养的全方位闭环生态链。 (阿里云大学:edu.aliyun.com) 据悉,数日之前,阿里云大学上线业界首创的全在线、轻量级、场景化Apsara Clouder认证(https://edu.aliyun.com/certification),引起了千人参与考试认证的热潮。这次秉持“让天下没有难做的生意”的初心,阿里云大学又联合阿里巴巴旗下专业招聘平台淘工作,打造阿里云大学全新人才培养生态,打造从学、到练、到赛、到考、到就业的全方位闭环生态链,致力于为数以百万计的中小企业输出优质的上云人才,在“云生态”行业标签,汇...阅读全文

Golang中map的顺序输出

Golang中map的遍历输出的时候是无序的,不同的遍历会有不同的输出结果,如果想要顺序输出的话,需要额外保存顺序,例如使用slice,将slice中排序,再通过slice的顺序去读取。 package main import ( "fmt" "sort" ) func main() { /* 声明索引类型为字符串的map */ var testMap = make(map[string]string) testMap["Bda"] = "B" testMap["Ada"] = "A" testMap["Dda"] = "D" testMap["Cda"] = "C" testMap["Eda"] = "E" for key, value := range testMap { fmt.Pri...阅读全文

博文 2020-03-27 01:32:43 DevilRoshan

最全BAT算法面试100题:阿里、百度、腾讯、京东、美团、今日头条

第一:复杂度估算和排序算法(上) 1) 时间复杂度和空间复杂度 2)认识对数器 3)冒泡排序 4)选择排序 5)插入排序 6)如何分析递归过程的时间复杂度 7)归并排序 8)小和问题 第二:复杂度估算和排序算法(下) 1)荷兰国旗问题 2)随机快速排序 3)堆结构与堆排序 4)认识排序算法的稳定性 5)认识比较器 6)桶排序 7)计数排序 8)基数排序 9)数组排序后的最大差值问题 10)排序算法在工程中的应用 第三:章栈、队列、链表、数组和矩阵结构 1)栈结构 2)队列结构 3)链表结构 4)数组结构 5)矩阵结构 6)二分搜索的扩展 第四:二叉树结构 1)二叉树结构 2)二叉树的递归与非递归遍历 3)打印二叉树 4)判断搜索二叉树 5)判断完全二叉树 6)判断平衡二叉树 7)折纸问题 8...阅读全文

博文 2019-04-26 19:55:29 javaYZ

布隆过滤器

这篇文章可能涉及到一些拓扑知识,可以参考之前的文章: 常见哈希函数FNV和MD5 Golang binary包——byte数组如何转int? 布隆过滤器的原理不算复杂。对数据进行查找,简单点的可以直接遍历;对于拍好顺序的数据,可以使用二分查找等。但这些方法的时间复杂度都较高,分别是O(n)和O(logn)。无法对大量乱序的数据进行快速的查找。 哈希,将给定的数据通过哈希函数得到一个唯一的值,此值可以作为数据的唯一标识,只要通过该标识,再通过哈希函数逆向计算,就能还原出来原始的数据。在前面的网址压缩的调研分析里面介绍的压缩网址的方法,其实也就是一种哈希,只不过借助了数据库的支持。 布隆过滤器就是借助了哈希实现的过滤算法。通过将黑名单的数据哈希之后,可以得到一个数据。申请一个数组空间,长度是黑名...阅读全文

Gartner存储魔力象限前四,阿里云如何成为“领头羊”?

摘要: 阿里云目前的存储产品系列展示了阿里云的潜力,并且已经成为全球超大规模云服务提供商的有力竞争者。相信在未来,作为云计算行业翘楚的阿里云在全球范围内能提供更为广泛的服务,它将用更为精湛的技术令全世界为之叹服! 继马来西亚总理纳吉布、挪威首相索尔贝格、瑞典首相特凡·勒文亲自到访阿里巴巴后。前日,国际奥委会主席巴赫也亲自来到了这个新加入奥运会TOP合作商的年轻企业园区,与马云一同畅谈 “云上智能奥运“。 37de00036e3ea91f9ec8 就在今年Gartner发布的魔力存储象限排名中,阿里云一跃冲到第四,这样的技术实力自然能吸引到国际奥委会的关注,也由此最终成为奥运会“云服务”及“电子商务平台服务”的官方合作伙伴。 37e60003656d4cbe66bd ...阅读全文

golang中的http.FileServer通常要跟http.StripPrefix结合使用

用go写一个文件服务器很简单: http.handle(“/”, http.FileServer(http.Dir(“doc”)) http.ListenAndServe(":8888”, nil) 打来localhost:8888,就能看到doc目录下的所有文件。 但如果,你想用localhost:8888/doc来显示进入文件目录,则需要 http.Handle(“/doc", http.StripPrefix(“/doc", http.FileServer(http.Dir(“doc")))) http.StripPrefix用于过滤request,参数里的handler的request过滤掉特定的前序,只有这样,才能正确显示文件目录...阅读全文

博文 2015-06-17 20:18:48 u011649436

Go 语言机制之数据和语法的设计哲学(Design Philosophy On Data And Semantics)

## 前序(Prelude) 本系列文章总共四篇,主要帮助大家理解 Go 语言中一些语法结构和其背后的设计原则,包括指针、栈、堆、逃逸分析和值或者指针传递。这是最后一篇,重点介绍在代码中使用值和指针的数据和语义的设计哲学。 以下是本系列文章的索引: 1. [Go 语言机制之栈与指针](https://studygolang.com/articles/12443) 2. [Go 语言机制之逃逸分析](https://studygolang.com/articles/12444) 3. [Go 语言机制之内存剖析](https://studygolang.com/articles/12445) 4. [Go 语言机制之数据和语法的设计哲学](https://studygolang.com/art...阅读全文

博文 2018-03-04 08:48:15 gogeof

golang实现树遍历

package main import ( "container/list" "fmt" "strings" ) type MyStack struct { List *list.List } type MyQueue struct { List *list.List } type BinaryTree struct { Value interface{} Left *BinaryTree Right *BinaryTree } type Tree struct { Value interface{} Children []*Tree } func (stack *MyStack) pop() interface{} { if elem := stack.List.Back(); elem ...阅读全文

博文 2017-12-13 02:00:00 show668

微信小程序解码工具

项目地址起因 前段时间想学习微信小程序开发但是又没有什么深厚前端功底,看到很多很好玩的小程序想要做一个类似的学习学习,所以想着借鉴一下现有的小程序。但是苦于没有源码,抓包也没有办法获取源码。 google后知道可以用安卓模拟器安装微信然后安装小程序,然后在文件系统中找到小程序对应的wxapkg文件,拿到压缩包解压后就可以得到小程序源码。 但是压缩包是2进制文件,找了一遍后发现一个现有现有的开源项目可以直接解压小程序压缩包。废话不多说,直接开干~使用源码安装安装golang没有用过golang的人可以直接去官网下载go get github.com/sjatsh/unwxapkgcd ~/go/src/github.com/sjatsh/unwxapkg使用可执行文件下载地址使用unwxapk...阅读全文

博文 2019-01-04 01:34:44 打瞌睡滴花花

GO語言基礎教程:序章

首先自我介紹一下我自己,我是一個coder,目前主要從事B/S程序開發工作,懂點PHP;ASP;JSP;JS;VB;C;DELPHI;JAVA,另外知道幾個數據庫,除此之外別無所長,那麼我為何會選擇學習GO呢!接下來我對此詳細說明一下. 首先我來說明一下C/S程序和B/S程序的優缺點: C/S程序主要是運行在客戶端的電腦上,通常採用安裝的形式,以windows操作系統為例,軟件會被編譯成二進制然後以exe或dll等方式存在於客戶端的電腦上,其執行效率是非常高的,當然了除非編程者把代碼寫的非常糟糕,除此之外C/S程序幾乎不需要考慮安全問題和負載問題,除此之外C/S程序開發出來的東西幾乎是不開源的,使用者只能被動接受卻不能更改軟件的功能(如果您會彙編的話那就另當別論了).能夠開發C/S程序的語言...阅读全文

《Docker助力应用交付“十倍速”》 9月24日时速云技术沙龙第七期【大连站】

![](http://77fkk5.com1.z0.glb.clouddn.com/upload/image/40debc00701e11e681f0525400020562.jpg) 大连,美丽的北国海港,著名的航母摇篮 港口每年的集装箱吞吐量近千万。 回溯历史,集中箱的发明,带来了航运生产力“十倍速”的改变。 Docker,目前最火的云计算技术 诞生之初,就被喻为“用代码编写的集装箱” 正在被应用交付领域越来越多的企业接受、应用。 9月24日,技术领先的企业级容器云计算服务商----时速云联合众蓝影云,将携Docker技术走进大连,举行《Docker助力应用交付“十倍速“》为主题的技术沙龙。届时,技术大咖们将与您一起分享Docker技术那些事儿,现场将会有精美茶...阅读全文

使用cpu的时钟周期作为随机数发生器的种子

对于一个伪随机数发生器来说,种子的设置是非常重要的;Go语言runtime中的每个线程也有自己的一个随机数发生器,当然也是伪的,这个伪随机数发生器的种子设置采用了另外一种方法——使用了cpu的时钟周期计数器。 go语言的实现采用了一段汇编代码读取cpu的cycle信息,如下: TEXT runtime·cputicks(SB),7,$0 RDTSC SHLQ $32, DX ADDQ DX, AX RET 这段汇编代码的语法好像有点奇怪,和平时常见的AT&T语法有那么一点不同;确实,Go语言有一套自己的编译器,汇编器当然也是自己的了。这套编译器其实是Plan9平台上的玩意,个人觉得这汇编语法更顺眼一点,相比AT&T来说。 这里采用汇编实现的函数runtime·cputicks,第一条就是rd...阅读全文

博文 2014-12-21 14:51:03 skoo

年中总结与目标OKR

文: 年中总结与目标OKR thumbnail: /thumbnails/xingbake.jpg date: 2018-07-16 21:39:04 [TOC] 昨天看到了狗哥的年中总结, 虽然开头和结尾比较丧, 但还是比较详细的列出了半年回顾和计划 也让我感受到了像狗哥这样的年轻人有目标真好~ 自己没制定过目标和计划, 发现有点难或者好奇心没啦又断了 所以, 结合前段时间看到的OKR, 这次来学习做一次年中总结, 内容尽可能细致且可度量, 以便年终进行检验 一. OKR 先来简单说下OKR是什么 OKR: Objectives and Key Results的简称,中文名是目标与关键成果法 从名称上看到它包含两个要素 目标(Objectives) 关键结果(Key Results) 它由...阅读全文

博文 2019-05-22 17:34:54 i蝸居年華_谢谢谢

golang之树的遍历

go语言在区块链编程中有巨大的优势,其中fabric和ethereum都是基于go语言编写的。为了能更好的学习区块链的底层技术,先将go的基础打好。 本篇文章使用golang来实现树的遍历 树的定义 package tree type Node struct { Val int Left *Node Right *Node } 深度优先遍历 深度优先遍历需要优先使用栈 栈的定义 type Stack struct { list *list.List } func NewStack() *Stack { list := list.New() return &Stack{list} } func (stack *Stack) Push(value interface{}) { stack.lis...阅读全文

博文 2018-11-18 14:34:42 菟潞寺沙弥

golang.org/x/text使用

前言 go语言也已经使用一段时间了,但是关于golang的相关常用三方库仍然使用的不到位,正好前段时间接触了golang.org/x/text的库,这个包能强大的处理国际化和本地化,对应用的全球化时能帮上大忙。 包概览 golang.org/x/text 包含多层子包,提供了很多的工具和函数,并且用fmt风格的API来格式化字符串。 cases 提供通用的方法 // code src := []string{ "hello world!", "i with dot", "'n ijsberg", "here comes O'Brian", } for _, c := range []cases.Caser{ cases.Lower(language.Und), cases.Upper(lan...阅读全文

博文 2019-06-10 17:02:54 m20082008m

golang map排序

package main import ( "fmt" "sort" ) // 按map的key排序 func main() { params := make(map[string]interface{}) params["age"] = 23 params["name"] = "xxx" params["sex"] = 0 params["level"] = 1 // 1.去除所有的key var keys []string for k := range params{ keys = append(keys, k) } // 对字符串切片排序 sort.Strings(keys) fmt.Println(keys) // 打印key, val for _, k := range keys{...阅读全文

Bootstrap提供了六种列表效果

列表--简介 在HTML文档中,列表结构主要有三种:有序列表、无序列表和定义列表。具体使用的标签说明如下: 无序列表 <ul> <li>…</li> </ul> 有序列表 <ol> <li>…</li> </ol> 定义列表 <dl> <dt>…</dt> <dd>…</dd> </dl> Bootstrap根据平时的使用情形提供了六种形式的列表: ☑ 普通列表 ☑ 有序列表 ☑ 去点列表 ☑ 内联...阅读全文

1个人1个电脑1周可以处理10000+的订单吗?

摘要: 码栈,以提升企业提效为目标,帮助用户连接不同的系统和服务,实现工作流程自动化。运用码栈能够显著将客服、运营、财务、法务、设计师以及更多领域的客户重复工作流高速化,提升岗位效率,进而提升企业效率。 码栈为电商、金融、游戏、政府、教育、财税、及传统大型企业等人力密集型企业提供一个高效引擎。 码栈,以提升企业提效为目标,帮助用户连接不同的系统和服务,实现工作流程自动化。运用码栈能够显著将客服、运营、财务、法务、设计师以及更多领域的客户重复工作流高速化,提升岗位效率,进而提升企业效率。 码栈为电商、金融、游戏、政府、教育、财税、及传统大型企业等人力密集型企业提供一个高效引擎。在三个典型应用场景:数据采集、批量处理和系统协同中,码栈的效率是传统人工效率的数倍。 以电商运营为例,每...阅读全文

教你轻松做一个响应式网站

在响应式还未流行的时候,很多企业与互联网公司都觉得响应式网站应该是大企业才用的上,大企业才有资金去投入。对于这个问题小编只能说,没错放在前段时间做一个响应式网站的确需要高投入,而且还很耗时间。但是放在今天来讲,小编可以告诉你,以现在的互联网技术,做一个响应式网站快的只需要几个小时,需要细致完成的也就几天时间。这样的发展速度,让众人所惊叹! 在响应式还未流行的时候,很多企业与互联网公司都觉得响应式网站应该是大企业才用的上,大企业才有资金去投入。对于这个问题小编只能说,没错放在前段时间做一个响应式网站的确需要高投入,而且还很耗时间。但是放在今天来讲,小编可以告诉你,以现在的互联网技术,做一个响应式网站快的只需要几个小时,需要细致完成的也就几天时间。这样的发展速度,让众人所惊叹! 现在...阅读全文

c#实现golang 的channel

使用.NET的 BlockingCollection来包装一个ConcurrentQueue来实现golang的channel。 代码如下: public class Channel { private BlockingCollection _buffer; public Channel() : this(1) { } public Channel(int size) { _buffer = new BlockingCollection(new ConcurrentQueue(), size); } public bool Send(T t) { try { _buffer.Add(t); } catch (InvalidOperationExceptio...阅读全文

博文 2014-10-04 19:25:57 visionwang

【厉害了Word哥】Workshop第一期 | 容器技术如何落地?

![alt 文本](http://blog.tenxcloud.com/wp-content/uploads/2016/10/lADOfNAlE80B9M0DhA_900_500-1.jpg) ## 为什么关注容器落地? 2015年,容器元年,Docker技术破冰而出, 2016年,无数企业探索容器落地, 趟过坑,踩过雷,技术愈发成熟, **观望者**,对其经验、教训无限关注, **探索者**,亟需更系统全面的实践指导, **实践者**,希望结合自身需求与厂商进行深度对话, 基于以上考虑,时速云第一期工作坊主题确立! ## 讲什么? 【 企业如何实践微服务架构? 】 【 基于Docker的PaaS平台在企业中的落地实践 】...阅读全文

Golang多线程文件传输

Golang多线程文件传输 ------------------------------ 前段时间抽空用Golang简单实现了一下多线程文件传输。 采用的方式为将待传输的文件拆分成多部分由多个协程同时传输。服务端在全部数据接收完成后将文件拼接还原为原文件。 服务端编译后直接执行,客户端至少需要带一个参数:待发送文件名 。另外更多参数中,第二参数为指定服务端最终生成的文件名。第三个参数为单次发送数据包的大小(单位:Byte),最大不超过18K。第四个参数为待发送文件拆分的个数,其对应发送的协程数量。 好了,下面是全部代...阅读全文

博文 2015-06-17 20:02:30 LvanNeo

常用位操作技巧(Golang)

1,判断奇偶 for i := 0; i < 100; i++ { if i % 2 == 0 { println(i) } if i & 0x1 == 0 { println(i) } } 2,交换两个数 func Swap(a, b *int) { if *a^*b != 0 { temp := *a *a = *b *b = temp } } func Swap(a, b *int) { if *a^*b != 0 { *a = *a + *b *b = *a - *b *a = *a - *b } } func Swap(a, b *int) { if *a^*b != 0 { *a ^= *b *b ^= *a *a ^= *b } } 3,交换符号 func ExcangeSym...阅读全文

博文 2014-11-14 14:00:01 seago123

我用一周打造一个小程序之后,竟然...

半个月前萌生了一个想法打造一个小程序,除了可以夯实自己的前端开发能力之余还可以有一些积累下来的东西 二话不说就开始了我的造小程序之旅 首先我把我的小程序原型设计出来是这样的 前端做出来的效果是这样的 由于觉得首页样式太丑又改了一版首页的样式 改样式后的效果: 花了大概一周时间终于把原型、小程序和后端都做好之后提交小程序审核后竟然被拒绝了 .........总结:做小程序微信是对小程序功能有限制的,所以做小程序前先在小程序后台看看你的功能是否符合小程序的审核要...阅读全文

博文 2020-03-07 14:32:40 南国依红豆

golang二叉树前序,中序,后序非递归遍历算法

package main import ( "container/list" "fmt" ) // Binary Tree type BinaryTree struct { Data interface{} Left *BinaryTree Right *BinaryTree } // Constructor func NewBinaryTree(data interface{}) *BinaryTree { return &BinaryTree{Data: data} } // 先序遍历-非递归 func (bt *BinaryTree) PreOrderNoRecursion() []interface{} { t := bt stack := list.New() res := mak...阅读全文

博文 2018-07-02 21:35:46 暮色伊人

golang实现二叉搜索树

关于什么是二叉搜索树,不清楚的同学可以去看我写的这个数据结构与算法的网站 数据结构 首先我们定义需要的数据结构。注意,TreeNode的左右节点都是*TreeNode type的,而树只有一个Root数据域,为*TreeNode type type TreeNode struct { Value int Left *TreeNode Right *TreeNode } type BinarySearchTree struct { Root *TreeNode } Insert 向二叉搜索树中插入元素,首先要找到插入的位置,然后再插入。这里注意我们的实现方法为给TreeNode和BinarySearchTree这两个type添加方法。需要注意给type添加方法的方式,同时还要注意,如果你要改变...阅读全文

博文 2017-03-05 11:47:47 bigtom

go.mongodb.org bson.M{}使用排序的坑

起因今天一位朋友问了我一个问题 他说多字段排序有问题 乱序 而我也是模棱两可 最后自己做了一个测试 记在这里 深化了一下学习成果。正文使用排序时不能使用bson.M{}去排序否则排序结果是和预期结果有差异的原因:底层的结构是Map结构 在golang中map值是无序的 而排序是根据字段值的先后顺序优先级进行排序 所以排序取值的时候就是乱序的 所以会造成乱序 测试使用元数据 已经明确提示 已经明确提示 黄色框为 非预期值 既然是无序的那么我们弄成有序的,恰好jdk已经为我们提供了方法 只需要换成bson.D{}即可, 至于原理底层是切片类型。 E类型的切片map 正确结果 总结bson.M{}进行排序不是不可以使用,在只有一个字段排序的情况下还是能使用的。当大于等于两个字段值以上的时候就会有乱...阅读全文

博文 2019-12-18 20:32:43 chaunsin

后端工程师入手了树莓派 pi 3B和SIM 900

po 主是苦逼码农一枚,软件工程师,做服务端方向,主要写 nodejs & golang 偶尔写点 python,所以这是一篇刚刚拥有第一个开发板的小白写的小白文,以上是背景 前段时间为了改善生活买了一块树莓派3,装了 debian 8 jessie。 1. 换清华的源: sudo vi /etc/apt/sources.list 注释掉其他的源插入这两个: deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main non-free contrib deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ jessie main non-fr...阅读全文

博文 2017-06-15 19:06:38 HughFace

Hdu 5193 Go to movies Ⅱ(带删除数插入数的逆序数对,块状链表)

传送门:Hdu 5193 Go to movies Ⅱ 题意: 有n个人站成一排,每个人的身高为Hi。每次有人加入或者有人离开,就要判断有多少人站反了(i < j&&Hi>Hj) 第一行n,m,接下来n个整数(n,m<=2e4) 接下来m行, 0 x y 表示有一个身高为y的人插在x后面,x=0表示插在最前面。(1≤y≤n) 1 x 表示第x个人(从左到右)离开。 思路:摘自题解http://bestcoder.hdu.edu.cn/solutions.php?page=12 添加或者删除一个元素时,维护逆序对时,需要知道在它之前有多少个数比它大,在它之后有多少个数比他小。有下标和权值两个维度,可以使用两个数据结构嵌套。题目中n=20000,范围不大,外层可以使用分块维护下标,这样添加和删除...阅读全文

博文 2016-09-14 15:00:00 acm_fighting

Google公布实现Go 1.5自举的计划

本文转自InfoQ的公众号,分享给大家。 ​ Google最近公布了实现Go 1.5自举(Bootstrap)的计划。相关文档的作者是Go核心开发者Russ Cox,他在Go语言上已经耕耘了接近6年。据Russ介绍,Google就“如何从Go源码树中去除所有的C程序”已经酝酿了一年。 自举(Bootstrapping) 是这样的过程,“用要编译的目标编程语言编写其编译器(或汇编器)”。一般而言,自举有几个优势,比如: 用于测试被自举的语言; 支持使用通常更为高级、提供更多高级抽象的语言来编写编译器; 编译器也可以得益于语言层面的任何改进。 如前所述,Google在一年前就开始了从Go源码树中去除C代码的努力,转换计划分为5个步骤: 第1阶段——开发一个从C语言到Go语言的翻译器,将现有的C编...阅读全文

博文 2015-03-24 01:00:01 codemanship

数据结构和算法(Golang实现)(23)排序算法-归并排序

归并排序 归并排序是一种分治策略的排序算法。它是一种比较特殊的排序算法,通过递归地先使每个子序列有序,再将两个有序的序列进行合并成一个有序的序列。 归并排序首先由著名的现代计算机之父John_von_Neumann在1945年发明,被用在了EDVAC(一台美国早期电子计算机),足足用墨水写了 23 页的排序程序。注:冯·诺依曼(John von Neumann,1903年12月28日-1957年2月8日),美籍匈牙利数学家、计算机科学家、物理学家,是20世纪最重要的数学家之一。 一、算法介绍 我们先介绍两个有序的数组合并成一个有序数组的操作。 先申请一个辅助数组,长度等于两个有序数组长度的和。 从两个有序数组的第一位开始,比较两个元素,哪个数组的元素更小,那么该元素添加进辅助数组,然后该数组...阅读全文

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

深入内核架构--内存屏障

简介 之前在看golang gc、java gc及volatile 可见性的时候,经常会看到内存屏障,但是对于其基本原理似懂非懂,也对于内存屏障是如何保障多个CPU之间的数据可见性保持好奇,网上的博客基本上只是停留于表面,导致我产生了几个误区: 1. CPU之间内存数据可见性问题是由于cpu cache没及时同步数据导致的。 2. 内存屏障为啥能通过防止指令重排序,就能让cpu cache及时同步数据? 不过最近发现这只是表面现象!所以今天写一下这篇文章来彻底介绍一下内存屏障 CPU cache 虽然内存可见性问题不是直接由cpu cache导致的,还是与cpu cache是有密切联系的,所以我们先来简单介绍一下cpu cache。 在我之前的文章中有提到内核对于小块内存是通过slab来管理...阅读全文

Go 内存模型和Happens Before关系

Happens Before 是内存模型中一个通用的概念,Go 中也定义了Happens Before以及各种发生Happens Before关系的操作,因为有了这些Happens Before操作的保证,我们写的多goroutine的程序才会按照我们期望的方式来工作。什么是Happens Before关系Happens Before定义了两个操作间的偏序关系,具有传递性。对于两个操作E1和E2:如果E1 Happens Before E2, 则E2 Happens After E1;如果E1 Happens E2, E2 Happens Before E3,则E1 Happens E3;如果 E1 和 E2没有任何Happens Before关系,则说E1和E2 Happen Concur...阅读全文

博文 2018-08-11 22:31:20 hsiafan

帮忙看一下代码的执行乱序

输入内容,并将输入的内容传输至网络服务端。但是目前的代码,cmd.go中的Execmd函数,从打印的日志来看,dealConn函数输入内容后会执行2次。 main.go ```go package main import ( "fmt" "github.com/client/cmd" "net" "os" "github.com/spf13/cobra" ) const version = "1.0.0" var address string var versionFlag bool var conn net.Conn var RootCmd = &cobra.Command{ Use: "client", RunE: exec...阅读全文

go map操作需要注意的地方

map 数据直接赋值,或者作为函数参数传递时是 指针传递, 修改其中一个则会修改全部变量数据 func main() { var s_map = make(map[int]int) for i := 0; i <= 5; i++ { s_map[i] = i } fmt.Println(s_map) s_map2 := s_map s_map2[10] = 100 fmt.Println(s_map) fmt.Println(s_map2) test_map(s_map) fmt.Println(s_map) fmt.Println(s_map2) } 输出: map[0:0 1:1 2:2 3:3 4:4 5:5] map[0:0 1:1 2:2 3:3 4:4 5:5 10:100] m...阅读全文

博文 2014-10-04 19:26:44 984195889