go

How to cancel goroutines after certain amount of time

眉间皱痕 提交于 2021-02-04 07:28:25
问题 I am making a load testing tool that makes multiple HTTP calls in goroutines, and it works, but now I am trying to allow it to run for only a specified duration. How can I cancel the goroutines when the sleep has finished? What I am currently attempting to do is to make a goroutine that does time.Sleep() for the specified duration, and when that is finished it will broadcast a message to the channel. In my infinite loop, I listen for the message in the switch statement, and when it is there I

why struct arrays comparing has different result

让人想犯罪 __ 提交于 2021-02-04 04:56:02
问题 I don't know why the below happens, and I can't find source code relative. Can anybody explain to me? var s, ss struct{} // two empty structs arr1 := [6]*struct{}{&s} // array with empty struct pointer arr2 := [6]*struct{}{&ss} // array with empty struct pointer fmt.Println(&s == &ss, arr1 == arr2) // false, true var l, ll struct{A int}{} arr3 := [6]*struct{A int}{&l} // array with empty struct pointer arr4 := [6]*struct{A int}{&ll} // array with empty struct pointer fmt.Println(&l == &ll,

why struct arrays comparing has different result

早过忘川 提交于 2021-02-04 04:55:00
问题 I don't know why the below happens, and I can't find source code relative. Can anybody explain to me? var s, ss struct{} // two empty structs arr1 := [6]*struct{}{&s} // array with empty struct pointer arr2 := [6]*struct{}{&ss} // array with empty struct pointer fmt.Println(&s == &ss, arr1 == arr2) // false, true var l, ll struct{A int}{} arr3 := [6]*struct{A int}{&l} // array with empty struct pointer arr4 := [6]*struct{A int}{&ll} // array with empty struct pointer fmt.Println(&l == &ll,

why struct arrays comparing has different result

社会主义新天地 提交于 2021-02-04 04:54:05
问题 I don't know why the below happens, and I can't find source code relative. Can anybody explain to me? var s, ss struct{} // two empty structs arr1 := [6]*struct{}{&s} // array with empty struct pointer arr2 := [6]*struct{}{&ss} // array with empty struct pointer fmt.Println(&s == &ss, arr1 == arr2) // false, true var l, ll struct{A int}{} arr3 := [6]*struct{A int}{&l} // array with empty struct pointer arr4 := [6]*struct{A int}{&ll} // array with empty struct pointer fmt.Println(&l == &ll,

go cassandra 示例 1

拜拜、爱过 提交于 2021-02-04 02:33:39
官方示例 实际项目示例 https://my.oschina.net/u/3896587/blog/4943875 package main import ( "fmt" "github.com/gocql/gocql" "time" ) func main() { // connect to the cluster var session *gocql.Session var cluster *gocql.ClusterConfig var err error cluster = gocql.NewCluster() cluster.Keyspace = "demo11" hosts := []string{"127.0.0.1:9042"} cluster.Hosts=hosts cluster.ProtoVersion = 4 cluster.ConnectTimeout = 2 * time.Duration(time.Second) cluster.Timeout = 2 * time.Duration(time.Second) cluster.Consistency = gocql.Quorum cluster.NumConns=10 cluster.Consistency = gocql.One session, err = cluster.CreateSession

go 协程

流过昼夜 提交于 2021-02-03 19:41:30
package utils import ( "bytes" "fmt" "runtime" "strconv" ) /* 获取协程 ID*/ func GetGoroutineID () { b := make ([] byte , 64 ) b = b [: runtime . Stack ( b , false )] b = bytes . TrimPrefix ( b , [] byte ( "goroutine " )) b = b [: bytes . IndexByte ( b , ' ' )] n , _ := strconv . ParseUint ( string ( b ), 10 , 64 ) fmt . Println ( n ) } 来源: oschina 链接: https://my.oschina.net/u/3896587/blog/4943959

Go 语言这一年

