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

DockOne技术分享(二十六):Docker Registry V1 to V2

【编者的话】Docker Registry 2.0版本在安全性和性能上做了诸多优化,并重新设计了镜像的存储的格式。我们将详细介绍Docker Registry V1与V2的区别,并在此基础上分享了灵雀云的实时同步迁移实践。 1. 相关概念首先讲一下Registry相关的概念。大家对Docker应该比较了解了,就是容器技术使用了Cgroups、Namespaces、Union FS等一系列机制来保证隔离。但我们实际使用中可能并不会直接接触这些技术,更直接使用的是pull image、run image,再进阶一点会使用build image和push image。我们日常的使用主要还是围绕image展开的。 而image和Registry的关系可以想象成自己机器上的源码和远端SVN或者Git服...阅读全文

博文 2017-06-25 15:01:18 oilbeater

Learn Golang List

Learn Golang List 简介 list标准包contain中的双向链表 常见操作 初始化 插入 删除 例子 package main import "fmt" import "container/list" func main() { fmt.Println("init list") l := list.New() //插入 l.PushBack("tail") fmt.Println(l) //头部添加 l.PushFront("head") fmt.Println(l) // 遍历 for i := l.Front(); i != nil; i = i.Next() { fmt.Println(i.Value) } } 如何查看帮助 终端运行godoc -http=:8080...阅读全文

博文 2019-02-13 04:34:43 笑吧小鸟

了解Flannel

概述 Flannel是 CoreOS 团队针对 Kubernetes 设计的一个覆盖网络(Overlay Network)工具,其目的在于帮助每一个使用 Kuberentes 的 CoreOS 主机拥有一个完整的子网。这次的分享内容将从Flannel的介绍、工作原理及安装和配置三方面来介绍这个工具的使用方法。 简介 Flannel是CoreOS团队针对Kubernetes设计的一个网络规划服务,简单来说,它的功能是让集群中的不同节点主机创建的Docker容器都具有全集群唯一的虚拟IP地址。在Kubernetes的网络模型中,假设了每个物理节点应该具备一段“属于同一个内网IP段内”的“专用的子网IP”。例如: 节点A:10.0.1.0/24 节点B:10.0.2.0/24 节点C:10.0.3...阅读全文

博文 2017-04-21 10:52:32 面码酱

好程序员Web前端开发入门之网页制作三要素

Web前端开发是由网页制作演变而来的,主要由HTML、CSS、JavaScript三大要素组成。专业的Web前端开发入门知识也一定会包含这些内容,今天好程序员就给大家简单介绍一下。HTML,超文本标记语言,标准通用标记语言下的一个应用。包括“头”部分(英语:Head)、和“主体”部分(英语:Body),其中“头”部提供关于网页的信息,“主体”部分提供网页的具体内容。CSS,层叠样式表,是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。JavaScript,一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。通常Ja...阅读全文

博文 2019-03-28 10:44:55 hcxy

为什么程序员都不喜欢使用switch,而是大量的 if……else if?

请用5秒钟的时间查看下面的代码是否存在bug。 OK,熟练的程序猿应该已经发现Bug所在了,在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。 缺点一. 语法正确,逻辑错误 这就是第一个理由为什么程序猿很少使用switch来做条件判断,对于新手来说忘记写break实在是再普通不过了,就算是老猿忘记写也是时有发生的事情,而这个语法错误在诸多的语法检查器上没有办法检查出来的,因为从语法角度来说是正确的!可是代码的处理逻辑却是错误的!用if来重写这段代码的话,就不会发生这种错误。 上面的代码为了保证正确我添加了else做一个逻辑上的保证,其实如果不写else,这段代码也不会发生逻辑错误,而且一旦我忘记写花括号的时候,语法编译器是会提示我添加的,甚至...阅读全文

博文 2020-05-07 15:41:18 IT编程技术支持

PHP 混合 Go 协程并发

想法很简单。通过设置 runtime.GOMAXPROCS(1) 让 golang 的进程变成单线程执行的。类似python用gevent的效果。然后通过调度多个协程实现异步I/O并发。php作为一个子函数跑在go的进程内,php需要yield到其他协程时.点击打http://www.skyz.com.cn/e/space/?userid=342828?feed_filter=/RJ/2016-10-27/6432.html http://www.skyz.com.cn/e/space/?userid=342829?feed_filter=/NY/2016-10-27/9086.html http://www.skyz.com.cn/e/space/?userid=342830?feed_f...阅读全文

博文 2016-10-27 16:00:07 hysteria362880

Golang Map 实现 (四) map的赋值和扩容

golang map 操作,是map 实现中较复杂的逻辑。因为当赋值时,为了减少hash 冲突链的长度过长问题,会做map 的扩容以及数据的迁移。而map 的扩容以及数据的迁移也是关注的重点。 数据结构 首先,我们需要重新学习下map实现的数据结构: type hmap struct { count int flags uint8 B uint8 noverflow uint16 hash0 uint32 buckets unsafe.Pointer oldbuckets unsafe.Pointer nevacuate uintptr extra *mapextra } type mapextra struct { overflow *[]*bmap oldoverflow *[]*bma...阅读全文

博文 2020-04-30 10:32:41 搬砖程序员带你飞

链表(Linked List)

什么是链表? 通过指针或者引用将一系列数据节点串起来的数据结构称为链表,链表数据结构与数组最明显的区别就是它在内存中并不是连续的,链表是通过在每个数据节点中设置下一个节点的指针Next将下一个节点串起来 为什么会有链表? 每一个编程语言中都会有数组的数据结构,可以直接通过索引下标来访问数组中的数据,所以对于数组来说访问一个值的时间复杂度为O(1)。但是如果要在数组中插入一个值时会有哪些情况呢 1、需要在数组的头插入 对于这种情况需要将数组中所有的元素往后挪动一步,然后再将待插入的数据插入第一个空间 2、需要在数组中间插入 其实这种情况跟第一种情况是一样的,只不过往后挪动的数据不是所有数据,只需要挪动待插入节点后面的数据 3、在数组的后面插入 这种情况最简单,只需要将待插入节点插入的最后即可 ...阅读全文

比特币核心概念及算法

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 bitcoin项目地址位于github仓库,当前各种“币”,基本都是从抄写bitcoin代码开始起步的。想要深度研究,从看源码开始不可避免。 P2P:电骡、迅雷、BT,在中国网络影视的发展让大家对P2P很熟悉,可能已经没有人记得比特币实际上是第一批P2P的实践者。所有交易记录在全网通过P2P的方式广播,每个人都保存一份完整的交易记录。所以也叫去中心化。 去中心化:bitcoin的去中心化是指的账本去中心化,每个人都拥有完整的交易记录。因此不会出现人为修改某一个账本就导致财产丢失的情况。 在这种模式下,想有效的修改以前的交易记录,就需要有工作量证明(POW)。理论上修改之前的区块必须做到51%的联网机器都认可才可能...阅读全文

博文 2019-09-18 16:32:42 链客

23.蛤蟆笔记go语言——PostgrelSQL驱动使用

23.蛤蟆笔记go语言——PostgrelSQL驱动使用 创建数据库用户表 #create database test; # create user astaxie with password 'astaxie'; CREATE TABLE userinfo ( uid serialNOT NULL, usernamecharacter varying(100) NOT NULL, departnamecharacter varying(500) NOT NULL, Createddate, CONSTRAINTuserinfo_pkey PRIMARY KEY (uid) ) WITH (OIDS=FALSE); CREATE TABLE userdeatail ( uidinteger,...阅读全文

博文 2016-06-29 00:00:00 notbaron

golang 链表

golang 链表 简介 golang自身实现了一个双向链表 导入 import "container/list" 定义 // 链表元素 type Element func (e *Element) Next() *Element func (e *Element) Prev() *Element //链表 type List func New() *List func (l *List) Back() *Element func (l *List) Front() *Element func (l *List) Init() *List func (l *List) InsertAfter(v interface{}, mark *Element) *Element func (l *Li...阅读全文

博文 2018-08-30 11:35:22 haoguo

golang rpc源码问题记录

源码位置 net/rpc/server.go 数据结构 // Server represents an RPC Server. type Server struct { serviceMap sync.Map // map[string]*service reqLock sync.Mutex // protects freeReq freeReq *Request respLock sync.Mutex // protects freeResp freeResp *Response } // 成员函数 func (server *Server)freeRequest(req *Request) func (server *Server)getRequest() *Request { serv...阅读全文

博文 2018-09-06 19:34:39 xikaka

go语言20小时从入门到精通(三、运算符)

##3.1 算术运算符 ##3.2 关系运算符 ##3.3 逻辑运算符 ##3.4 位运算符 位运算参考 &与:需要两个输入数的同一位都为1时才为1,其余为0 |或:两个输入数的同一位都不为0(即任意一个为1,或都为1)为1,其余为0 ^异或:两个输入数的同一位不同为1,如果相同就设为0 ~取反:对一个操作数的每一位都取反 <<左移:头部一位被丢弃位,尾部一位空位用0填充 >>右移:尾部一位被丢弃,头部一位空位用0填充 ##3.5 赋值运算符 ##3.6 其他运算符 3.7 运算符优先级 在Go语言中,一元运算符拥有最高的优先级,二元运算符的运算方向均是从左至右。 下表列出了所有运算符以及它们的优先级,由上至下代表优先级由高到低...阅读全文

博文 2019-09-18 01:34:45 后端小黑胖

单向循环链表解决约瑟夫环问题 - 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 雷顿学院

Golang之函数练习

小例题: package main import "fmt" /* 函数练习, 可变参数使用 写一个函数add 支持1个或多个int相加,并返回相加结果 写一个函数concat,支持1个或多个string拼接,并返回结果 */ func add(a int, arg ...int) int { sum := a for i := 0; i < len(arg); i++ { sum += arg[i] } return sum } func concat(a string, arg ...string) (result string) { result = a for i := 0; i < len(arg); i++ { result += arg[i] } return } func m...阅读全文

博文 2017-12-25 16:30:01 pyyu

12 Go语言map底层浅析

Go语言map底层浅析 [TOC] 笼统的来说,go的map底层是一个hash表,通过键值对进行映射。 键通过哈希函数生成哈希值,然后go底层的map数据结构就存储相应的hash值,进行索引,最终是在底层使用的数组存储key,和value。稍微详细的说,就设计到go map 的结构。hmap 和bmap。 1、Hash函数 哈希表就不得不说hash函数。hash函数,有加密型和非加密型。加密型的一般用于加密数据、数字摘要等,典型代表就是md5、sha1、sha256、aes256这种;非加密型的一般就是查找。在map的应用场景中,用的是查找。选择hash函数主要考察的是两点:性能、碰撞概率。golang使用的hash算法根据硬件选择,如果cpu支持aes,那么使用aes hash,否则使用m...阅读全文

博文 2019-03-04 16:34:44 杨旭

Go语言开发(十四)、Go语言常用标准库四

Go语言开发(十四)、Go语言常用标准库四 一、heap 1、heap简介 heap仅仅提供了最小堆的操作,没有提供堆的数据结构,堆的数据结构必须由开发者自己实现。heap提供了一个heap.Interface接口来作为堆的操作和堆的数据结构(开发者自己实现)之间的桥梁,堆的数据结构必须满足此接口: type Interface interface { sort.Interface Push(x interface{}) // add x as element Len() Pop() interface{} // remove and return element Len() - 1. } sort.Interface定义在sort.go中: type Interface interface...阅读全文

博文 2019-01-17 02:35:14 天山老妖S

golang 实现线程安全的跳转表 (skip list)

这个数据结构在本科的数据结构课是没有教过的,我知道这个东西是在,学习redis内部原理的时候接触的,redis 中的 sorted set 中就是使用了这种数据结构。如果你要学习下 redis的有序集合的原理,那么一定要看 skip list这种数据结构。 基础 网上有很多大佬都写了很多不错的博客去介绍 skip list,我就直接给出链接先去学习下吧: 跳表 skiplist 跳跃表 原始论文 跳表SkipList 跳表──没听过但很犀利的数据结构 跳表(skiplist)的理解 只是列举了部分我觉得比较好的。如果你看到了更牛逼的文章可以在下面评论出来。 如果你看完了还是不理解可以找下别的文章再理解下。 go 代码实现 跳转表结构 直接看原始论文中的配图吧。 skip_list 都会保存一...阅读全文

博文 2019-08-05 20:32:41 _AlphaBaby_

interface

http://blog.csdn.net/justaipanda/article/details/43155949 Go语言的主要设计者之一罗布·派克( Rob Pike)曾经说过,如果只能选择一个Go语言的特 性移植到其他语言中,他会选择接口。可见接口在golang中的地位,及其对gloang这门语言所带来的活力。 golang中的interface是什么 接口相当于是一份契约,它规定了一个对象所能提供的一组操作。要理解golang中接口的概念我们最好还是先来看看别的现代语言是如何实现接口的。C++没有提供interface这样的关键字,它通过纯虚基类实现接口,而java则通过interface关键字声明接口。它们有个共同特征就是一个类要实现该接口必须进行显示的声明,如下是java方式: ...阅读全文

博文 2017-09-29 21:04:57 丶沙工

Golang 写一个链表遍历的时候为什么是死循环?

type LinkNode struct { data int next *LinkNode } func reverseNode(node *LinkNode) { if node == nil { return } result := list.New() for i := node; i != nil; i = node.next { fmt.Println(i.data) result.PushFront(i.data) } //反向遍历 for v := result.Back(); v != nil; v = v.Prev() { fmt.Println(v.Value) } } func ma...阅读全文

Go转型——数据结构初级(二)

**1**.线性结构 线性结构的特点是:在数据元素的非空有限集合中: **(1)**. 存在唯一一个被称之为“第一个”的数据元素 **(2)**. 存在唯一一个被称之为“最后一个”的数据元素 **(3)**. 除了第一个元素,集合中其他数据元素都均只有一个前驱 **(4)**. 除了最后一个元素,集合中其他数据元素都均只有一个后继 **2**. 线性表 线性表是最常用且最简单的一种数据结构,简言之,一个线性表是n个数据元素的有限序列,至于每个元素的含义各不同,可能是一个数字或者更复杂的某些信息。 在稍微复杂的线性表中,一个数据元素可以由若干个数据项组成,这种情况下,我们把数据元素称之为“**记录**”,把线性表称之为“**文件**”。日常一图顶千言: ![image.png](https:/...阅读全文

博文 2018-01-20 22:34:24 yinshidaoshi

Go转型——数据结构初级(三)

**1**.链式线性表 从之前的例题来看,线性表的顺序存储结构如果需要插入和删除i(1<=i<=n)元素,需要移动大量元素,所以我们可以看一下线性表另一种表示方式——链式存储结构。它不要求逻辑上相邻的元素物理位置也相邻,因此,链式存储结构没有顺序线性表的缺点,同样,它也失去了顺序线性表可随机存储的优点。 线性链表的特点是,使用一组任意的存储单元存储线性表的数据元素(遮住存储单元可以是连续的,也可以是不连续的),因此为了表示数据元素a(i)和其直接后继元素a(i+1)之间的逻辑关系,对于数据元素a(i)来说,除了要保存自身存储的数据信息,还需要存储一个指示其直接后继的信息(即直接后继的存储位置),这两部分结合起来组成数据元素a(i)的存储映像,称为**结点**。它包含两个域,其中,包含自身存储...阅读全文

博文 2018-01-23 11:14:31 yinshidaoshi

链表以及golang介入式链表的实现

链表以及golang介入式链表的实现 今天看tcp/ip协议栈的代码时看到一个双向链表,链表吗?听过它的顶顶大名,知道它是由节点构成的,每个节点还有个指针指向下一个节点,但是从来没自己实现过一个,没有实践就不能深刻理解,遂有此文。 以下所有观点都是个人愚见,有不同建议或补充的的欢迎emial我aboutme 何为链表? 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。 简单的说...阅读全文

博文 2018-01-16 13:44:31 sheepbao.github.io

两数相加

题目: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 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帝国的map率先发言:“哈希表,哈希表,首先得是个表嘛,所以最基本的要用一个数组来存储,数组中...阅读全文

博文 2020-04-27 19:32:57 java梦想口服液

利用单向环形链表解决约瑟夫问题

## **利用单向环形链表解决约瑟夫问题** **** **一开始我是想用list来解决的,但我想了很久都想不出来,只能用自定义的单向环形链表解决了。** **基本思路: 略!!** :smile: **直接上代码吧** ```golang //单向环形链表解决约瑟夫问题 package main import "fmt" //创建一个带自身指针的结构体 type node struct { no int next *node } //创建两个标记变量,head标记第一个结点,tail标记最后一个结点 var head, tail *node //追加结点 func addNode(n *node) { if tail == nil { head = n n.next = head tail...阅读全文

博文 2018-12-03 15:25:52 joker_zai

Golang GC

内存分区 代码经过预处理、编译、汇编、链接4步后⽣成⼀个可执⾏程序。 在 Windows 下,程序是⼀个普通的可执⾏⽂件,以下列出⼀个⼆进制可执⾏⽂件的基本情况: PS D:\Soft\GoCode\src> size .\01.exe text data bss dec hex filename 1440107 81844 0 1521951 17391f .\01.exe 由上可以得知,在没有运⾏程序前,也就是说程序没有加载到内存前,可执⾏程序内部已经 分好三段信息,分别为代码区(text)、数据区(data)和未初始化数据区(bss)3 个部分。 有些⼈直接把data和bss合起来叫做静态区或全局区 代码区 存放 CPU 执⾏的机器指令。通常代码区是可共享的(即另外的执⾏程序可以调⽤它...阅读全文

博文 2020-05-21 19:33:17 强某某

系统编写练习:命令执行系统

需求: 编辑常用的命令,在某台机器上发送命令并执行。能够查看操作记录、执行状态。 系统: centos7 语言: golang、shell等 表 通用字段: id、created_at、modified_at、deleted_at 主机表(host) user(账号)、ip、passwd 操作表(operation) name、description、language(golang、shell)、input(输入字段名称及类型)、impl(实现接口、shell语句)【可能的扩展:多版本、安装、卸载、升级、回滚、重试】 操作记录表(operation_record) target(user:1234@ip)、operation_id、operation_name、params(参数)、resu...阅读全文

博文 2020-05-19 10:32:54 我就是小政政

阿里免费教你学习前端开发CSS基础

课程介绍 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。 课程目标 • 掌握CSS开发技术 适合人群 • 前端开发者 课时列表 • 课时1:CSS基础 • 课时2:CSS选择器(上) • 课时3:CSS选择器(下) • 课时4:CSS属性_背景、颜色、边框 • 课时5:CSS属性_字体...阅读全文

Go:操作注册表

package main import ( "fmt" "log" "golang.org/x/sys/windows/registry" ) func main() { key, exists, err := registry.CreateKey(registry.CURRENT_USER, "SOFTWARE\\Hello Go", registry.ALL_ACCESS) if err != nil { log.Fatal(err) } defer key.Close() if exists { fmt.Println("键已存在") } else { fmt.Println("新建注册表键") } // 写入32位整形值 key.SetDWordValue("DWORD", 0xFF...阅读全文

博文 2016-09-07 09:00:03 aqtata

把Go程序变小的办法

把Go程序变小的办法是: go build -ldflags “-s -w” (go install类似) -s去掉符号表(然后panic时候的stack trace就没有任何文件名/行号信息了, 这个等价于普通C/C++程序被strip的效果), -w去掉DWARF调试信息,得到的程序就不能用gdb调试了。 比如,server.go是一个简单的http server,用了net/http包。 $ go build server.go $ ls -l server -rwxr-xr-x 1 minux staff 4507004 2012-10-25 14:16 server $ go build -ldflags “-s -w” server.go $ ls -l server -rwxr...阅读全文

博文 2016-09-15 14:00:02 太阳黑子

golang学习笔记4:基本类型和运算符

布尔类型 bool布尔型的值只可以是常量 true 或者 false。一个简单的例子: var b bool = true 。两个类型相同的值可以使用相等 == 或者不等 != 运算符来进行比较并获得一个布尔型的值。当相等运算符两边的值是完全相同的值的时候会返回 true,否则返回 false,并且只有在两个的值的类型相同的情况下才可以使用。布尔型的常量和变量也可以通过和逻辑运算符(非 ! 、和 && 、或 || )结合来产生另外一个布尔值,这样的逻辑语句就其本身而言,并不是一个完整的 Go 语句。整型 int 和浮点型 floatGo 语言支持整型和浮点型数字,并且原生支持复数,其中位的运算采用补码。Go 也有基于架构的类型,例如:int、uint 和 uintptr。这些类型的长度都是根...阅读全文

博文 2018-10-12 00:34:42 编程老司机

golang interface 接口介绍

[TOC] golang interface 接口介绍 interface 介绍 如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键。在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心。 Go不是一种典型的OO语言,它在语法上不支持类和继承的概念。 没有继承是否就无法拥有多态行为了呢?答案是否定的,Go语言引入了一种新类型—Interface,它在效果上实现了类似于C++的“多态”概念,虽然与C++的多态在语法上并非完全对等,但至少在最终实现的效果上,它有多态的影子。 虽然Go语言没有类的概念,但它支持的数据类型可以定义对应的method(s)。本质上说,所谓的method(s)其实就是函数,只不过与...阅读全文

博文 2017-09-22 17:34:48 吴德宝

Golang数据结构 - 3 - 队列

队列 在上一章中我们学习了栈以及栈的基本操作,并使用数组切片和链表来实现了两种不同的栈操作方式,接下来我们将学习并实现队列。 队列与栈非常相似,但是元素的出入原则与栈不同,在栈中元素是以后进先出(LIFO)的原则进行的,而在队列中元素以先进先出(FIFO)的原则进行。 队列与栈类似,是一种特殊的线性表,它只允许在表的前端进行插入操作,也只允许在表的后端进行弹出操作。进行插入操作的一端称为队尾,而进行删除操作的一端则称为队头。 本章将基于Go数组切片、链表来实现队列的基本操作,同时实现双端队列,最终探讨循环队列的特性以及应用。 队列定义 首先对队列定义如下基本操作接口: Enqueue(e ...Element):添加若干元素入队 Dequeue() Element:队首元素出队 Peek()...阅读全文

博文 2019-06-19 23:32:46 monigo

leetcode 142 环形链表的环的第一个节点

题目描述 给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 说明:不允许修改给定的链表。进阶: 你能否不使用额外空间解决此题? 解题思路 无环链表,最后一个节点为nil,有环链表可以无限循环next下去 不用额外空间:快慢节点,慢节点一次走一步,快节点一次走两步,当进入环中,每次循环,快节点会离慢节点近一步,快节点最终会追上慢节点 用额外空间: 用map存走过的节点,第一个走过的节点就是环的入口 不用额外空间 设:链表头是X,环的第一个节点是Y,slow和fast第一次的交点是Z。各段的长度分别是a,b,c,如图所示 第一次相遇时slow走过的距离:a+b,fast走过的距离:a+b+c+b 因为fast的速度是slow的两倍,所以fast走的距离是slow的两...阅读全文

博文 2018-10-26 19:34:38 tomorrowwu

golang源码学习之defer

数据结构 //runtime/runtime2.go type _defer struct { siz int32 //参数大小 started bool // defer是否被调用过的标识 sp uintptr // sp at time of defer pc uintptr fn *funcval // defer 后面跟的function _panic *_panic // panic that is running defer link *_defer // 链表结构 } 每一个defer关键字在编译阶段都会转换成deferproc,编译器会在函数return之前插入deferreturn。 deferproc //runtime/panic.go // 创建一个defer, fn...阅读全文

博文 2019-07-22 19:32:41 ihornet

编译更小的Golang程序

把Go程序变小的办法是:go build -ldflags "-s -w"相关解释:-s去掉符号表,panic时候的stack trace就没有任何文件名/行号信息了,这个等价于普通C/C++程序被strip的效果,-w去掉DWARF调试信息,得到的程序就不能用gdb调试了。 -s和-w也可以分开使用.原文:http://sudochina.com/insion/blog/179...阅读全文

博文 2017-02-09 17:22:57 鲜橙加冰

用Golang写的域名信息搜集工具

blacksheepwall是一款由Go语言编写的域名信息搜集工具 ,你也可以在你的工具中将它作为一个独立软件包来使用。 下载 blacksheepwall支持跨平台,目前它所支持的系统有windows、linux以及苹果的darwin。你可以在这里下载到不同版本的二进制软件包。 安装 你可以直接下载编译好的二进制文件运行并安装它。如果你的系统已经安装好了Go语言环境并配置好了工作区,那么你也可以直接通过以下命令下载安装: $ go get github.com/tomsteele/blacksheepwall 使用 Usage: blacksheepwall [options] 命令选项: -h, --help 显示帮助信息并退出 -version...阅读全文

博文 2018-01-11 00:30:00 h2zZhou

现代缓存设计-续集

这是 Benjamin Manes 的讲座文章,他曾在谷歌担任工程师,现在正在 Vector 担任 CTO 职务。 [前一篇文章](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html)描述了 [Caffeine](https://github.com/ben-manes/caffeine) 使用的缓存算法,特别是淘汰算法和并发模型。我们还对淘汰算法进行了改进,并探索了一种新的到期方法。 ## 淘汰策略 [Window TinyLFU(W-TinyLFU)](https://dl.acm.org/citation.cfm?id=3149371)算法将策略分为三部分:准入窗口、频率滤波器和主区域。通过使用...阅读全文

博文 2019-10-15 12:01:36 polaris

链表中环的入口结点

题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路 可以使用快慢指针的思想,来判断链表中是否有环,快指针每次走两步,慢指针每次走一步,若快指针走到了空节点便是无环,若快慢指针相遇,便有环。 假设环形链表的起点到环形入口的距离为a,环形链表的入口到快慢指针的相遇点的距离为b,相遇点到环形链表的入口的距离为c,具体详情看下图。 我们可以通过公式推导出,当两个指针相遇之后,一个指针移到头部,一个指针在相遇点继续走,每次走一个单位;二者最终可以在链表入口相遇;具体公式如下: -1. 2 (a+b) = a + k(b+c) + c -2. ** a = (k-1)(b+c) + c** -3. 其中k大于等于1,而b+c为一圈,所以这两个指针肯定会在入口相遇 ...阅读全文

博文 2020-03-14 21:32:45 youzhihua

带你领略Go源码的魅力----Go内存原理详解

1、内存分区 代码经过预处理、编译、汇编、链接4步后生成一个可执行程序。 在 Windows 下,程序是一个普通的可执行文件,以下列出一个二进制可执行文件的基本情况: 通过上图可以得知,在没有运行程序前,也就是说程序没有加载到内存前,可执行程序内部已经分好三段信息,分别为代码区(text)、**数据区(data)和未初始化数据区(bss)**3 个部分。 有些人直接把data和bss合起来叫做静态区或全局区。 1、1 代码区(text) 存放 CPU 执行的机器指令。通常代码区是可共享的(即另外的执行程序可以调用它),使其可共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可。代码区通常是只读的,使其只读的原因是防止程序意外地修改了它的指令。另外,代码区还规划了局部变量的相关信息。...阅读全文

博文 2019-11-27 00:04:24 练识

责任链模式的使用-Netty ChannelPipeline和Mina IoFilterChain分析

本文来自网易云社区作者:乔安然1. Chain of Responsiblity定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。结构实图:2. Netty ChannelPipeline 分析Netty的ChannelPipeline和ChannelHandler机制类似于Servlet和Filter过滤器,这类过滤器其实就是责任链模式的一种变形,方便事件的拦截和用户业务逻辑的定制且相互不必耦合在一起。Netty将Channel的数据管道抽象为ChannelPipeline,消息在ChannelPipline中流动和传递。ChannelPipeline持有IO事件拦截器ChannelHand...阅读全文

博文 2018-09-18 09:34:46 网易云社区

数据结构和算法(Golang实现)(17)常见数据结构-树

树 树是一种比较高级的基础数据结构,由n个有限节点组成的具有层次关系的集合。 树的定义: 有节点间的层次关系,分为父节点和子节点。 有唯一一个根节点,该根节点没有父节点。 除了根节点,每个节点有且只有一个父节点。 每一个节点本身以及它的后代也是一棵树,是一个递归的结构。 没有后代的节点称为叶子节点,没有节点的树称为空树。 二叉树:每个节点最多只有两个儿子节点的树。 满二叉树:叶子节点与叶子节点之间的高度差为0的二叉树,即整颗树是满的,树呈满三角形结构。在国外的定义,非叶子节点儿子都是满的树就是满二叉树。我们以国内为准。 完全二叉树:叶子节点与叶子节点之间高度差不会超过1的二叉树,即一个节点的左右子树的高度不会超过一层,也称平衡二叉树。 树根据儿子节点的多寡,有二叉树,三叉树,四叉树等,我们这...阅读全文

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

GitHub 地址:coffeeTu-code LeekCode 地址:题库 Language:Golang /* @题目 我们把数组 A 中符合下列属性的任意连续子数组 B 称为 “山脉”: B.length >= 3 存在 0 < i < B.length - 1 使得 B[0] < B[1] < ... B[i-1] < B[i] > B[i+1] > ... > B[B.length - 1] (注意:B 可以是 A 的任意子数组,包括整个数组 A。) 给出一个整数数组 A,返回最长 “山脉” 的长度。 如果不含有 “山脉” 则返回 0。 @示例 1: 输入:[2,1,4,7,3,2,5] 输出:5 解释:最长的 “山脉” 是 [1,4,7,3,2],长度为 5。 @示例 2: 输入...阅读全文

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

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 风云风雨

2019年5月份找工作面试知识点总结

面试知识点 算法和数据结构 常用算法 排序算法 各种排序算法的时间复杂度,是否稳定 内部排序 快速排序 nlgn 不稳定 冒泡排序 n2 稳定 堆排序 nlgn 不稳定 大小堆 归并排序 选择排序 n2 不稳定 5 3 5 2 4 插入排序 n2 稳定 希尔排序 不稳定 手写冒泡 手写快排 外部排序 查找算法 顺序查找 二分(手写) 递归 非递归 二叉搜索树 平衡搜索树 红黑树 多路搜索树 B tree B+tree 一致性hash 减少数据迁移 [0,2的32次方 - 1] 虚拟节点 客户端实现 动态规划dp 最长公共子序列 和最大的连续子序列 M*N棋盘问题 字符串处理 数据结构 数组 链表 队列 栈 堆 树 二叉树 红黑树 图 hashtable 常见算法题 剑指offter 单链表反...阅读全文

博文 2020-03-16 17:32:55 airect

golang 中拿 slice 当 queue 和拿 list 当 queue

目录 前言 拿 slice 当 queue 拿 list 当 queue 性能对比 换一个场景再对比 总结 前言 我记得曾经有一次参加面试时,在答题过程中非常嘴欠地说了一句:“我之所以代码这么写,因为在 golang 中没有内置的无限长度 queue 的实现……”,当时说完我就后悔了,面试我的人,前几个问题本就有那么几分刻薄,一听这一句,立马就来劲了:“谁说没有?谁说没有?” 好在我连连改口,巧舌如簧,搪塞了过去。我明白,在大牛们的手里,只需最简单的数组,稍微加几个“简单的”函数,摇身一变,就可以成为“现成的”队列、栈、环、二叉树、图…… 我不仅不是大牛,我还是个懒汉,我希望的内置的队列,是拿过来就能 dequeue、enqueue 的工具,但 golang 的标准库里并没有名字叫 queu...阅读全文

博文 2019-08-04 20:08:50 Wolfogre's Blog

阿里免费教你学习前端开发CSS基础

课程介绍 层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。 CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力。 课程目标 • 掌握CSS开发技术 适合人群 • 前端开发者 课时列表 • 课时1:CSS基础 • 课时2:CSS选择器(上) • 课时3:CSS选择器(下) • 课时4:CSS属性_背景、颜色、边框 • 课时5:CSS属性_字体文本...阅读全文