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

Golang并发模型:轻松入门select

之前的文章都提到过,Golang的并发模型都来自生活,select也不例外。举个例子:我们都知道一句话,“吃饭睡觉打豆豆”,这一句话里包含了3件事: 妈妈喊你吃饭,你去吃饭。 时间到了,要睡觉。 没事做,打豆豆。 在Golang里,select就是干这个事的:到吃饭了去吃饭,该睡觉了就睡觉,没事干就打豆豆。 结束发散,我们看下select的功能,以及它能做啥。 select功能 在多个通道上进行读或写操作,让函数可以处理多个事情,但1次只处理1个。以下特性也都必须熟记于心: 每次执行select,都会只执行其中1个case或者执行default语句。 当没有case或者default可以执行时,select则阻塞,等待直到有1个case可以执行。 当有多个case可以执行时,则随机选择1个c...阅读全文

博文 2018-12-12 13:34:41 大彬

golang积累-接口指针与结构体指针

from:https://blog.csdn.net/qq_26981997/article/details/52608081对go做过开发的朋友都很熟悉interface。这几天在网上看到了篇文章,谈到了interface与nil判等的问题。题是好题,就进一步了解了一下。原题如下:Nil接口并不是有Nil指针的接口type Cat interface { Meow()}type Tabby struct {}func (*Tabby) Meow() { fmt.Println("meow") }func GetACat() Cat { var myTabby *Tabby = nil // Oops, we forgot to set myTabby to a real value ret...阅读全文

博文 2018-06-23 12:34:41 hellomi001

简单实现hashSet -- 应用篇

简单实现hashSet -- 应用篇 写这篇文章的起因: 在使用golang和php的时候我们经常会判断一个变量是否在map或者数组中; 在php中的时候我们经常使用in_array()来判断,这里是我们经常用的。 其实用in_array()这个函数就是对数组进行遍历判断是否存在时间复杂度是log(n) 一般数组不是太大也就这样了; 但是在golang中并没有封装这个函数,这个需要我们自己去封装。 如果也是用循环的方式去判断变量是否存在,那是不是感觉很low,也就是这个原因引出了这篇文章 此篇文章GitHub地址:https://github.com/wrack0001/note/blob/master/skill/%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0ha...阅读全文

博文 2019-08-07 21:32:54 王海东_011c

Golang并发模型:轻松入门select

之前的文章都提到过,Golang的并发模型都来自生活,select也不例外。举个例子:我们都知道一句话,“吃饭睡觉打豆豆”,这一句话里包含了3件事: 妈妈喊你吃饭,你去吃饭。 时间到了,要睡觉。 没事做,打豆豆。 在Golang里,select就是干这个事的:到吃饭了去吃饭,该睡觉了就睡觉,没事干就打豆豆。 结束发散,我们看下select的功能,以及它能做啥。 select功能 在多个通道上进行读或写操作,让函数可以处理多个事情,但1次只处理1个。以下特性也都必须熟记于心: 每次执行select,都会只执行其中1个case或者执行default语句。 当没有case或者default可以执行时,select则阻塞,等待直到有1个case可以执行。 当有多个case可以执行时,则随机选择1个c...阅读全文

博文 2018-12-12 14:34:47 shitaibin

用 golang 实现区块链系列七 | 网络

介绍 到现在为止,我们已经实现了一个拥有所有关键功能的区块链了:匿名,安全,还有随机生成的地址;区块链数据存储;工作量证明系统;以可靠的方式存储交易。尽管这些功能很关键,但还是有不足。到底是什么会让这些功能真的闪耀起来呢,到底是什么使得加密货币成为可能呢 —— 是网络。如果一个这样牛逼的区块链只是在一台计算机上运行有什么卵用?当只有一个用户的时候,这些基于密码学的功能有啥好处?是网络使得这些机制可以工作起来,而且变得有用。 你可以把这些区块链的功能想象成教条,类似于那种人们想要一起生活成长就要遵守的教条。这是一种社会准则。区块链网络是一个遵循着同样准则的程序社区,正式这种遵循准则使得社区得以存活。这和真实世界很相似,当人们分享了类似的思想,他们就会更强而且可以一同创造更好的生活。如果有人遵循...阅读全文

博文 2018-11-19 20:34:49 小马哥_Magical

Golang并发模型:并发协程的优雅退出

goroutine作为Golang并发的核心,我们不仅要关注它们的创建和管理,当然还要关注如何合理的退出这些协程,不(合理)退出不然可能会造成阻塞、panic、程序行为异常、数据结果不正确等问题。这篇文章介绍,如何合理的退出goroutine,减少软件bug。 goroutine在退出方面,不像线程和进程,不能通过某种手段强制关闭它们,只能等待goroutine主动退出。但也无需为退出、关闭goroutine而烦恼,下面就介绍3种优雅退出goroutine的方法,只要采用这种最佳实践去设计,基本上就可以确保goroutine退出上不会有问题,尽情享用。 1:使用for-range退出 for-range是使用频率很高的结构,常用它来遍历数据,range能够感知channel的关闭,当chan...阅读全文

