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

Django 使用多个数据库

在django项目中, 一个工程中存在多个APP应用很常见. 有时候希望不同的APP连接不同的数据库,这个时候需要建立多个数据库连接。 参考:http://blog.csdn.net/songfreeman/article/details/70229839 1. 修改项目的 settings 配置 在 settings.py 中配置需要连接的多个数据库连接串 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), }, 'ora1': { # 配置第二个数据库节点名称 'ENGINE': 'django.db.backend...阅读全文

博文 2019-03-11 18:34:41 51reboot

带你了解“比特币黄金”和SegWit2x分叉

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 10月25日,比特币黄金从比特币中分离出来创造出一个基于ASIC挖矿的数字货币。几周之后,比特币公司中一个重要的集团想要根据 “纽约协议” 定义的SegWit2x方案来进行硬分叉,也许将要导致另一个新币的诞生。 如果这些都实现,在这篇文章发表后大约一个月内,比特币就会有三个不同的区块链和三种不同类型的币。一个区块链会符合现有的比特币协议;为了方便文章叙述,这个币会被称为“BTC”。第二个区块链会符合“比特币黄金协议”,这篇文章中,这个币会被称为“BTG”。第三个区块链会符合SegWit2x协议;这个币种将被称为“B2X”。 好消息是每个BTC都会有效地复制在比特币黄金和SegWit2x的区块链上。如果在分叉的时候...阅读全文

博文 2019-09-19 15:02:58 链客

Goland使用初探以及运行流程浅析

这篇文章虽然面向初学者,但愿意介绍下Go语言的运行机制和Goland的运行流程。Goland作为```Jetbranis ```家的```IDE ```,也被许多互联网公司所使用。下面以goland视角,从安装到运行介绍入门应该注意的问题 个人选择的是```Go1.8 ```,为普遍企业选择的```Go version ``` Go1.8 : ```https://dl.google.com/go/go1.8.windows-amd64.msi``` Go1.8 doc : ```https://golang.org/doc/go1.8``` 让我们先来看看``` Goland```中的编译参数 ```GOPATH``` 是指自己希望的工作目录 ```GOROOT ``` 是指自己安装Go语...阅读全文

博文 2019-02-02 09:46:35 complone

聊聊初创公司的后端语言选型(小众语言)

在创业公司初创伊始,如何选择合适的语言决定了产品后续的技术栈和如何进行合理的业务支撑方向。如果你在读这篇文章之前,更倾向于选择Java/C#/PHP常见语言技术栈,我觉得对于你而言,这篇文章帮助不大。因为对你而言,这些技术栈意味着更加方便招人,更方便的故障处理资料等等。但是如果一个初创公司想要选择合理的小众语言技术栈,我想这篇文章对你也许有一些帮助。 在文章开始之前,我觉得有必要描述一下所谓的小众语言,这里我在最初进行技术选型时,考察了包括: Python: 你可能在接触爬虫、大数据分析等等方面听过Python的大名,大家都知道Pythonista都习惯说的一句话就是:人生苦短,我用Python。 Ruby: 你如果做过Web框架,你遇到最多的是很多人都会提到RoR框架。用过之后只有一个惊叹...阅读全文

博文 2017-02-10 15:45:16 kevin

golang进阶(八)——隐藏技能go:linkname

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lastsweetop/article/details/78830772 什么是go:linkname 指令的格式如下: //go:linkname hello github.com/lastsweetop/testlinkname/hello.hellofunc go:linkname引导编译器将当前(私有)方法或者变量在编译时链接到指定的位置的方法或者变量,第一个参数表示当前方法或变量,第二个参数表示目标方法或变量,因为这关指令会破坏系统和包的模块化,因此在使用时必须导入unsafe 为什么要用go:linkname 这个指令不经常用,最好也不要用,但理解这个指令可以帮助你理解核心包的很多代...阅读全文

博文 2018-12-16 00:31:32 lastsweetop

Golang高效编写(整理)

这是一篇如何编写高效Golang语言程序的文章。这是从一些开发者的经验总结中整理出来的。根据这篇文章,你可以编写出一篇更高效的Golang程序。 尽量使用直接的类型 interface{}提供了golang中的interface类似于java的interface、PHP的interface或C++的纯虚基类。通过这种方式可以提供更快捷的编码。但是这种方式也带来了一些问题,最大的问题还是性能问题。 // method 1 a.AA() // method 2 v.(InterfaceA).AA() // method 3 switch v.(type) { case InterfaceA: v.(InterfaceA).AA() } 这三组方法性能逐个下降,最好的方式是直接进行类型引用。 指针...阅读全文

Go与WebAssembly

