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

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)

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

golang 防知乎 中文验证码 源码

创,转载请注明出处! 最开始用图形来模仿文字进行各种角度的倒立和排列,后来切换为文字后,有很多问题。总结如下: 1、程序在画图形和画文字方面不一样,图形的是从原点开始(0,0),而文字则从文字的基线开始(0,baseline) 2、在增加角度偏移时,文字或图形的高宽会产生变化(偏∠45度时达到最大),这时候为了让它们顶点对齐,需要计算偏移量(用三角函数) 3、在绘图时,会先旋转“画布”(描述可能不准确),再绘制文字。此时要往回旋转,否则下一个图形会顺着这个角度继续画。 4、为了让图形保持固定宽度,对于有偏角的文字,需要平均缩小左右间距(否则不同的角度,固定的文字个数,会让图形宽度不同) 效果图: 源码:(代码还可以再整理和优化,但限于计划时间,懒得弄了) package main impor...阅读全文

博文 2018-07-16 15:30:00 Denny_Yang

负载均衡--golang实现一致性hash算法

有没有好奇过redis、memcache等是怎么实现集群负载均衡的呢? 其实他们都是通过一致性hash算法实现节点调度的。 讲一致性hash算法前,先简述一下求余hash算法: hash(object)%N 一个缓存服务器宕机了,这样所有映射到这台服务器的对象都会失效,我们需要把属于该服务器中的缓存移除,这时候缓存服务器是 N-1 台,映射公式变成了 hash(object)%(N-1) ; 由于QPS升高,我们需要添加多一台服务器,这时候服务器是 N+1 台,映射公式变成了 hash(object)%(N+1) 。 1 和 2 的改变都会出现所有服务器需要进行数据迁移。 一致性HASH算法 一致性HASH算法的出现有效的解决了上面普通求余算法在节点变动后面临全部缓存失效的问题: type ...阅读全文

博文 2018-08-09 23:34:51 豆瓣奶茶

一致性hash算法原理及golang实现

概述 这里存在一种场景, 当一个缓存服务由多个服务器组共同提供时, key应该路由到哪一个服务.这里假如采用最通用的方式key%N(N为服务器数目), 这里乍一看没什么问题, 但是当服务器数目发送增加或减少时, 分配方式则变为key%(N+1)或key%(N-1).这里将会有大量的key失效迁移,如果后端key对应的是有状态的存储数据,那么毫无疑问,这种做法将导致服务器间大量的数据迁移,从而照成服务的不稳定. 为了解决类问题,一致性hash算法应运而生. 1. 一致性hash算法特点 在分布式缓存中, 一个好的hash算法应该要满足以下几个条件: 均衡性(Balance) 均衡性主要指,通过算法分配, 集群中各节点应该要尽可能均衡. 单调性(Monotonicity) 单调性主要指当集群发生...阅读全文

博文 2016-09-10 16:00:01 u010511236

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

go语言的排序和搜索(转载)

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

博文 2016-01-11 03:00:00 basque

【Go语言】基本类型排序和 slice 排序

Go 是通过 sort 包提供排序和搜索,因为 Go 暂时不支持泛型(将来也不好说支不支持),所以,Go 的 sort 和 search 使用起来跟类型是有关的,或是需要像 c 一样写比较函数等,稍微显得也不是很方便。 引言 Go 的排序思路和 C 和 C++ 有些差别。 C 默认是对数组进行排序, C++ 是对一个序列进行排序, Go 则更宽泛一些,待排序的可以是任何对象, 虽然很多情况下是一个 slice (分片, 类似于数组),或是包含 slice 的一个对象。 排序(接口)的三个要素: 待排序元素个数 n ; 第 i 和第 j 个元素的比较函数 cmp ; 第 i 和 第 j 个元素的交换 swap ; 乍一看条件 3 是多余的, c 和 c++ 都不提供 swap 。 c 的 qs...阅读全文

博文 2016-09-22 05:00:02 u010983881

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+...阅读全文

博文 2015-07-27 13:00:01 nop4ss

hdu 5193 Go to movies Ⅱ 块状链表 + 树状数组