博文 2018-12-04 16:34:48 shitaibin

如何理解Golang的 “must not be copied after first use”(源码解析)

前言 阅读Golang sync包时,总会看到一句话“must not be copied after first use”,对此感到很好奇,查阅过程中发现这篇文章总结得挺到位的,因此转载,记录一下,因为我只是对于原理上面好奇,因此没有全文翻译过来,只挑选了一些自己感兴趣的地方用自己的话总结了一下,感兴趣的可以看看原文章: What does “nocopy after first use” mean in golang and how 正文 must not be copied after first use 初次使用后不能复制,sync包大多跟并发控制相关,出于安全考虑(避免指针的复制使得指针污染不安全,误操作而使程序崩溃)不能复制可以理解,但Golang是怎么样办到的呢,接下来就从源码...阅读全文

飞雪无情的博客Go语言、Android相关的十大热门文章

最近几年,写了一些博客,加起来不算多,150篇左右吧。 对于很多人来说,可能不明白我为什么写博客,写博客对于我来说,可能就像大家看电影一样,有时间就看看(写写)。对于我自己也是一些东西的总结,有时候通过写,才能加深理解。写博客还可以可以让你保持学习的心态,和读者交流,自我能力提升。 写的东西涉及各方面都有,但是以技术互联网居多,辅以管理、生活、总结等,内容有浅有深,如果你看到了,并且可以从中受益,那么这篇文章也就有了价值。 最近从这150篇中,根据阅读数,选了Golang(Go语言)、Android相关的十大热门篇文章,给大家分享。 No.10 关键词:IO Go语言实战笔记(十九)| Go Writer 和 Reader http://www.flysnow.org/2017/05/08/...阅读全文

博文 2018-10-13 08:34:39 飞雪无情

Golang并发模型:轻松入门协程池

goroutine是非常轻量的,不会暂用太多资源,基本上有多少任务,我们可以开多少goroutine去处理。但有时候,我们还是想控制一下。 比如,我们有A、B两类工作,不想把太多资源花费在B类务上,而是花在A类任务上。对于A,我们可以来1个开一个goroutine去处理,对于B,我们可以使用一个协程池,协程池里有5个线程去处理B类任务,这样B消耗的资源就不会太多。 控制使用资源并不是协程池目的,使用协程池是为了更好并发、程序鲁棒性、容错性等。废话少说,快速入门协程池才是这篇文章的目的。 协程池指的是预先分配固定数量的goroutine处理相同的任务,和线程池是类似的,不同点是协程池中处理任务的是协程,线程池中处理任务的是线程。 最简单的协程池模型 上面这个图展示了最简单的协程池的样子。先把协...阅读全文

微服务监测的五大原则

一、背景容器和微服务的出现并得到大量应用,从根本上改变了应用系统的组成和运行方式。而随着开发人员开始利用编排系统来管理和部署容器,规则进一步发生了变化。以往主机上的一个简单应用,现在已成为一个复杂的、动态编排的、多容器的体系架构,这同时也对应用的监测提出了全新的挑战。Sysdig,是专注于系统故障排查和监控工具的公司,其产品Sysdig Cloud是定位于容器系统故障排查和监控的平台。在今年召开的JFrog SwampUp用户大会上,Sysdig公司提出监测容器及构建在其上的微服务的五大关键原则。这些原则充分考虑了容器和微服务与传统架构在运维方式上的差异。本文即是根据Sysdig公司在本次大会上的演讲视频整理而成的。二、微服务是什么要正确地监测微服务,首先要正确地理解什么是微服务。​演讲首先...阅读全文

Goroutines的生命周期