在之前的一篇文章《WebAssembly的过去,现在和未来》,简单的介绍了WASM的历史,现状以及即将带来的特性。这篇文章,将会简单的使用Go的API来生成WASM,通过与JS的交互来实现WASM的加载和执行。使用Go的原因也是个人的爱好,其非常简洁,拥有静态语言的可维护性及性能,同时还拥有动态语言的开发效率,灵活性(这篇文章要求你对Go有一定的了解,以后有机会也会写一些Go的入门文章)。Hello world1、首先需要安装Go1.11+的版本,WebAssembly在Go1.11得到支持2、在Go编译时需要指定OS参数为js,ARCH参数为wasm,就像这样:GOARCH=wasm GOOS=js go build -o lib.wasm main.go 编译完成会在当前目录下生成lib...阅读全文

博文 2018-12-12 15:45:10 Richard

最近看了篇文章,有一部分内容是关于端口号数量限制的,感觉是作者理解错误了,有懂的帮忙解答一下

16位的端口号数量有限,如果每次后端交互都需要新建连接,理论上来说,同时请求后端Service的Goroutine数量无法超过65535这个硬性限制,在如今这个动辄“十万”“百万”高并发时代,最高6w并发貌似不太拿得出...阅读全文

Golang for Android or iOS 使用记录

[TOC] 环境 OSX 10.10.5 jdk1.8.0_92 golang 1.7 Android SDK 25.1.7 Andorid-NDK-r12b Andorid Studio 1.5.1 xcode 7.2.1 swift 2.1.1 目前golang bind 支持的类型说明 https://godoc.org/golang.org/x/mobile/cmd/gobind 安装 gomobile go get -u -v golang.org/x/mobile 会报告一个错误 package golang.org/x/mobile: no buildable Go source files in /Users/sinlov/go/src/golang.org/x/mobile...阅读全文

博文 2017-03-05 19:34:56 泛原罪

游戏服务器中的数据库异步操作技术和游戏数据的保存机制

在游戏服务器中,处理玩家登陆需要向数据库查询玩家的账号和密码,玩家上线和下线需要对玩家的角色数据从数据库中读取和保存。可以说,相对于游戏逻辑处理来说,数据库操作是一种相对很慢的操作,即便你通过使用多个线程多个数据库连接来提高数据库操作的处理能力,但是,在高并发高负载的服务器应用中,这样仍然会是相当的负载瓶颈。设想这样一种设计方案,见下图: image 在大量玩家登陆游戏服务器时,由于有大量的数据库访问请求,即便是有自己实现的CACHE机制,还是会导致服务器耗尽所有的逻辑线程资源,服务器的处理能力将降低成DBMS的处理能力。 为了不阻塞逻辑线程,可以采用异步数据库访问的方式,即数据库操作请求提交给专门的数据库处理线程池,然后逻辑线程不再等待数据库处理结果,继续处理其他,不再阻塞在这里。 抽象的...阅读全文

博文 2019-01-01 12:34:45 Golang语言社区

Go网络开发中的两个技术点

最近碰到群里网友问如果检查网络连接的Timeout,联想最近看到的另一个问题, 在这篇文章统一记录一下。 如果检查一个网络错误是Timeout导致的? 自 Go 1.6开始, 所有的超时导致的网络错误都可以通过net.Error的Timeout()方法检查。 123if err, ok := err.(net.Error); ok && err.Timeout() { ……} 更早版本的Go并没有专门的检查Timeout方法。 可以参考: https://stackoverflow.com/questions/23494950/specifically-check-for-timeout-error 产品中一定不要使用默认的http.Get 如果你觉得方便,直接使用http.Get或者类似的...阅读全文

博文 2018-08-31 08:59:05 smallnest

再来一波PHP程序员必看书籍

前言 https://segmentfault.com/a/11... 内列出的是已看过的。 本篇文章内列出的书籍是准备要看或者正在看的,与大家分享。 知识无价,还是建议各位童鞋把更多的资金投入到学习中。书名排名不分前后 《编码:隐匿在计算机软硬件背后的语言》 https://item.jd.com/11116026.... 《数学之美(第二版)》 https://item.jd.com/11572052.... 《计算机科学导论》 https://item.jd.com/11758229.... 《PHP Web安全开发实战》 https://item.jd.com/335372257... 《深入浅出MySQL》 https://item.jd.com/11381295.... 这是一本...阅读全文

博文 2018-10-10 11:34:52 CrazyCodes

【MMORPG开发日志01】技术选型及踩过的坑 - 草稿

写在前面 之前的序言发出来之后,很多热心小伙伴给我留言和私信,给我提供了各种各样的想法。让我产生了一些想法,所以重新思考开这个坑的目的。结合我自身的情况,理论结合实际。做一次更完善的技术选型。并且把这周来踩过的坑总结一下,希望能对后来的小伙伴有帮助。 这篇文章的视频版在这里: 【MMORPG开发日志】004复刻魔兽世界,KBEngine服务器框架选择,安装和启动! 交流QQ群:872537977 项目地址github:https://github.com/Liweimin0512/uRPG 不得不吐槽一下,视频形式的开发日志所要付出的时间真的比写文章多得多啊。 开发目的 我在上篇文章中说我做这个项目是为了蹭魔兽世界怀旧服的热度其实是开了个玩笑。 真实的原因是我想涉猎自己从未接触过的游戏服务器...阅读全文