数组的定位o(1),插入o(n). 链表的定位o(n),插入o(1). 所以把二者结合,是复杂度均摊为 sqrt(n) 设每块的大小为S,那么删除或者添加元素时,维护逆序对数的复杂度是O(S+\frac{P}{S}* \log n)o(S+(p/s)*logn),S是块内直接暴力更新逆序对的代价,(n/s)∗logn在前面块找比它大和在后面块中找比它小的代价,P表示当前元素的个数。为了使这两部分复杂度尽量均摊让S=\frac{P}{S}* \log nS=(p/s)*logn,S取sqrt(p*logn)。直接通过分块暴力添加和删除时,块的大小会退化,。。。。。(注:原官方题解说重构,不太清楚怎么叫重构。这里为了防止退化,在每个块元素过多时采取分裂操作)。因此整个问题的复杂度为O(m\sqr...阅读全文

博文 2016-07-07 16:00:05 Techmonster

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

golang中crypto/hmac包

hmac包实现了U.S.Federal Infomation Processing Standards Publication 198规定的HMAC(加密哈希信息认证码)。 HMAC是使用key标记信息的加密hash。接收者使用相同的key逆运算来认证hash。 出于安全目的,接收者应使用Equal函数比较认证码: 这个包一共提供了两个对外公开的函数: func Equal(mac1, mac2 []byte) bool func New(h func() hash.Hash, key []byte) hash.Hash func Equal(mac1, mac2 []byte) bool 比较两个MAC是否相同,而不会泄露对比时间信息。(以规避时间侧信道攻击;指通过计算比较时花费的时间的长...阅读全文

博文 2018-12-09 14:34:42 laijh

golang实现字符串逆序,不允许临时变量的原地逆序

package main import ( "fmt" ) var ( s1 string ) func main() { fmt.Println(s1) fmt.Println(converString(s1)) } func init() { s1 = "我爱你waylau.com" } func reverseString(s string) string { str := []rune(s) for i, j := 0, len(str)-1; i < j; i, j = i+1, j-1 { str[i], str[j] = str[j], str[i] } return string(str) } 后台输入为 我爱你waylau.com moc.ualyaw你爱...阅读全文

博文 2017-02-10 13:50:49 墨云天

go 学习笔记之解读什么是defer延迟函数

`Go` 语言中有个 `defer` 关键字,常用于实现**延迟函数**来保证关键代码的最终执行,常言道: "未雨绸缪方可有备无患". **延迟函数**就是这么一种机制,无论程序是正常返回还是异常报错,只要存在延迟函数都能保证这部分关键逻辑最终执行,所以用来做些**资源清理**等操作再合适不过了. ![go-error-about-defer.jpg](https://upload-images.jianshu.io/upload_images/16648241-fd49fdabb48f390e.jpeg) ## 出入成双有始有终 日常开发编程中,有些操作总是**成双成对**出现的,有开始就有结束,有打开就要关闭,还有一些**连续依赖**关系等等. 一般来说,我们需要控制结束语句,在**合适...阅读全文

博文 2019-10-18 19:21:25 snowdreams1006

Golang中defer、return、返回值之间执行顺序

写go有一段时间了,虽然也能完成一些api的和一些功能的开发。但是离成为一名真正的Go 开发者还很远。 今天就总结下Go语言中的错误处理吧。对于初学者来说很重要。Go语言中延迟函数defer充当着 try…catch 的重任,使用起来也非常简便,然而在实际应用中,很多gopher并没有真正搞明白defer、return和返回值之间的执行顺序,从而掉进坑中 。 匿名返回值的情况: package main import ( "fmt" ) func main() { fmt.Println("a return:", a()) // 打印结果为 a return: 0 } func a() int { var i int defer func() { i++ fmt.Println("a def...阅读全文

博文 2017-02-10 12:24:01 谢权

用队列求解迷宫最短路径及其应用(围住神经猫)

问题 给定一个M×N的迷宫图,求一条从指定入口到出口的最短路径.假设迷宫图如图所示(M=8, N=8) 对于图中的每个方块,空白表示通道,阴影表示墙。所求路径必须是简单路径,即在求得路径上不能重复出现同一通道块。为了算法方便,在迷宫外围加了一道围墙。对应迷宫数组为: var gameMap = [M + 2][N + 2]int{ {1, 1, 1, 1, 1, 1, 1, 1, 1, 1}, {1, 0, 0, 1, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 1, 0, 0, 0, 1, 0, 1}, {1, 0, 0, 0, 0, 1, 1, 0, 0, 1}, {1, 0, 1, 1, 1, 0, 0, 0, 0, 1}, {1, 0, 0, 0, 1, 0, 0, 0...阅读全文

博文 2017-07-29 17:05:06 火蜥蜴

Golang学习笔记之延迟函数(defer)

关键字 defer ⽤于注册延迟调⽤。这些调⽤直到 ret 前才被执⾏,通常⽤于释放资源或错误处理。 一、当defer被声明时,其参数就会被实时解析 func a() { i := 0 defer fmt.Println(i) //输出0,因为i此时就是0 i++ defer fmt.Println(i) //输出1,因为i此时就是1 return } 二、当一个函数内多次调用 defer 时,Go 会把 defer 调用放入到一个栈中,随后按照先进后出的顺序执行。 func main() { defer fmt.Println("1") defer fmt.Println("2") defer fmt.Println("3") defer fmt.Println("4") } 输出顺序为4...阅读全文

博文 2018-12-11 21:34:44 学生黄哲

Golang 图片处理(旋转/居中)

简单旋转分为顺时针旋转90度,顺时针旋转180度,顺时针旋转270度。说到底其实就是矩阵旋转,将各个像素点的色值重新赋值 // 旋转90度 func rotate90(m image.Image) image.Image { rotate90 := image.NewRGBA(image.Rect(0, 0, m.Bounds().Dy(), m.Bounds().Dx())) // 矩阵旋转 for x := m.Bounds().Min.Y; x < m.Bounds().Max.Y; x++ { for y := m.Bounds().Max.X - 1; y >= m.Bounds().Min.X; y-- { // 设置像素点 rotate90.Set(m.Bounds().Max...阅读全文

博文 2019-12-28 21:32:42 韬大帅

golang 手撸 平衡二叉树

golang 手撸 平衡二叉树 树是一种计算机数据结构中非常常用的一种结构,其中就包含了:平衡二叉树,这种树是一种特殊的二叉查找树(二叉查找树也就是,右孩子大于其父结点,左孩子小于其父结点的树),但是简单的二叉查找树存在的问题就是不平衡,最差的查找效率为O(n),故就有人发明了一种平衡的额二叉查找树。 特点 平衡二叉树是一种二叉查找树 每个结点的左子树的高度减去右子树的高度的绝对值不超过1 空树和左右子树都是平衡二叉树 相比红黑树,平衡二叉树比较适用于没有删除的情况 平衡因子 平衡二叉树是在二叉查查找树的基础上进行构建了,为了维持平衡二叉树的平衡,那么就需要一种机制来判断平衡二叉树是否是平衡的。这种机制就叫做平衡因子。 平衡二叉树的每个结点都会维持一个值,这个值就是平衡因子,这个平衡因子就是...阅读全文

博文 2019-07-14 17:32:43 _AlphaBaby_

BFS广度优先算法-图

BFS主要解决两个问题 1.从A点出发,查看有没有到达B点的路径? 2.从A点出发,查找到达B的最短路径 有向图BFS用.png DFS深度优先搜索是一条道走到黑其他的道路才能继续走 上图0-1-4,0-2-4,0-3-4的查找方式 BFS广度优先搜索是类似于雷达扫描一样的去查找 上图是0-(1,2,3)-4这种查找方式 BFS的算法原理: 假设我们的查找的起点是0,终点是4 1.首先会创建一个queue把0的邻居点全部入队列 2.用一个循环遍历出队这个队列 3.去检测出队的每个元素的值是不是终点4,如果不是就把出队的这个元素的邻接点再次入队,进入第4步。反之进入第5步 4.重复2、3步骤如果 5.找到终点4就结束了 上面只是原理 通过上面的原理我们可以看到上图的一个流程 1.首先0的邻居 ...阅读全文

博文 2020-01-17 01:32:41 世界之树weight

go 学习笔记之解读什么是defer延迟函数

Go 语言中有个 defer 关键字,常用于实现延迟函数来保证关键代码的最终执行,常言道: "未雨绸缪方可有备无患". 延迟函数就是这么一种机制,无论程序是正常返回还是异常报错,只要存在延迟函数都能保证这部分关键逻辑最终执行,所以用来做些资源清理等操作再合适不过了. 出入成双有始有终 日常开发编程中,有些操作总是成双成对出现的,有开始就有结束,有打开就要关闭,还有一些连续依赖关系等等. 一般来说,我们需要控制结束语句,在合适的位置和时机控制结束语句,手动保证整个程序有始有终,不遗漏清理收尾操作. 最常见的拷贝文件操作大致流程如下: 打开源文件 srcFile, err := os.Open("fib.txt") if err != nil { t.Error(err) return } 创建...阅读全文

博文 2019-10-18 18:02:40 雪之梦技术驿站

单向循环链表解决约瑟夫环问题 - Golang 实现

问题描述 编号为 1, 2, … , n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。一开始任选一个正整数作为报数上限值 m ,从第一个人开始按顺时针方向自 1 开始顺序报数,报到 m 时停止报数。报 m 的人出列,将他的密码作为新的 m 的值,从他在顺时针方向上的下一个人开始重新从 1 报数,如此下去,直至所有人全部出列为止。 基本要求 利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。 测试数据 7 个人的密码依次为:3, 1, 7, 2, 4, 8, 4 ;m 值为 6 (正确的出列顺序应为 6, 1, 4, 7, 2, 3, 5)。 开始 单个结构体的实现 定义指针和结构体 package main import "fmt" // 定义结构体 typ...阅读全文

博文 2019-09-19 18:32:41 孟显赫

链表表示数字相加 go语言版本

链表表示数字相加 go语言版本给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807package main import "fmt" import "strconv" import "reflect" type ListNode struct { data int next *ListNode } //转成字符串,数字 相加,再转成链表 func AddTwoNum(l1 *ListNode, l2 *ListNode) *ListNode ...阅读全文

博文 2019-10-14 22:03:22 雷顿学院

2019-08-22【LeekCode题库problem-2】

GitHub 地址:coffeeTu-code LeekCode 地址:题库 Language:Golang /* @题目 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 @示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 @题目大意 2 个逆序的链表,要求从低位开始相加,得出结果也逆序输出,返回值是逆序结果链表的头结点。 @解题思路 需要注意的是各种进位问题。 极端情况,例如 Input...阅读全文

博文 2019-08-23 04:32:48 CoffeeRabbit

go 学习笔记之解读什么是defer延迟函数

Go 语言中有个 defer 关键字,常用于实现延迟函数来保证关键代码的最终执行,常言道: "未雨绸缪方可有备无患". 延迟函数就是这么一种机制,无论程序是正常返回还是异常报错,只要存在延迟函数都能保证这部分关键逻辑最终执行,所以用来做些资源清理等操作再合适不过了. 出入成双有始有终 日常开发编程中,有些操作总是成双成对出现的,有开始就有结束,有打开就要关闭,还有一些连续依赖关系等等. 一般来说,我们需要控制结束语句,在合适的位置和时机控制结束语句,手动保证整个程序有始有终,不遗漏清理收尾操作. 最常见的拷贝文件操作大致流程如下: 打开源文件 srcFile, err := os.Open("fib.txt") if err != nil { t.Error(err) return } 复制...阅读全文

博文 2019-10-18 20:34:21 雪之梦技术驿站

两数相加

题目: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 解题思路: 链表遍历,最后结果返回头 两个链表不一定等长 考虑进位 Java实现 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListN...阅读全文

博文 2019-06-17 14:02:42 杨比轩

golang中的defer recover panic

defer 先看下面代码 func main() { deferCall() fmt.Println("exit main") } func deferCall() { defer fmt.Println("defer 1") defer func() { fmt.Println("defer 2")}() panic("异常") defer func() { fmt.Println("defer 3") if p := recover(); p != nil { fmt.Println("recover", p) } }() time.Sleep(time.Second * 3) fmt.Println("after panic") } 执行结果是: defer 2 defer 1 pan...阅读全文

博文 2019-07-01 17:32:54 无上法门

golang刷LeetCode[0002] 两数相加

题目 https://github.com/betterfor/leetcode-go/tree/master/algorithms/0002_Two_Add 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。 实例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 题解 思路 主要考的是链表这种数据结构的理解,以及链表长度不等时怎么合并链表问题。 /** * Definition for sing...阅读全文

博文 2020-01-01 02:32:55 风云风雨

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

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

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

Go语言入门(二)-流程控制

go流程控制 字符串详解 字符串原理 字符串底层就是一个byte数组,所以可以和[]byte类型互相转换 字符串中的字符是不能修改的 字符串是有byte字节组成,所以字符串的长度是byte字节的长度 rune类型(int32占四个字节)用来表示utf8字符,一个rune由一个或者多个byte组成 func stringByte() { var str string str = "abc你好" var b []byte = []byte(str) var c[]rune = []rune(str) fmt.Printf("%c\n",97) fmt.Printf("b=%v,\tlen(str)=%d\n",b,len(str)) fmt.Printf("%d\n",len(c)) } 练习 ...阅读全文

博文 2020-03-14 11:33:13 wx5b285b48ed74e

数组中的逆序对

题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将