文: A complete journey with Goroutines 在Golang中如果我们想并发的处理事情,我们使用Goroutines。 但是什么是并发呢? 这儿有个例子:我正在写这篇文章突然感到口渴 ,我将停止打字然后去喝水,然后我将继续开始打字。现在,我通过时间切片的方式同时处理了2件事情(打字和喝水),这就被说成是并发工作。这里需要指明的是这两件任务(写字和喝水)不是在同一时间被处理的 。如果事情是在同一时间被处理的,那么它们就被叫做并行(例如一边玩你的手机一边吃薯片)。 因此并发是同时处理多件事情(没有必要在相同的时间做...阅读全文

博文 2020-01-21 23:32:40 小秀秀better

飞雪无情的博客Go语言、Android相关的十大热门文章

最近几年,写了一些博客,加起来不算多,150篇左右吧。 对于很多人来说,可能不明白我为什么写博客,写博客对于我来说,可能就像大家看电影一样,有时间就看看(写写)。对于我自己也是一些东西的总结,有时候通过写,才能加深理解。写博客还可以可以让你保持学习的心态,和读者交流,自我能力提升。 写的东西涉及各方面都有,但是以技术互联网居多,辅以管理、生活、总结等,内容有浅有深,如果你看到了,并且可以从中受益,那么这篇文章也就有了价值。 最近从这150篇中,根据阅读数,选了Golang(Go语言)、Android相关的十大热门篇文章,给大家分享。 No.10 关键词:IO Go语言实战笔记(十九)| Go Writer 和 Reader http://www.flysnow.org/2017/05/08/...阅读全文

博文 2018-10-17 19:44:31 飞雪无情

[Golang软件推荐] Golang通用连接池

连接池在编程中并不少见,链接数据库,redis等操作都需要连接池,否则就会出现并发问题,如果每次操作都建立一条新的链接将会大大消耗资源,笔者也是在使用thrift-Clinet链接Service端使用的时候出现了并发问题,然后找到了一个通用的连接池的库在这里分享给大家. 附上: 喵了个咪的博客:w-blog.cn go-commons-pool-Github地址:github.com/jolestar/go-commons-pool 1.连接池 在使用之前我们需要先了解清楚连接池的概念,总结下来连接池主要解决以下几类问题: 减少连接创建时间 与数据库还是Thrift等程序建立连接都是有开销的。如果这类连接是“循环”使用的,使用该方式这些花销就可避免。 简化的编程模式 当使用连接池时,具体的操...阅读全文

博文 2020-02-21 14:32:47 文振熙

广度优先配合匿名函数爬取

package mainimport ( "fmt" "log" "net/http" "os" "golang.org/x/net/html")var ( str string = "https://docs.hacknode.org/gopl-zh/")//CreatFile is a func ti make infomation in filefunc CreatFile(bt []byte) { f, err := os.OpenFile("F:/MyGo/src/practice/url.txt", os.O_CREATE|os.O_APPEND, 0666) if err != nil { log.Fatal(err) } defer f.Close() res, err :=...阅读全文

博文 2018-06-27 11:34:55 哆啦在这A梦在哪

Go 面向对象式编程

『就要学习 Go 语言』系列 -- 第 25 篇分享好文 Go 语言没有对象的概念,但是 struct 类型有着和对象类似的特性。struct 类型可以定义自己的属性和方法。这篇文章我们来总结下 Go 语言中关于 “继承” 和多态的概念。 嵌入类型 嵌入类型是指将已有的类型直接声明在新的结构类型里。不像 Java、C++ 等语言,Go 语言没有继承,但是可以通过组合的方式实现代码的复用。 type User struct { Name string Email string } type Admin struct { User Level string } func (u *User) Speak() { fmt.Println("I am user",u.Name) } 复制代码上面的代码...阅读全文

博文 2019-06-12 11:04:22 Seekload

Prometheus 折腾笔记

《 Prometheus 折腾笔记 》

最近以来都很想写写关于这段时间以来折腾 Prometheus 的心得,但是人总是有惰性的,拖延是会上瘾的。 正所谓,拖更一时爽,一直拖就一直爽 ????。 有时候人的动力来源就很迷,你也说不出为什么,就是突然地他就心血来潮开写了,像这样 ????! ### 目录 * [0x01-云原生的来源](https://github.com/chenjiandongx/prometheus101/blob/master/0x01-云原生的来源.md) * [0x02-监控系统](https://github.com/chenjiandongx/prometheus101/blob/master/0x02-监控系统....阅读全文

博文 2020-02-06 12:22:48 chenjiandongx

Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)

添加编辑和保存功能 继续上篇文章【Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(一)】 如果将上篇文章的逻辑进行构建并运行,试图访问一个不存在的wiki,比如/view/APageThatDoesntExist,将看到包含HTML的空页面。这是因为它忽略了loadPage的错误返回值,并继续尝试填写没有数据的模板。相反,如果请求的页面不存在,它应该将客户端重定### 处理不存在的页面修改下viewHandler来达到我们的需求,如下 func viewHandler(w http.ResponseWriter, r *http.Request) { title := r.URL.Path[len("/view/"):] p, err := loadPage(title) ...阅读全文

博文 2018-08-08 11:34:48 DurbanZhang

基于React Context Api 和 Es6 Proxy的状态管理

近几个月的工作中,有遇到一些场景:基本不需要全局的状态管理,但页面级的,肯定需要在一些组件中共享,引入Redux这类状态管理库有点繁琐,直接通过props传递的话,写起来总觉得不是那么优雅。刚好项目中React版本比较新,就试了下Context Api,代码大致如下: // Context.js const Context = React.createContext( {} // default value ) export const Provider = Context.Provider export const Consumer = Context.Consumer // App.jsx import {Provider} from './Context' import Page fr...阅读全文