博文 2019-10-10 01:32:45 aside section ._1OhGeD

Go语言 Go1.1新调度器详解

创翻译文章,转载请注明出处:服务器非业余研究-sunface 简介 Go1.1更新中最重要的特性之一就是由Dmitry Vyukov开发的全新的调度器。新的调度器能极大的提高Go并行程序的性能并且不需要对程序进行修改,因此我认为应该写一篇文章为大家介绍下新版的调度器特性。 这篇文章所写的绝大部分内容都可以在original design doc找到 ——这是篇很有技术含量而且很通俗易懂的文章,你所需要的知识都可以从这篇文章中获取,而且由于插入了配图,因此相对来说更清晰易读。 Go运行时系统需要用调度器来做什么? 首先我们需要了解下为什么需要新的调度器?为什么在操作系统能对线程进行调度的情况下还要创建一个用户空间的调度器? 对现存的Unix进程模型来说,POSIX线程API是一种逻辑上扩展,线...阅读全文

博文 2015-06-17 23:07:47 abv123456789

C Bindings in Go: A Practical Example Part 1

这篇文章对于想在go中使用c语言的朋友应该很有帮助,一步步讲解了怎么做。 另外,按照文章一步步做,需要安装 libspotify 库,可以到这里下载,各大平台都支持:http://developer.spotify.com/technologies/libspotify/ 文章链接:http://codegangsta.io/blog/2013/07/08/c-bindings-in-go-a-practical-example/ (其实点击标题也会跳转到原文...阅读全文

Go grpc配置

最近在研究Docker的源码时,读到libContainerd部分时,发现它用到了grpc.而此前只知道只是一个用于分布式系统中RPC的库.就借着这个机会,学习一下这个工具. 写过Java中的WSDL的朋友,会觉得其实它们的使用非常相似. 安装ProtoBuf 3 因为grpc依赖ProtoBuf,将我们写的服务定义转换成Go文件.所以我们需要安装ProtoBuf. 那为什么要安装ProtoBuf 3这个新出的,各个方面都还不是很完善的版本呢?官网上建议采用这个版本,就安装这个版本喽.如果我们安装ProtoBuf2,以后很可能会有兼容问题. 那如何安装呢? 首先,去ProtoBuf的Github主页下载最新版的ProtoBuf的包.在我写这篇文章时,最新版的是3.0.2.这里因为我们是为Go...阅读全文

博文 2017-05-08 02:32:29 AlstonWilliams

Goroutine 的同步(第三部分)

- 第一部分:https://studygolang.com/articles/14118 - 第二部分:https://studygolang.com/articles/14478 ## mutex 和 sync.Once 介绍 ![image](https://raw.githubusercontent.com/studygolang/gctt-images/master/sync-goroutine/part3-1.jpeg) 假设你的程序中有一个需要某种初始化的功能。该 Bootstrap 程序成本很高,因此将其推迟到实际使用功能的那一刻是有意义的。这样,当功能未激活时,就不会浪费 CPU 周期。 这在 Go 中如何完成? ```go package main import "fmt...阅读全文

博文 2018-11-10 09:58:22 krystollia

也许 Go 开发可以更简单!Go += Package Versioning

简评:对于Go来说一直以来依赖包的版本控制上没有一个好的方案,尽管社区诞生了不下十余个解决该问题的工具,但一直以来没有一个官方的支持。这个提案有望在Go的下个版本中看到官方的包版本控制了,去除了GOPATH依赖,同时还引入了module 的概念,真正意义上实现了重编译,可谓一次大的变更编译:缪斯的情人 是时候为 Go 添加包版本控制了! 更确切地说,我们需要把包版本的概念普及到Go 开发者和工具常用词汇中,以便在后续的相互沟通时能准确一致的表达哪些程序代码需要编译、运行和解析。同样,go 命令也需要准确的告诉开发者在编译中使用了哪个包的哪个版本。 版本控制可以让我们能够实现重编译。当我让你试用我程序最新版本时,我清楚的知道你不仅仅获取到的是我最新程序的代码,还包括我代码所依赖的相同版本的包,...阅读全文

博文 2018-02-23 11:34:39 缪斯的情人

在golang中如何使用rating-input来进行打分及评价