♀尐吖头ヾ 提交于 2021-02-03 09:25:34
作者 | 白明 责编 | 张文 来源 | 本文转载自 TonyBai 题图 | 自视觉中国 2020,这一六十年一遇的庚子年的确“名不虚传”。 在这一年发生了很多事,而最受瞩目的事情莫过于新冠疫情的全球大流行。疫情给全球的经济带来了近似毁灭性的打击,给人们的生命带来了极大威胁,给人们的生活也带来了很大痛苦及不确定性。好在这个糟糕的 2020 年马上就要过去了!相信此时此刻每个人心中都会有一句呐喊:“2020,快滚吧!”。 然而肆虐的新冠疫情并没有阻挡住 Go 语言前进的坚实步伐。在这艰难的一年中,在 Go 核心开发团队和 Go 社区的齐心协力下,Go 同样取得了不俗的成绩,甚至在 2020 年 3 月(那时Go 1.14 版本中还一度挤进前十(而 2019 年同期,Go 仅位列 18 位): 这恰说明 Go 语言的开发与推广工作得到了更多来自全球的开发者的认可。 在这篇文章中,我们就来做一下 2020 年 Go 语言的盘点 ,看看在 2020 年围绕 Go 语言、Go 社区和 Go 生态圈都发生了哪些有影响和有意义的事情。 面对大流行,Go 核心团队给出“定心丸” 但真正的全球大流行则大致始于 2020 年 3 月。面对新冠全球大流行,Go 核心开发团队于 3 月 25 日作出反应,在官博发表文章《Go, the Go Community, and the Pandemic》

免费开源的代码审计工具 Gosec 入门使用

南笙酒味 提交于 2021-02-03 00:01:12
声明: 本教程是在自己的电脑上本地测试Gosec的效果,所以不涉及其他运行模式,如果想要了解其他模式可以关注后期文档,如果想要自定义交流自定义代码扫描规则,可以跟我交流沟通。 背景: Gosec是一个通过扫描Go AST来检查源代码是否存在安全问题的开源项目。公司到成长到一定程度,就需要对代码进行审计,针对Go的作为主要的开发语言,我就测试一下Gosec的效果。 使用教程 要求 已经配置好Go的开发环境 准备一个测试项目代码 步骤 1. 进入Go环境src目录下 执行命令: go get github.com/securego/gosec/v2/cmd/gosec 2. 直接Build 进入到gosec项目目录: cd ./gosec/ ,再执行: make 提示:make后就可以使用gosec来进行代码扫描了,并且是全局的命令 3. 扫描代码 进入你准备好的代码目录下,执行: gosec -fmt=json ./... 命令的意思是:检测当前目录下的所有的代码,并以Json的格式输出到终端。 然后查看结果,如果有漏洞的地方,会在Json的数据格式里写清楚,并写清楚危险等级。 Gosec常用命令 1. 直接输出内容到终端 gosec -fmt=json ./... 支持的格式有: text, json, yaml, csv, sonarqube, JUnit XML, html 2

谈谈Golang并发编程

半城伤御伤魂 提交于 2021-02-02 15:46:49
一、前言 Go语言在设计时,Java和C ++是编写服务器程序最常用的语言(至少在Google是这样),这是因为使用这些语言可以高效的开发。但是Go设计者们觉得像Java和C++这些语言需要开发者记忆太多的语法和规则,并且需要重复做的事情太多,这导致一些程序员开始转向更加动态,流畅的语言,如Python,但是付出的是损失开发效率和对类型安全检查的缺失。Go设计者们认为应该可以发明一种语言,这种语言集高效的开发、提供类型安全检查、简洁流畅的代码风格与一体,于是Go就诞生了。 二、GoLang并发编程 Go在语言层面提供了内置的并发支持,在Google内部运行在多核心cpu机器之上并拥有高并发流量的web服务器程序,是最典型应用。由于C++和Java在语言层面对并发的支持不是特别好,所以使用它们编写高并发程序都不是特别容易。 传统的线程模型,比如经常使用Java、C++、Python编程的时候,需要多个线程之间通过共享内存(比如在堆上创建的共享变量)来通信。这时候为保证线程安全,多线程共享的数据结构需要使用锁来保护,多线程访问共享数据结构时候需要竞争获取锁,只有获取到锁的线程才可以存取共享数据。 Go中也提供了这种低级同步原语-锁,比如互斥锁、读写锁、条件变量等,但是Go的并发原语 - goroutines和channels 提供了一种优雅而独特的结构化开发并发软件的方式

聊聊Go语言的那些事

£可爱£侵袭症+ 提交于 2021-02-02 15:46:05
写在前面 今年的秋招也算是告一段落了,大部分人在这个过程中都面临着各种各样的选择,比如地点,薪资,平台,语言,异地恋等等一系列问题,更多的人是关心未来职业生涯的发展的发展如何,在牛客网逛了很久,发现转语言这件事也是很多人担心的一点。当然我也不例外,本人是学Java出身,由于工作原因,现在面临转Go语言的情况。所以,最近一段时间我从各种渠道去了解Go的相关情况,特来和大家分享一波,让有同样困惑的同学解开心中的疑虑。 你们要的干货 拿数据说话,先看一波各大招聘网站上的数据: 智联招聘:岗位数量250+ 拉勾网:岗位数量太多了没计算 Boss直聘:岗位数量太多了没计算 从以上的三个招聘网站可以看出,Go语言在国内市场占有一定的比例,不同规模的企业都有一定的需求量,从图中也可以看出薪资方面在20K+。从秋招的情况来看,我所了解的到的,对Go语言有需求的企业有如下公司:国外有Google,Facebook,Uber等等,国内有bat,字节跳动,京东,小米,360,爱奇艺,哔哩哔哩,滴滴等等 2. 从Go语言本身的特点来看: 优势: Go 的实用程序允许您轻松下载和使用包; 静态编译使得在不同环境之间移植代码,并且可以很容易地建立开发环境; 本地异步 I/O 机制允许您可以轻松编写高性能的网络代码; 内置通道轻松实现和相对安全的数据传输; 标准库和包生态系统包含了开发人员能够需要的大多数库;