博文 2019-01-25 23:34:42 孤丶狼丶

一些不常见的Go命令参数详解

你是刚开始使用Go工具么?或者你想扩展知识?这篇文章将会描述每个人都需要知道的Go工具参数。免责声明:这篇文章可能会有些偏见。这篇文章描述了我个人会用到的Go工具参数,还有一些是我周围的人遇到的问题。如果你还有别的想法,在Twitter联系我。$ go build -x-x会列出来go build调用到的所有命令。如果你对Go的工具链好奇,或者使用了一个跨C编译器,并且想知道调用外部编译器用到的具体参数,或者怀疑链接器有bug;使用-x来查看所有调用。$ go build -x WORK=/var/folders/00/1b8h8000h01000cxqpysvccm005d21/T/go-build600909754 mkdir -p $WORK/hello/perf/_obj/ mkdi...阅读全文

博文 2018-01-06 15:57:07 erlib

[Golang软件推荐] Golang通用连接池

连接池在编程中并不少见,链接数据库,redis等操作都需要连接池,否则就会出现并发问题,如果每次操作都建立一条新的链接将会大大消耗资源,笔者也是在使用thrift-Clinet链接Service端使用的时候出现了并发问题,然后找到了一个通用的连接池的库在这里分享给大家. 附上: 喵了个咪的博客:w-blog.cn go-commons-pool-Github地址:github.com/jolestar/go-commons-pool 1.连接池 在使用之前我们需要先了解清楚连接池的概念,总结下来连接池主要解决以下几类问题: 减少连接创建时间 与数据库还是Thrift等程序建立连接都是有开销的。如果这类连接是“循环”使用的,使用该方式这些花销就可避免。 简化的编程模式 当使用连接池时,具体的操...阅读全文

博文 2020-02-21 14:32:48 文振熙

使用Go开发前端应用(三)

前言 在写这个系列第一篇文章的时候,有些朋友可能不知道wasm能够使用在什么场景,虽然在评论里面有提及,但是没有上具体的例子,这篇文章,使用一个具体的例子来示范下wasm的使用场景。这篇文章主要会讲以下几个方面的东西: md5简单介绍 使用Go计算文件md5 使用js计算文件md5 性能对比 文件秒传什么实现的? md5的简单介绍 md5 简单的说就是它是一种散列算法,在以前有很多网站或者系统,都是使用 md5 来加密的,md5 的特征是,任意长度的输入,它都可以给你生成一个128位的结果出来,而且只要输入不一样,输出的结果肯定不一样(现在据说会有hash碰撞,不过我们这里不讨论)。128位使用16进制的数字表示就是32位了。不过,在现在的系统中,应该是没有再使用md5来加密密码的了,因为 ...阅读全文

博文 2020-05-07 10:35:31 zhongzhong05

【环境篇】golang环境变量二三事(二)

继续上篇文章的学习,今天来看看其他的环境变量。 GOEXE The executable file name suffix (".exe" on Windows, "" on other systems). 编译后的二进制文件后缀,在Windows平台是".exe",在其他平台是""。 GOFLAGS 这个变量看起来比较陌生,用的不多,我们看看文档里是怎么解释的: A space-separated list of -flag=value settings to applyto go commands by default, when the given flag is known bythe current command. Each entry must be a standalone ...阅读全文

博文 2020-01-17 11:33:44 wx5e1abbbb0a5e5

如何0成本在github上构建CI

image 现代软件的研发流程基本上均会配备一定程度的CI/CD(这篇文章解释了为何需要在企业里实施CI/CD),整个流程主要分为CI和CD部分,这篇文章将围绕CI部分展开,并通过一个具体的例子解释如何0成本在github上构建CI。构建CI的最佳实践离不开Trunk Based Development的分支策略,感兴趣的读者可以通过这篇文章来了解什么是Trunk Based Development。在github上构建CI有2个好处:无需任何费用和有大量可以用于构建CI的模块,借助这2个好处,小规模团队可以快速地搭建还不错的CI流程。接下来,让我们结合一个使用Go编写的Hello World例子以及基于Trunk-Based Development模式来构建这个CI流程。 这篇文章将分为以...阅读全文

博文 2020-06-06 11:32:44 云端漫步_2cloudlab

leetcode_725

Golang: 思路:这题是分配糖果的进阶篇,分配链表,这题为了实现简单,没那么在乎空间复杂度,因此最终结果空间复杂度效率较低,也算是在预期之内。 代码如下: func splitListToParts(root *ListNode, k int) []*ListNode { node1:=root var nodes []*ListNode for node1!=nil{ nodes=append(nodes,node1) node1=node1.Next } if len(nodes)阅读全文

博文 2020-04-07 15:32:48 淳属虚构