在我们之前的C++文章“利用rating-input PreviewWidget来对事物进行评价及打分”,我们已经展示了如何使用C++来在Scope中的Preview中对事物进行评价或打分。在今天的这篇文章中,我们将介绍如何在Go Scope中来做同样的事。我们可以通过这个例子来展示如何捕获在Go Preview中的按钮并得到它们的action id以进行分别的处理。 在Go文件中的Preview方法中: unc (s *MyScope) Preview(result *scopes.Result, metadata *scopes.ActionMetadata, reply *scopes.PreviewReply, cancelled <-chan bool) error { layou...阅读全文

博文 2016-02-14 03:00:01 UbuntuTouch

Go调度器系列(3)图解调度原理

如果你已经阅读了前2篇文章:《调度起源》和《宏观看调度器》,你对G、P、M肯定已经不再陌生,我们这篇文章就介绍Go调度器的基本原理,本文总结了12个主要的场景,覆盖了以下内容: G的创建和分配。 P的本地队列和全局队列的负载均衡。 M如何寻找G。 M如何从G1切换到G2。 work stealing,M如何去偷G。 为何需要自旋线程。 G进行系统调用,如何保证P的其他G'可以被执行,而不是饿死。 Go调度器的抢占。 12场景 提示:图在前,场景描述在后。 上图中三角形、正方形、圆形分别代表了M、P、G,正方形连接的绿色长方形代表了P的本地队列。 场景1:p1拥有g1,m1获取p1后开始运行g1,g1使用go func()创建了g2,为了局部性g2优先加入到p1的本地队列。 场景2:g1运行完...阅读全文

博文 2019-04-06 13:34:38 大彬

golang中的 struct & interface 嵌入(Embedding)

参考这篇文章 https://studygolang.com/articles/6934 package main import "fmt" type Printer interface{ Print() } type CanonPrinter struct{ Printname string } // 若不实现此方法则下面的赋值会报错 func (printer CanonPrinter) Print(){ fmt.Println("AAA") } type PrintWorker struct{ Printer // 内嵌了一个接口 name string age int } // 实现 xxx func (printworker PrintWorker) Print(){ fmt.Pr...阅读全文

博文 2018-12-21 15:34:42 个00个

Golang模仿七牛图片处理API

之前一直在用qiniu的存储服务,生成图片的缩略图,模糊图,视频的webp,现在需要把存储移到s3上,那么这些图片,视频处理就要自己动手写了,本文梳理一下大致的思路。 分析需求 先看一下qiniu的接口是如何处理图片的,例如先截取视频第一秒的图片,再把图片缩略,最后存储到一个新的key,命令可以这么写 vframe/jpg/offset/1|imageMogr2/thumbnail/400x|saveas/xxx, 可以看到三个操作之间用 | 符号分割,类似unix 的 pipe 操作。 上面的操作算作一个cmd, 一次API请求可以同时处理多个cmd,cmd之间用分号分割, 处理完毕后,在回调中把处理结果返回,例如 { "id": "xxxxx", "pipeline": "xxx", "...阅读全文

博文 2017-02-09 08:29:46 一堆好人卡

java程序员的福音,10本最新学习书籍免费下载

谁不爱免费的东西?最少我喜欢,比如说免费的电子书、pdf,幸运的是,互联网随处都是免费的书籍和电子书,但感到遗憾,绝大多数的品质不怎么高,所以我搜罗了10本完全免费的Java书籍。列表这些书籍可以ePub,Mobi、或者PDF格式免费下载以及在线阅读。小编分类整理了许多java进阶学习电子书籍,需要下载的请加JAVA高阶学习Q群:664389243 就能下载这十本2019java进阶学习书籍。1、《Introducing Java 8》​Java SE 8版本已经是其历史上对Java最大的变更,其关键特点是lambda表达式。假若一名有工作经验的开发者,期望工作中选用Java 8,那么在深入分析lambda表达式和Java 8的另一个关键特点:Streams API,这篇简洁明了的白皮书将带...阅读全文

博文 2019-01-09 20:47:49 javaGO007

【MMORPG开发日志010】漫谈一些有的没的

【MMORPG开发日志010】漫谈一些有的没的 写在前面 首先是祝愿所有看到这篇文章的小伙伴新年快乐健康! 目前关于这个项目的文字版开发日志已经很久没更新了,这段时间我更新了很多视频形式的开发日志,感兴趣的可以访问我的B站主页:玩物不丧志的老李 游戏研发过程中,总是产生各种想法,这些想法纠结着我。 这篇文章可能很乱,因为我在打算写这篇文章的时候依然没有清晰的中心思想 换句话说,这篇文章只是我自言自语的对于这段时间独立开发的一个复盘 如果能对你有帮助,自然是最好的了。 这个项目的意义 事到如今,我不得不重新思考这个项目存在的意义。 诚然,在最开始,这个项目的存在仅仅是为了“学习”,学习什么?学习网络游戏的开发,特别是MMORPG游戏的开发。 所以我们的目标自然不是“创新”,而应该是“复刻”。 ...阅读全文

博文 2020-02-01 03:32:52 李维民0512

一步一步教你写BT种子嗅探器之二---DHT篇

之前写了原理篇,在原理篇里简单的介绍了一下DHT,但是还不够详细。今天我们就专门详细的讲一下嗅探器的核心-DHT,这里默认原理篇你已经读了。 背景知识 DHT全称 Distributed Hash Table,中文翻译过来就是分布式哈希表。它是一种去中心化的分布式系统,特点主要有自动去中心化,强大的容错能力,支持扩展。另外它规定了自己的架构,包括keyspace和overlay network(覆盖网络)两部分。但是他没有规定具体的算法细节,所以出现了很多不同的实现方式,比如Chord,Pastry,Kademlia等。BitTorrent中的DHT是基于Kademlia的一种变形,它的官方名称叫做 Mainline DHT。 DHT人如其名,把它看成一个整体,从远处看它,它就是一张哈希表,...阅读全文

博文 2017-02-09 08:32:47 shiyanhui

2018-10-01-Day1- Go unnoticed

Day1- Go unnoticed1- 解释:Go unnoticed,e.g: Hard work hardly goesunnoticed.2- 进阶拓展Rarely/hardly/seldom go unnoticed/Go unrecognized/Go unreported/Go unthinkable/Go wasted/Go unconsumed/Go undetectable 2- 例句:A)场景工作, This new fixture is inaccurate so those discrepancies go undetectable.B) 童话故事 The fairy tale goes unthinkable...阅读全文

