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

Golang flag包使用详解(一)

概述 flag包提供了一系列解析命令行参数的功能接口 命令行语法 命令行语法主要有以下几种形式 -flag //只支持bool类型 -flag=x -flag x //只支持非bool类型 以上语法对于一个或两个‘-’号,效果是一样的,但是要注意对于第三种情况,只支持非bool类型,原因是碰到如下情况时 cmd -x * *为0,false有可能表示一个文件名或文件,也有可能表示x标签的值为0或false,会产生二义性,因此规定第三种只支持非bool类型。对于整形flag,合法的值可以为1234, 0664,0x1234或负数等。对于布尔型flag,可以为1, 0, t, f, T, F,true, false, TRUE, FALSE, True, False等 命令行参数解析方法 使用f...阅读全文

博文 2015-06-17 20:03:05 thulpf

Go 语言运算符

Go 语言运算符运算符用于在程序运行时执行数学或逻辑运算。Go 语言内置的运算符有:算术运算符关系运算符逻辑运算符位运算符赋值运算符其他运算符接下来让我们来详细看看各个运算符的介绍。算术运算符下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。运算符描述实例+相加A + B 输出结果 30-相减A - B 输出结果 -10*相乘A * B 输出结果 200/相除B / A 输出结果 2%求余B % A 输出结果 0++自增A++ 输出结果 11--自减A-- 输出结果 9以下实例演示了各个算术运算符的用法:package main import "fmt" func main() { var a int = 21 var b int = 10 var c int c =...阅读全文

博文 2015-11-25 19:00:32 u011225629

golang二进制bit位的常用操作

package main import ( "fmt" "github.com/imroc/biu" ) /** golang二进制bit位的常用操作,biu是一个转换二进制显示的库 mengdj@outlook.com */ func main() { var( /** 1个字节=8个二进制位,每种数据类型占用的字节数都不一样 注意位操作千万不要越界了,如某个类型占8个bit位,偏移时候不要超过这个范围 */ a uint8=30 ) //a输出结果:00011110 fmt.Println(biu.ToBinaryString(a)) /** 将某一位设置为1,例如设置第8位,从右向左数需要偏移7位,注意不要越界 1<<7=1000 0000 然后与a逻辑或|,偏移后的第8位为1,逻辑|...阅读全文

博文 2018-08-17 12:30:00 mengdejun

Go 语言教程实战

安装在线教程 由于墙,golang.org 国内无法访问,其在线教程也一样 tutorial.golang.org http://go-tour-zh.appspot.com/ 可以在本机运行, 先安装Go 编译器 http://code.google.com/p/go/downloads/list 然后安装教程 go get code.google.com/p/go-tour/gotour 或者中文的 go get bitbucket.org/mikespook/go-tour-zh/gotour 最后执行安装产生的 gotour 执行文件,即可在http://localhost:3999 打开教程。 一些练习的答案 #46 练习:斐波纳契闭包 package main import "f...阅读全文

博文 2014-10-26 05:00:00 mebusw

《Golang 入门系列三》golang的运算符

前言:运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 一、算数运算符 下表列出了所有Go语言的算术运算符。假定 A 值为 10,B 值为 20。 运算符 描述 实例 + 相加 A + B 输出结果 30 - 相减 A - B 输出结果 -10 * 相乘 A * B 输出结果 200 / 相除 B / A 输出结果 2 % 求余 B % A 输出结果 0 ++ 自增 A++ 输出结果 11 -- 自减 A-- 输出结果 9 二、关系运算符 下表列出了所有Go语言的关系运算符。假定 A 值为 10,B 值为 20。 运算符 描述 实例 == 检查两个值是否相等,如果相等返回 True 否则返回 False。 (A == B...阅读全文

博文 2018-02-28 01:33:07 IT--小哥

golang 位运算

http://blog.opskumu.com/golang-bitwise.html 位操作是程序设计中对位模式按位或二进制数的一元和二元操作. 在许多古老的微处理器上, 位运算比加减运算略快, 通常位运算比乘除法运算要快很多. 在现代架构中, 情况并非如此:位运算的运算速度通常与加法运算相同(仍然快于乘法运算). 位操作符 一、简介 关于位运算的操作,维基百科关于 位操作符 的理论介绍已经非常清楚了。关于 Golang 的位运算其实和 C 语言比较类似,除了取反的操作和 C 语言有点区别,Golang 使用的是^x,而 C 使用的则是 ~x取反。 二、概念 << [ 左移 ] 1 << 2 == 4输出 0100 ,相比右移更常见,移位后空缺的部分全部填0 >> [ 右移 ] 10 >>...阅读全文

博文 2016-03-10 15:00:03 leonpengweicn

Golang二进制转换十进制代码

Golang二进制转换十进制代码,使用 container/list 实现出入栈操作,完成转换。 二进制转十进制的方法是:‍‍从右到左的取数值乘以2的N次幂,依次相加,N为数值在二进制中的位数。‍‍ package main /** 二进制转换成十进制 核心: 入栈、出栈、类型转换 sum += int(v-48) * int(math.Pow(2, N)) **/ import ( "container/list" "fmt" "math" ) func main() { stack := list.New() var input string var sum int var stnum, conum float64 = 0, 2 fmt.Printf("请输入一段二进制数字:") fmt...阅读全文

博文 2015-06-05 14:00:01 一曲

GoLang基础语法

变量定义 从hello world入手 package main import "fmt" func main() { fmt.Println("Hello World") } 控制台输出: Hello World 变量默认值 package main import "fmt" func main() { var a int var s string fmt.Println(a, s) } 控制台输出: 0 注:s为"",故打印出来没有效果 如果想让""字符串显示,则代码如下: package main import "fmt" func main() { var a int var s string fmt.Println(a, s) fmt.Printf("%d %q\n", a, s)...阅读全文

博文 2018-09-23 21:34:39 等她下班

golang流程控制if语句

1. if else语句 基本语法 //单条件判断 if condition { //do something } //多条件判断 if condition { } else if condition { //do something } else { //do something } if 单条件先跟个语句然后再做条件判断 if statement;condition{ //do something } //单条件,不带语句的基本判断 package main import( "fmt" ) func main(){ nu := 1 if nu %2 == 0 { fmt.Println("the number is even") } else{ fmt.Println("the numb...阅读全文

博文 2018-07-14 00:30:00 Brin-guo

golang map 用range遍历不能保证顺序输出

按照之前我对map的理解,map中的数据应该是有序二叉树的存储顺序,正常的遍历也应该是有序的遍历和输出,但实际试了一下,却发现并非如此,网上查了下,发现从Go1开始,遍历的起始节点就是随机了,当然随机到什么程度还不清楚。 package main import ( "fmt" ) func main() { x := make(map[int]int) for i := 0; i < 30; i++ { x[i] = i } for k, v := range x { fmt.Println(k, v) } } build后,多次执行,每次输出的结果都不同。当然,用 fmt.Println("map: ", x) 输出同样是无序的结果 参考http://xhrwang.me/2014/12/...阅读全文

博文 2016-06-13 13:00:03 hificamera

Go语言 操作二进制文件

二进制文件的内容: Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 00000000 12 31 23 12 31 22 31 23 12 31 22 22 22 22 22 22 1# 1"1# 1"""""" 00000010 22 22 22 12 23 12 23 00 00 00 00 00 00 00 00 00 """ # # 00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000030 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00000040 00 00 00 00 00 00 00 00 00 00 00 00 00 0...阅读全文

博文 2015-06-17 23:02:25 king1076

golang 二进制操作

http://blog.guoqiangti.com/?p=538 以前很少对二进制进行操作,在看effective go的时候,好像没有看到关于二进制操作符的说明.今天在看其他源码的时候,看到一些二进制操作符,不知道他的意思,所以就查查资料,温习一下. 按位或 | .| (按位或):【解义】对两个整数的二进制形式逐位进行逻辑或运算,原理为:1|0=1,0|0=0,1|1=1,0|1=1 等。 4|-5: 4的二进制形式为:00000000 00000000 00000000 00000100, -5的二进制形式为:11111111 11111111 11111111 11111011, 逐位进行逻辑或运算:11111111 11111111 11111111 11111111,即得到-1....阅读全文

博文 2016-03-16 09:00:02 leonpengweicn

Golang: 详解container/heap

golang的container包中提供了heap容器,这个容器可以用来做什么,又是怎么做到的呢?本文从golang 1.9.3的源码出发,说明了堆、heap包、heap包的用途、heap包的实现。 1 heap是什么 首先先来解释一下堆(Heap)是什么。 据维基百科 堆(Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的一种数据结构。 逻辑定义:n个元素序列{k1, k2… ki…kn},当且仅当满足下列关系时称之为堆: (ki <= k2i, ki <= k2i+...阅读全文

博文 2018-06-12 14:14:26 伊布

golang 二进制转十进制实现方式

golang 二进制转十进制实现方式 直接上代码 package main import ( "fmt" "math" ) func StringToIntArray(input string) []int { output := []int{} for _, v := range input { output = append(output, int(v)) } for i, j := 0, len(output)-1; i < j; i, j = i+1, j-1 { output[i], output[j] = output[j], output[i] } return output } func getInput(input string) <-chan int { out := m...阅读全文

博文 2015-07-14 03:00:00 jerrychen

GO代码实现判断字符编码格式及编码格式转换(utf-8、gbk)

引入 最近使用go开发http服务,在使用http进行通信时,发现接收报文中如果包含中文字符(非utf-8编码),直接使用go将二进制格式数据转换成字符串文本会出现乱码的情况。因为golang中的字符编码格式是utf-8,如果是其他类型的编码,例如gbk,那么直接转码后出现乱码也就理所当然了。 GBK编码格式 为了更好地说明GBK的编码方式,首先在这里先说明一下ASCII码,GB2312, GBK, GB18030的兼容性关系: 各种编码兼容关系.png ASCII编码使用一个字节的低7位(范围0-127)来表示共128个字符,最高位为0,即 0XXX_XXXX GB2312为了能表示更多字符,使用单字节和双字节来进行编码,单个字节编码与ASCII完全一样,也就兼容了ASCII码,双字节编码...阅读全文

Go 的 rune byte 和 string

- `rune` 、 `byte` 和 `string` 都是 `Go` 的内置类型 ----- - `byte` - byte是`uint8`的别名,在所有方面都等同于`uint8` - 按惯例,它用于区分**字节值**和**8位无符号整数值**。 - `rune` - `rune`是`int32`的别名,在所有方面都等同于`int32` - 按惯例,它用于区分**字符值**和**整数值**。 - `string` - string是所有**8位字节字符串**的集合,通常但不一定代表UTF-8编码的文本 - 字符串可能为空,但是不能为 `nil` - 字符串类型的值是不可变的 - 由上面得解释我们大概可以明白 - `rune` 可以表示得比 `byte` 多 - `string` 类型的底...阅读全文

go语言序列化对象为二进制

package main import ( "bytes" "encoding/binary" "fmt" ) type Register struct { ACTION int32 SID int32 } func ExampleWrite() []byte { buf := new(bytes.Buffer) var info Register info.ACTION = 20004 info.SID = 6 err := binary.Write(buf, binary.LittleEndian, info) if err != nil { fmt.Println("binary.Write failed:", err) } fmt.Printf("% x\n", buf.Bytes(...阅读全文

博文 2015-06-17 23:07:25 body100123

最全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

二进制求和

给定两个二进制字符串,返回他们的和(用二进制表示)。 输入为非空字符串且只包含数字 1 和 0。 示例 1: 输入: a = "11", b = "1" 输出: "100" 示例 2: 输入: a = "1010", b = "1011" 输出: "10101" Golang解决: package main import ( "fmt" ) func addBinary(a string, b string) string { length := len(b) if len(a) > len(b) { length = len(a) } r := make([]byte, length) var extra byte for i := 0; i < length; i++ { var dib...阅读全文

博文 2020-02-27 07:32:43 CancerTiN

Google算法工程师尹成带你深度学习数据结构与算法导论(信息学竞赛,ACM竞赛常备)视频分享

​标题程序 = 数据结构 + 算法 程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。如果说各种编程语言是程序员的招式,那么数据结构和算法就相当于程序员的内功。编程实战算法,不是念PPT,我们讲的就是实战与代码实现与企业应用。程序 = 数据结构 + 算法 ——图灵奖得主,计算机科学家N.Wirth(沃斯)作为程序员,我们做机器学习也好,做python开发也好,java开发也好。有一种对所有程序员无一例外的刚需 —— 算法与数据结构日常增删改查 + 粘贴复制 + 搜索引擎可以实现很多东西。同样,这样也是没有任何竞争力的。我们只可以粘贴复制相似度极高的功能,稍复杂的逻辑没有任何办法。语言有很多,开发框架更是日新月异3个月不学就落后我们可...阅读全文

博文 2019-11-23 19:49:13 yanling1994

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

drools -Rete算法

Rete算法是Charles Forgy在1979年的论文中首次提出的,针对基于规则知识表现的模式匹配算法。目前来说,大部分规则引擎还是基于rete算法作为核心,但都有所改进,比如drool,jess等等,下面介绍rete算法的概念 1.rete 算法 Rete算法是一种高效的模式匹配算法用来实现产生式规则系统 (空间换时间,用内存换取匹配速度) 它是高效的算法,它通过缓存避免了相同条件多次评估的情况,但是带来了大量的内存使用 Rete 在拉丁语中是 ”net” ,有网络的意思;Rete算法通过规则条件生成了一个网络,每个规则条件是网络中的一个节点 rete可以被分为两部分:规则编译和运行时执行。规则编译是指根据规则集生成推理网络的过程,运行时执行指将数据送入推理网络进行筛选的过程。 2.规...阅读全文

博文 2017-11-29 01:45:52 u012373815

Merkle Tree学习

/*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为接触时间不长,对Merkle Tree的理解也不是很深入,如果有不对的地方,希望各位大神指正*/ Merkle Tree概念 Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树。Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值。非叶节点是其对应子节点串联字符串的hash。[1] 1. Hash Hash是一个把任意长度的数据映射成固定长度数据的函数[2]。例如,对于数据完整性校验,最简单的方法是对整个数据做Hash运算得到固定长度的Hash值,然后把得到的Hash值公布在网上,这样用...阅读全文

博文 2017-11-24 06:00:05 fengzhiwu

2018 程序の人生:学习总结

首先感谢老板,老板很淡定,从来不赶项目进度。于是双休+不打卡的放养(佛系的工作态度),造成自己这一年基本没有加过多少班,不过周六自己主动去加班次数也不少,十多次是有的。毕竟有时候确实工作略微有些忙不开需要赶一下进度,比如把数量百万体积的上T的图片资源上传到阿里云对象存储,真的需要手动来清理控制。 当然也就有了较为空闲的时间来自我学习。2017年咬咬牙把golang过一遍,然而后续似乎并没有什么卵用就忘得差不多了,今年思考过后侧重学习编程思想和算法。 一想起算法和数据结构,就想起来多年前大一的《计算机导论》中的那个问题,我至今觉得很直白的: 什么是树?什么是二叉树? 自然完全二叉树.png 稀里糊涂的这算是毕业第2年,开始回头接着刷LEETCODE。比不过那些码神级别的,看大神都是在校都刷了很...阅读全文

博文 2018-12-23 23:34:41 silencefun

电竞行业 招聘Golang工程师 Dota2相关

Golang开发工程师 10-30K 上海浦东 析乐数据 简历请投至 yangx@ceelo.cn 工作职责: 1、使用golang语言编写游戏录像解析器(二次开发) 2、Beego web服务器开发与维护 职位要求: 1、对dota2、LOL等moba类游戏有较为深入的了解 2、熟悉Go语言,对Golang系统库有研究者优先 3、有 Linux 的使用经验,具备一定的脚本和系统维护能力 4、具备C++、Node.js开发经验者优先 5、主动积极,善于学习和总结,乐于分享,有较强的团队精神。 6、对新领域有好奇心,勇于尝试 公司福利 1、我们颠覆以往你对创业公司的印象,10点上班18点下班,双休,法定假日只多...阅读全文

堆排序算法及go语言实现

堆分最大堆、最小堆。 以最大堆为例。 最大堆是一个完全二叉树。 并且要求每个结点的值必须大于他的两个子节点。 所以他的根结点一定是最大值。 但是左右结点大小不一定。 用数组表示的二叉树,可以这样表达: i的子节点下标为 2*i + 1 和 2 * i + 2. i的父节点下标为 (i-1)/2。 对于数组长度length,大于length/2的下标一定没有子节点. 排序思想是构建最大堆,之后根节点就是最大的一个了,把根结点拿出来,再把剩下的堆整理成最大堆,再把根拿出来。循环直到最后一个元素。 func HeapSort(values []int) { buildHeap(values) for i := len(values); i > 1; i-- { values[0], values[...阅读全文

博文 2016-04-15 16:00:02 zhaoguoguang

golang 最小堆排序实现

项目中有个模块要大量任务需要控制超时,内部实现了个定时器组件,底层就是基于最小堆算法和时间轮。最小堆算法挺简单的,一个完全二叉树,每个非叶子节点比其两个子节点都小,这就是个最小堆。 该文章后续仍在不断的更新修改中, 请移步到原文地址http://dmwan.cc 实现代码如下: package main import ( "fmt" ) func heapSort(input []int){ inputLen := len(input) if inputLen == 0 { return } for i:=0; i<inputLen; i++{ minAjust(input[i:]) } } func minAjust(input []int){ inputLen := len(input)...阅读全文

博文 2018-05-31 15:33:07 鼎铭

Go中的bit位和位运算符

一.二进制长什么样 bit比特是计算机的最小单元,是一个二进制位1或者0 t.Log("start") t.Logf("%b", 0) //0 t.Logf("%b", 1) //1 t.Logf("%b", 2) //10 t.Logf("%b", 3) //11 /* int是带符号的,表示范围是:-2147483648到2147483648,即-2^31到2^31次方。 uint则是不带符号的,表示范围是:2^32即0到4294967295。 */ var one uint one = 10000 t.Logf("%b", one) //10011100010000 13位,uint最多是32位 二.运算符 主要有下面几种运算符 & 位运算 AND | 位运算 OR ^ 位运算 XOR...阅读全文

位运算计算(go语言)

符号 二进制表示 十进制表示 0110 6 1011 11 & 0010 (上下都是1的话才是1,否则是0) 前后顺序不管,类似加法:1+2=2+1 2 | 1111 (上下都是0的话才是0,否则是1) 前后顺序不管,类似加法:1+2=2+1 15 ^ 1101 (上下数字不一样的话才是1,一样的话是0)前后顺序不管,类似加法:1+2=2+1 13 &^ 0100 (下面的数字是1,则为0,下面的数字为0,则为上面的数字)前后顺序不同结果不同,类似减法:1-2不等于2-1 方法2:先将下面的1011取反为0100,将取反完的0100和上面0110进行&运算,也可得到0100 4 关于&^的计算 上面的数字是6,二进制表示为: 0 1 1 0 下面的数字是11,二进制表示为: 1 0 1 1 ...阅读全文

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

avl树 golang实现

#Tree 术语: - 树 - 根 - 节点 - 叶子 - 层次, 根节点 - 深度 - 树的高度, 空树的深度为`-1`, 根的深度为`0`, 一个节点的高度为`0`, 所有的树叶的高度都为`0`。 --- ##二叉树 每个节点最多有两个孩子,空树也是一棵二叉树,链表是一种特殊的二叉树。 ## 二叉排序树(二叉搜索树,B树) ## 满二叉树 ## 完全二叉树 ## AVL树 AVL树本质上还是一棵二叉搜索树(因此读者可以看到我后面的代码是继承自二叉搜索树的),它的特点是: 1. 本身首先是一棵二叉搜索树。 2. 带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。 例如: ``` 5 5 / \ / \ 2 6 2 6 / \ \ / \ 1 4 7 1 4 / / 3...阅读全文

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 暮色伊人

go语言十大排序算法总结(下篇)

希尔排序 希尔排序基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2《d1重复上述的分组和排序,直至所取的增量dt=1(dt《dt-l《…《d2《d1),即所有记录放在同一组中进行直接插入排序为止。 该方法实质上是一种分组插入方法。 个人总结: public class ShellSorter { public void Sort(int[] arr) { int inc; for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ; for (; inc > 0; inc /= 3) { for (int i = ...阅读全文

博文 2016-07-17 19:00:04 guoer9973

golang的sort研究

年前没钱,等发工资。就这么在公司耗着不敢回家,无聊看了下golang的sort源码 type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements with indexes i and j. Swap(i, j int) } 只有实现这个接口才可以调用sort.Sort()进行排序哒 贴上源码实现...阅读全文

博文 2016-02-05 03:00:00 guhao123

Go 中 BST 的实现方式

本篇文章为A Binary Search Tree的核心内容翻译,仅做个人学习之用。原文在文章开头花了不少篇幅介绍查找、二叉树相关内容,本译文假定你具备一定的计算机基础,就不做过多介绍了。Import and globals在构建BST的结构时候,需要导入以下包,作用都很简单分别是提示Error,打印以及Log相关内容:package main import ( "errors" "fmt" "log" ) A Tree Node按照之前的定义,一个树节点需要包含节点数值、左孩子节点、右孩子节点。树就是一种递归的数据结构,孩子节点也同样具备上述特性。在这个小实例中,每个树节点还包含一个简单的string值域。所以Node节点的定义如下所示:type Node struct { Value s...阅读全文

博文 2017-09-27 03:06:43 allenwu.itscoder.com

初识go语言,写了个递归题目作为helloworld

上周D总在公司TTT上普及了go,当时只是概念上知道这门语言,D总出的小题目我用Java写了类似于DP的算法,被宣布太耗内存^^。这两天在公交上看了会reference(http://golang.org),最喜欢的特性是goroutines、多返回值和并列赋值/声明。觉得光看没用,还是写个helloworld吧,想到之前看到过一个这样的题目: 一颗二叉树,其节点上不均匀的分布了若干石头,石头数跟二叉树总节点数相同,石头只能在边上(即父子节点之间)进行搬运,每次只能搬运一颗石头。求使每个节点石头皆为一的最少搬运次数。 题目思路不多说了,甚至可能我的解法不是最优,这里主要是作为golang练手,在代码里详述。由于连机器上都还没装go环境,直接在http://play.golang.org上写的...阅读全文

博文 2014-10-04 19:26:23 leoyonn

fmt.Printf %* 格式化输出映射表

%d : decimal integer %x %o %b : integer in hexadecimal(十六进制) octal(八进制) binaery(二进制) %f %g %e:floating-point number: 3.141593 3.141592653589793 3.141593e+00 %t: boolean:true or false %c: rune(Unicode code point) %s: string %q: quoted string "abc" or rune 'c' %v: any value in a natural format %T: type of any value fmt....阅读全文

IP地址转化为二进制数

``` package main import ( "fmt" "strconv" "strings" ) /* IP地址转化为二进制数 */ func main() { addrInt := ipAddrToInt("192.168.8.152") /* 十进制转化为二进制 */ c := strconv.FormatInt(addrInt, 2) fmt.Println("c:", c) /* 二进制转化为十进制 */ d, err := strconv.ParseInt(c, 2, 64) fmt.Println("d:", d, err) } func ipAddrToInt(ipAddr string) int64 { bits := strings.Split(ipAddr, "...阅读全文

博文 2017-11-09 01:25:51 luominggao123

golang的匿名struct

go语言匿名struct的用例。 基本用例 package main import "fmt" func main() { v := struct { A int B string } { A: 10, B: "bb", } fmt.Printf("%+v\n", v) } 或者 package main import "fmt" func main() { v := struct { A int B string } { 10, "bb"} fmt.Printf("%+v\n", v) } 包含slice package main import "fmt" func main() { v := struct { A int B string C []int } { 10, "bb", []...阅读全文

博文 2019-12-28 05:32:40 CodingCode

Go by Example: Hello World

我们第一个程序将打印出经典消息“Hello world”。这里是全部的源码 package main import "fmt" func main() { fmt.Println("hello world") } 为了运行程序,将代码写入 hello-world.go文件。使用go run 命令执行。$ go run hello-world.go hello world 有时候我们想要将我们的程序编译出二进制程序。我们可以使用go build命令实现该功能。 $ go build hello-world.go $ ls hello-world hello-world.go 我们可以直接执行这个编译好的二进制文件。$ ./hello-world hello world现在我们会运行和编译一个基...阅读全文

博文 2014-11-18 21:00:01 codemanship

GoLang之命令行使用方法——flag package

2013-12-08 wcdj go语言通过使用标准库里的flag包来处理命令行参数。 Package flag implements command-line flag parsing. http://golang.org/pkg/flag/ http://golang.org/pkg/ 几点注意事项: 1,通过flag.String(), Bool(), Int()等方式来定义命令行中需要使用的flag。 2,在定义完flag后,通过调用flag.Parse()来进行对命令行参数的解析。 3,命令行参数的格式可以是: -flag xxx (使用空格,一个 - 符号) --flag xxx (使用空格,两个 - 符号) -flag=xxx (使用等号,一个 - 符号) --flag=xxx...阅读全文

博文 2015-06-17 20:00:55 delphiwcdj

理解位运算及使用场景

最近在看APUE,函数umask的例子用到了位运算,认为这是个非常适合使用位运算的场景,有必要笔记一下。例子代码基于golang,因为最近在学习golang. 位运算 先来看下位运算的定义:程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算说穿了,就是直接对整数在内存中的二进制位进行操作。摘自百度百科 比如,&运算本来是一个逻辑运算符,但整数与整数之间也可以进行&运算。举个例子,6的二进制是110,11的二进制是1011,那么6 & 11的结果就是2,它是二进制对应位进行逻辑运算的结果(0表示False,1表示True,空位都当0处理),下面的代码是用go实现的...阅读全文

博文 2017-03-06 05:47:00 kuuyee

Golang 数据结构:二叉搜索树

Golang 中二叉搜索树的实现及常用操作,数据结构系列原文:flaviocopes.com,翻译已获作者授权。 概念树(tree):一种分层的数据结构,类比家谱 二叉树(binary tree):每个节点最多只有 2 个子节点的树 二叉搜索树(binary search tree):左节点的值均小于右节点值的二叉树 深度(depth):从 root 根结点到当前节点唯一路径的长度 高度(height):从当前节点到一片树叶最长的路径的长度 根(Root):深度为 0 的树节点 内部节点(Internal node):至少有一个子节点的节点 树叶(Leaf):无子节点的节点 兄弟节点(sibling):拥有相同父节点的子节点 二叉搜索树常用操作与节点定义123456789Insert(v) ...阅读全文

博文 2018-03-15 10:59:42 wuYinBlog

关于官网二叉树的实现的困惑。

关于官方的二叉树的经典实现的。如下: ![1.png](http://studygolang.qiniudn.com/160804/3ea70c159dc41eeab7204d51b96505a5.png) ![2.png](http://studygolang.qiniudn.com/160804/0504f939c17106cb7ae36e42f92098c7.png) 如果有二叉树a,b,b和a的差别就是b的节点 比a多,那a使用的管道能正常关闭,b的使用管道何时关闭?b所在的goroutine何时释放? 个人认为如果出现不匹配,则始终会有管道和goroutine没有释放。 如果要释放资源,目前能想到的办法是给Walker中多传入一个flag管道判断是否需要释...阅读全文