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

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

整型和字节数组之间的转换:(以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文件下载

golang文件下载 func downloadFile(fileFullPath string, res *restful.Response) { file, err := os.Open(fileFullPath) if err != nil { res.WriteEntity(_dto.ErrorDto{Err: err}) return } defer file.Close() fileName := path.Base(fileFullPath) fileName = url.QueryEscape(fileName) // 防止中文乱码 res.AddHeader("Content-Type", "application/octet-stream") res.AddHeader(...阅读全文

博文 2016-11-18 08:00:03 yueguanyun

谈谈go.sum

众所周知,Go 在做依赖管理时会创建两个文件,go.mod 和 go.sum。相比于 go.mod,关于 go.sum 的资料明显少得多。自然,go.mod 的重要性不言而喻,这个文件几乎提供了依赖版本的全部信息。而 go.sum 看上去就是 go module 构建出来的天书,而不是什么人类可读的数据。 但实际上,日常开发中我们仍然不得不跟 go.sum 打交道(通常是解决这个文件带来的合并冲突,抑或试图手工调整里面的内容)。如果不了解 go.sum,只凭经验随便涂改,不一定能够改对。因此,为了更好地掌握 Go 的依赖管理,完全有必要了解 go.sum 的来龙去脉。 鉴于涉及 go.sum 的资料是如此地稀少(即使 Go 官方文档中,对于 go.sum 的描述也是支离破碎的),我花了些时间...阅读全文

博文 2019-12-27 22:32:41 spacewander

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 陆仁贾

IE 11下载文件中文乱码解决(go/php)

IE 11下载文件的时候发现乱码. 网上查了下资料,了解了一下,主要是user-agent变了,不再是MSIE,面是rv:11.0这样,所以只要服务端判断出是IE 11,处理跟MSIE一样。 GO: func setDownloadFileName(w http.ResponseWriter, fileName, agent string) { if strings.Contains(agent, "MSIE") { fileName = url.QueryEscape(fileName) fileName = strings.Replace(fileName, "+", "%20", -1) } if strings.Contains(agent, "rv:") && strings.Co...阅读全文

博文 2016-04-07 21:00:06 rariki

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.问题: 在golang中可以通过切片截取一个数组或字符串,但是当截取的字符串是中文时,可能会出现的问题是:由于中文一个字不只是由一个字节组成,所以直接通过切片可能会把一个中文字的编码截成两半,结果导致最后一个字符是乱码。 例如: 想要截取前四个字 name := "我是胡八一" fmt.Println("name[:4] = ",name[:4]) 执行后得到的结果会是这样的: name[:4] = 我? 2.解决方法: 先将其转为[]rune,再截取后,转会string nameRune := []rune(name) fmt.Println("string(nameRune[:4]) = ",string(nameRune[:4])) 运行结果: string(nameRune[:4...阅读全文

博文 2016-04-09 17:00:06 vrinux

常用位操作技巧(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

阿里云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

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

goLang的前景

今天听了csdn的go语言培训,虽然进入会场的时间比较晚了,听了半个小时吧, 讲师讲的很好,先谢谢讲师 总之听起来go的前景一片大好呀,现在go的关注度也越来越高 从分布式计算,网站后台,gui程序,等等等等,很多地方go都可以胜任,并且性能也比较好,值得学习 不过就最近来讲,go的招聘信息的确不是很多,依然是java,c++,ios的天下,虽然现在已经有很多公司再用go完成一些项目了, 我自已现在也从事的是java开发的工作,提升java技能的同时,继续保持关注和学习go吧 最近大家关注go的程度真是越来越高了,随然我没有什么朋友在从事go的工作, 听讲师说go1.4以后也支持android开发了,非常期待。。 http://wenku.baidu.com/view/9321fb22316...阅读全文

博文 2015-12-11 19:00:01 threeyax

最全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)。无法对大量乱序的数据进行快速的查找。 哈希,将给定的数据通过哈希函数得到一个唯一的值,此值可以作为数据的唯一标识,只要通过该标识,再通过哈希函数逆向计算,就能还原出来原始的数据。在前面的网址压缩的调研分析里面介绍的压缩网址的方法,其实也就是一种哈希,只不过借助了数据库的支持。 布隆过滤器就是借助了哈希实现的过滤算法。通过将黑名单的数据哈希之后,可以得到一个数据。申请一个数组空间,长度是黑名...阅读全文

GO request 库 返回结果 乱码

package main import ( "compress/gzip" "fmt" "io" "io/ioutil" "net/http" "reflect" "github.com/mozillazg/request" ) func test1(url string) (bt []byte, err error) { testResp, err := http.Get(url) if err != nil { return } bt, err = ioutil.ReadAll(testResp.Body) return } func test2(url string) (bt []byte, err error) { c := new(http.Client) req := reque...阅读全文

博文 2016-08-29 12:00:03 yjnic

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中字符串的遍历

首先说一下go中的字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。 Go语言的字符串的字节使用UTF-8编码标识Unicode文本,这样Golang统一使用UTF-8编码,中文乱码问题不会再困扰程序员。 字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的。 下面介绍字符串的三种遍历方式,根据实际情况选择即可。 常规遍历方式: var str = "Hello world!" for i := 0; i < len(str); i++ { fmt.Printf("str[%d]=%c\n", i, str[i]) } 运行结果: image 该遍历方式==缺点==:遍历...阅读全文

博文 2018-07-16 20:34:48 波涛澎湃

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 导出数据到csv文件

```go // 导出设备列表信息到csv func (ba *businessActor) ExportDeviceListInfo(deviceList []device.AllDevice, filename string) error { // 创建文件 newFile, err := os.Create(filename) if err != nil { return errors.Wrap(err, "创建文件失败") } defer func() { newFile.Close() }() // 写入UTF-8 newFile.WriteString("\xEF\xBB\xBF") // 写入UTF-8 BOM,防止中文乱码 // 写数据到csv文件 w := csv.NewW...阅读全文

博文 2018-05-31 11:00:49 18393910396

golang遇到的win下读取txt字符乱码的问题

import ( "encoding/csv" "os" "github.com/axgle/mahonia" ) // GetCSV 读取csv文件. func GetCSV(csvPath string) [][]string { file, err := os.Open(csvPath) if err != nil { glog.Error("Error when open file in GetCSV():", err) return nil } defer file.Close() decoder := mahonia.NewDecoder("gbk") // 把原来ANSI格式的文本文件里的字符,用gbk进行解码。 // r := csv.NewReader(file) r :=...阅读全文

博文 2016-06-15 09:00:00 xiaouisme

Golang 下载文件

这里使用net/http下载文件,可以设置Content-Type(具体参考)告诉客户端返回的内容类型实际上是什么,实现不同方式的文件的下载。 示例 package main import ( "fmt" "io/ioutil" "net/http" "net/url" "os" ) func main() { http.HandleFunc("/", downloadHandler) // 设置访问路由 http.ListenAndServe(":8080", nil) } func downloadHandler(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析url传递的参数,对于POST则解析响应包的主体(req...阅读全文

博文 2019-08-27 16:02:49 guyan0319

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

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程序的語言...阅读全文

autogo的使用

请问有人用过polaris大的autogo吗...按readme 说的一步步操作不成功啊...cmd上又显示不了提示(乱码) 我的目录结构是这样的. E:\work\jxc\src\test\test.go E:\work\autogo\ test.go就是github.com/polaris1119/autogo上readme 那的例子... 在文件头加了句package main 修改了E:\work\autogo\config\projects.json 内容为 [ { "name": "jxc", "root": "../jxc", "go_way": "inst...阅读全文

使用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

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 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根据平时的使用情形提供了六种形式的列表: ☑ 普通列表 ☑ 有序列表 ☑ 去点列表 ☑ 内联...阅读全文

[go]linux环境中文乱码问题

之前一直在windows下测试go代码,保存为utf-8,就可以正常显示中文. 迁移到linux后发现中文无法正常显示. 搜索了一下类似问题几乎没有. 测试发现是使用终端的问题. 我一直用的secure crt4.0, 懒得升级.但是4.0版本没有设置字符集的功能 换成putty就没问题了 下载了一个7.0的便携版的crt,把字符集设置成utf-8也可以了. cat和more显示都无问题(LANG=en_US也可以) 因为go必须是utf编码,所以使用vim要设置一下.vimrc set termencoding=utf-8 set fileencodings=ucs-bom,utf-8,cp936 set fileencoding=utf-8 set encoding=utf-...阅读全文

博文 2015-06-18 09:09:20 laputa73

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

golang发送邮件以及附件

最近工作上有个需要发送邮件的需求,所以研究了下golang怎么发送邮件,这里记录下。 这里推荐一个第三方库 go get -v github.com/jordan-wright/email 之前也研究了官方库net/smtp,以及其他第三方库如gomail但是都不符合我的开发需求,使用的这个第三方库完美的解决了需求。 下面写个例子,演示一下 email 第三方库的使用,以及使用自定义模板发送邮件 首先在同级目录创建email-template.html,main.go两个文件。 // email-template.html

亲爱的{{.ToUserN...阅读全文

博文 2018-12-28 19:34:44 Sixah

常用位操作技巧(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