博文 2019-04-14 00:31:01 weixin_33753003

golang编程进阶技巧

对最近使用到的技巧做一个汇总。使用反斜杠处理较长的字符串,省去手动转义,简洁又节省时间。 反斜杠的使用 类型转换。 类型转换一步到位 GC优化。 gc优化 go数组是值类型,如果想避免数据复制,可以改用指针或切片。给函数添加方法,调用自己。 函数属性 匿名接口的使用。 匿名接...阅读全文

博文 2019-08-28 01:32:45 飞刀无痕

Go入门28:错误处理之 error

Golang中引入error接口类型作为错误处理的标准模式,如果函数要返回错误,则返回值类型列表中肯定包含error。error处理过程类似于C语言中的错误码,可逐层返回,直到被处理。error基本用法error 类型实际上是抽象了 Error() 方法的 error接口,Golang使用该接口进行标准的错误处理。error对应源代码如下: type error interface { Error() string } 这个设计也正好体现了Go哲学中的“正交”理念:error context与error类型的分离。无论error context是int、float还是string或是其他,统统用error作为返回值类型即可。一般情况下,如果函数需要返回错误,就将 error 作为多个返回值中...阅读全文

博文 2018-06-20 00:34:43 laigw

Golang从入门到进阶系列:Go Modules机制

Go Modules机制是Go官方的包管理机制,从Go 1.11开始作为experiment feature引入,GO111MODULE是这个特性的开关。 GO111MODULE GO111MODULE有三个值:auto、on和off,默认值为auto,GO111MODULE的值会影响Go compiler的依赖管理模式 off:go compiler会始终使用GOPATH mode,无论要构建的源码目录是否在GOPATH路径下,go compiler都会在传统GOPATH和vendor目录下,搜索目标程序依赖的go package on:go compiler会始终使用module-aware mode,无论要构建的源码是否位于GOPATH路径下,go compiler都会在go mod命...阅读全文

博文 2020-05-21 15:34:44 Damion

阿里云专家风移“出诊”记录:SQL Server 疑难杂症解决之道(上篇)

授人予鱼而不如授人予渔,本系列专题(上篇)为大家推荐了31篇好文,希望可以帮到大家! “出诊”:RDS SQL Server死锁(Deadlock) 1. RDS SQL Server死锁(Deadlock)系列之一使用DBCC捕获死锁 经常会被客户问道:“应用程序被死锁报错啦?影响很大,到底是哪个进程导致了死锁发生的啊?怎么解决啊?怎么办呀?”。如何解决呢? 点击阅读详情 https://yq.aliyun.com/articles/73856?utm_content=m_28061 2. RDS SQL Server死锁(Deadlock)系列之二使用Profiler捕获死锁 不管是RDS SQL Server还是自建,死锁的确是一个非常头疼的问题。这...阅读全文

打破瓶颈!快速掌握数据化运营利器【Quick BI】!

身处大数据时代,你真的知道如何处理数据和分析数据吗? 或许那些被你忽视的数据背后就暗藏着重要的商业灵感。并非人人都是数据专家,有时候你需要一些专业的软件来帮你处理数据。那么如何能快速、准确地从数据中提取最有价值的部分从而进行有效的分析呢? 你需要一款强有力的工具"Quick BI"可以支持: 无缝集成云上数据:支持多种数据源:RDS、ADS、MaxCompute;ECS自建Mysql、SqlServer;本地文件等。 快速搭建数据门户:拖拽式操作、强大的数据建模、丰富的可视化图表、快速搭建数据门户。 灵活嵌入第三方系统:仪表板可嵌入到自有系统,直接在自有系统访问报表, 并实现免登。 安全管控数据权限:内置组织成员管理,支持行级数据权限,满足同一份报表,不同人看不同的数...阅读全文

Go基础学习记录之Session存储

Session存储 我们在上篇文章中介绍了一个简单的Session管理器的工作原理,除此之外,我们还定义了一个Session存储接口。在本次分享中,我将展示一个实现此接口的基于内存的会话存储引擎的示例。您也可以将其定制为其他形式的Session存储。 package memory import ( "container/list" "sync" "time" "github.com/durban89/wiki/session" ) // Store 存储 type Store struct { sid string // unique session is lastTime time.Time // last save time value map[interface{}]interface...阅读全文

博文 2018-10-31 10:34:44 DurbanZhang

go-callvis 代码分析工具

go-callvis 发现这个不错的工具,然后尝试用了一下,还有很多的问题,这篇文章,主要是讲解怎么使用。 go-callvis 是一个开发工具,其目的是通过使用来自函数调用关系图的数据及其与包和类型的关系来对程序进行可视概览。 这在你只是试图理解别人的代码结构,或在代码复杂性增加的大型项目中特别有用。 [TOC] 缺点 github项目上的文档写的不是很清晰,我尝试了一下,没用 图画的很乱,有时候完全摸不到头绪 官方示例 用法 github上的图例 三个例子 docker 使用 go-callvis github.com/项目具体路径 | dot -Tpng -o syncthing.png 解析的是main包 go-callvis -group pkg,type -focus [想要分析...阅读全文

博文 2019-01-26 20:34:41 sixgo

[系列] - go-gin-api 路由中间件 - 日志记录(三)

概述 首先同步下项目概况: 上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 validator.v8 版本,现已更新到 validator.v9 版本,最新代码查看 github 即可。 这篇文章咱们分享:路由中间件 - 日志记录。 日志是特别重要的一个东西,方便我们对问题进行排查,这篇文章我们实现将日志记录到文本文件中。 这是我规划的,需要记录的参数: - request 请求数据 - request_time - request_method - request_uri - request_proto - request_ua - request_referer - request_post_data - request_client_ip - response 返回数据 ...阅读全文

博文 2019-09-05 22:34:22 訢亮

Golang recover return defer

最近在学习golang 发现程序panic使用recover捕获,返回值被坑了。 在网上看到篇文章:https://studygolang.com/articles/4809 两个结论: 多个defer的执行顺序为“后进先出”; defer、return、返回值三者的执行逻辑应该是:return最先执行,return负责将结果写入返回值中;接着defer开始执行一些收尾工作;最后函数携带当前返回值退出...阅读全文

博文 2017-11-15 04:03:25 我爱吃葱花

Golang learning 引用类型

先完成引用类型的初始化(new ,make) 值类型初始化 int... var a = new(int) a 类型是一个int指针(*int) var b = make(int,0,10) 报错显示无法创建int 值类型无法通过make进行创建 引用类型初始化 slice,map,channel //slice var s = new([]int) new 返回的是一个类型指针,一个指向空值的指针 *s = append(*s,3) fmt.Print(*s) var s = make([]int,0,10) make 返回的是数据类型对象,可直接操作。参数依次是,type 类型,size 大 s = append(s,10) 小,IntegerType 长度 fmt.Print(s) /...阅读全文

博文 2019-05-10 19:35:11 wangyongyue

Java转型大数据开发教程,都在这儿!

技术更新迭代速度很快,我们必须时刻保持危机感!一步跟不上,步步跟不上!现在移动开发不复当前的火爆,很多朋友都考虑着转型或者是再学一门技术。这其实是一个很聪明的想法,纵向发展,拖宽自己的知识高度,未来或许就能把握更多的机遇。如此多的技术,怎么学得过来呢?首先仍然要以你自己的岗位为主,其他为辅,关于自己工作相关的技术,花更多的时间和精力,研究得更深入,其他领域的可以了解和关注,等到需要用到或者感兴趣的时候,再深入学习即可。譬如作为 Java 开发,除了 Java 还可以学什么?大数据开发之路可能是一个不错的方向。当下如何以正确姿势进军大数据开发? 首先需要三个方面,一是初学者心态,二是了解语言特性,三是学习能力,四是达到融会贯通; 零基础学员,应届生还很强的学习能力把数据结构、算法基础、操作系统...阅读全文

博文 2019-04-18 01:34:41 蓓蓓_84c5

[系列] - go-gin-api 路由中间件 - Jaeger 链路追踪(五)

概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 捕获异常,这篇文章咱们分享:路由中间件 - Jaeger 链路追踪。 啥是链路追踪? 我理解链路追踪其实是为微服务架构提供服务的,当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。 咱们先看一张图: 这张图的调用链还比较清晰,咱们想象一下,随着服务的越来越多,服务与服务之间调用关系也越来越多,可能就会发展成下图的情况。 这调用关系真的是... 看到这,我的内心是崩溃的。 那么问题来了,这种情况下怎么快速定位问题? 如何设计日志记录? 我们自己也可以设计一个链路追踪,比如当发生一个请求,咱们记录它的: 请求的唯一标识 请求了哪些服务? 请求的服务依次顺序? 请求的 Reque...阅读全文

博文 2019-09-17 00:04:19 訢亮

兄弟连区块链技术培训分享Go语言之defer的执行

互联网二十多年,已到十字路口。区块链出现前的互联网被称为古典互联网,而应用区块链技术的互联网才进入了后互联网时代。作为一项新兴的技术,区块链无疑正处于风口浪尖之上,其发展前景于普通大众而言也终将是利好。但目前由于区块链技术处于发展早期阶段,存在技术成熟度、落地应用场景有限等问题,兄弟连教育建议用户在选择专业Go语言+区块链培训机构前应进行仔细考量与辨别。golang中defer的执行大家都知道golang的defer关键字,它可以在函数返回前执行一些操作,最常用的就是打开一个资源(例如一个文件、数据库连接等)时就用defer延迟关闭改资源,以免引起内存泄漏。例如:func do() (ok bool) { file,_ := os.Open("c:\a.txt") defer file.Cl...阅读全文

博文 2018-08-27 15:35:22 兄弟连区块链培训

golang使用redis对文章进行投票

最近在学redis,本人菜鸟.代码是过程式的,没考虑优化.就是发篇文章记录一下.感觉redis还是很强大的. 规则 评分 = 支持票数*(86400/200)+时间戳, 文章获得为200票就可以在首页展示一天,随着时间的流逝,当分数小于当前时间戳的时候,就从首页撤下. 使用hash记录文章的标题,链接,作者,文章发布时间,文章得到的投票数量. 使用两个有序集合来有序的存储文章:第一个有序集合的成员为文章ID,分值为文章的发布时间;第二个有序集合的成员同样为文章ID,分值为文章的评分.通过这两个有序集合,网站既可以根据文章发布的时间来展示文章,也可以根据文章评分的高低来展示文章. 为了防止用户对同一篇文章进行多次投票,网站需要为每篇文章记录一个已投票用户名单,为此,程序将为每篇文章创建一个集合...阅读全文

博文 2018-08-07 11:35:01 键盘侠

拥有这样一份修炼指南,可以让你成为不秃头的数据工程师!

也许想要从事数据研究领域的你,一直不太清楚数据工程师和数据科学家之间的区别,甚至不少人可能觉得这就是一回事儿。如果你真的这么想,那就大错特错啦!这两种职位的差异如今正在逐步加大,如果你不能深入地了解异同之处,那未来等着你去踩的雷绝对不在少数。这篇文章,不得不读! 在这里我还是要推荐下我自己建的大数据学习交流qq裙:458345782, 裙 里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据开发相关的),包括我自己整理的一份2018最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴 数据工程师的工作技术性很强。他们负责设计和维护数据系统架构,这其中涵盖了从基础设施分析到数据仓库等众多概念。数据工程师需要对常用脚本语言...阅读全文

为什么我不会舍弃 Python 投奔 Go 语言

本文的作者:Russ Cox Russ Cox毕业于麻省理工和哈佛大学,曾在贝尔实验室参与过Plan 9 和 Unix操作系统的开发,最近在google,主要开发Go语言。 最近关于Go语言的话题很多,本月刚好是Go语言诞生3周年。这个语言在谷歌巨人的推动下最终很可能成为今后的主流语言。如果你想简单了解一下Go语言,这里有Go语言官方网站提供的一个很简单的中文版的“Go语言半小时速成教程”,不妨一看。 下面是译文内容: 最近,由于一篇“为什么我不会舍弃Python投奔Go语言(英文)”的博客,我收到了大量的邮件,这篇文章中,作者说Go语言除了“用返回值来处理异常错误”这点外,其它的都非常好。我想写出一点东西,解释一下Go语言为什么这样做,这会对大家都有用。 在Go语言中,规定的方式是,函数返...阅读全文

博文 2015-06-17 23:00:23 cometwo

ETCD探索

ETCD探索 梗概 这篇文章旨在从源码角度分析ETCD MVCC、Lease、Watch的实现,帮助我们更好的使用ETCD。 ETCD是什么? 这是ETCD官网给出的解释,ETCD是一个KV存储。现在有太多的KV存储中间件,我们为什么要选择ETCD呢?原因就是这句话:"distributed", "reliable",ETCD是一个分布式的、可靠的KV存储。相比于Redis,ETDC不够快,但足够安全,可靠。每一个中间件都有自己的特点,我选择ETCD有两个原因: ETCD是GO写的,所以GO用起来很方便。(不用ZK的原因) 扩容方便。 在讨论之前,我们先看下ETCD的目录结构 auth 访问权限 client/clientv3 GO客户端SDK contrib 里面放着raftexample...阅读全文

博文 2020-02-19 17:32:49 HammerMax

理解 Docker 中的 Volumes

理解 Docker 中的 Volumes Why 本文翻译自 Understanding Volumes in Docker,和原文作者一样,我在刚接触 Docker 的时候,对 Docker 中 Volumes 的概念也有些困惑,docker run -it -v /some/dir:/another/dir someImage:someTag 中的 -v 选项和 Dockerfile 中定义的 VOLUME 能达到相同的效果吗?看完这篇文章后才豁然开朗,所以翻译过来一方面巩固理解,另一方面分享一下。 译文 从 Docker IRC Channel (Ross:用了一下这里提到的 Docker IRC Channel,顺便看了关于 Python 和 C++ 的聊天室,原来网络上还有一群人在...阅读全文

博文 2017-02-10 13:44:09 Xiaohui Wang

头条后台研发面经(共三面)+架构师进阶路线分享

![image.png](https://static.studygolang.com/181216/d1248fff78c6b96bd28c7ced82b875ef.png) 后端研发工程师 找牛客大佬要到了白金码,跳过死亡笔试,直接视频面,面试从3点开始,断断续续到晚上8点结束。 每个面试官给我的感觉都是怎么这么高冷啊。 一面: 1 写一个题,找一个无序数组的中位数 2 写了个快排,然后让我找到无序数组第k大的一个数,我说先排序再找,实际上可以用快排的partition函数。 3 快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少,nlgn。 4 操作系统了解么,Linux和windows 5 说说Linux的磁盘管理,一脸懵逼 6 Linux有哪些进程通...阅读全文

博文 2018-12-16 20:10:36 Javaspring12

Go:指针能优化性能吗?【译】

趁着元旦休假+春节,尝试把2018年期间让我受益的一些文章、问答,翻译一下。欢迎指正、讨论,希望对你也有所帮助。原文链接:Go: Are pointers a performance optimization? 以下,开始正文 过去几周时间,我回答了许多关于使用指针优化性能的问题。似乎很多人在这方面都感到困惑。这也可以理解,指针确实是个复杂的话题。 希望这篇文章对你有所帮助。 简而言之:不是使用指针就一定代表着性能优化。 如果要彻底解释这篇文章涉及的所有细节,那篇幅可能会长到没人愿意看。所以,我精简了一下,试图用中等篇幅也能涵盖想说明的高级概念。 阅读时需要说明一点:本文讨论的是微优化,性能优化都是极其细微的。在进行微优化之前,需先进行基准测试,否则很可能看不到明显的效果。代码易读性才是第一...阅读全文

博文 2019-01-21 19:34:44 alphali

LeetCode|350. 两个数组的交集 II

题目描述 等级: 简单 给定两个数组,编写一个函数来计算它们的交集。 示例1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪种方法更优?如果 nums2 的元素存储在磁盘上,磁盘内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办? 思路 对于hash与数组的考察。 求两个数组并集,并且每个元素出现次数应与元素在...阅读全文

博文 2019-12-06 11:32:41 clawhub

[译] Go:方法接收者应该使用 T 还是 *T

文地址:dave.cheney.net/2016/03/19/… 原文作者:Dave Cheney 译文地址:github.com/watermelo/d… 译者:咔叽咔叽 译者水平有限,如有翻译或理解谬误,烦请帮忙指出 这篇文章是我几天前在 Twitter 上提出的建议的延续。 在 Go 中,对于任何类型 T 都存在类型 *T,表示获取 T 类型(T 表示你声明的类型)变量的地址。例如: type T struct { a int; b bool } var t T // t's type is T var p = &t // p's type is *T 复制代码这两种类型,T 和 *T 是不同的,*T 不能替代 T(此规则是递归的,**T 会返回 *T 地址指向的值)。 你可以在任何类...阅读全文

博文 2019-08-21 13:04:16 咔叽咔叽

Golang并发模型:select进阶

最近公司工作有点多,Golang的select进阶就这样被拖沓啦,今天坚持把时间挤一挤,把吹的牛皮补上。 前一篇文章《Golang并发模型:轻松入门select》介绍了select的作用和它的基本用法,这次介绍它的3个进阶特性。 nil的通道永远阻塞 如何跳出for-select select{}阻塞 nil的通道永远阻塞 当case上读一个通道时,如果这个通道是nil,则该case永远阻塞。这个功能有1个妙用,select通常处理的是多个通道,当某个读通道关闭了,但不想select再继续关注此case,继续处理其他case,把该通道设置为nil即可。下面是一个合并程序等待两个输入通道都关闭后才退出的例子,就使用了这个特性。 func combine(inCh1, inCh2 <-chan ...阅读全文

博文 2018-12-18 09:34:44 大彬

用golang写一个简单的游戏(三)

上篇文章中,留下了一些问题。尽管我已经添加了一个设定“炸弹”,在炸弹周围的位置是不能经过的,但是炸弹的数量还是太少,所以有些单调。我想要让游戏变得丰富些,就要增加炸弹的数量。这里就有个问题,炸弹的位置是随机的话,那就可能出现炸弹堵住了去路,造成死局,上篇文章中提到的m×n的画布上最多能有多少个炸弹这个问题不是很有意义,比如下图: max-booms.png 这种排列是最多个炸弹的情况,但它没啥用处。我们的问题应该是最少有多少个炸弹就能造成死局。最少是2颗炸弹就可以造成死局,但这种特殊情况,我们已经做了处理--不能在起点和终点的周围有炸弹。除去这种特殊情况外的其他情况,最少有几个炸弹就能造成死局,不难想到是以下的情况: min-booms.png min-booms2.png 把规律描述一下就...阅读全文

博文 2020-05-25 03:32:58 onepunchgo