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

Go的可比性

package main import "fmt" type Album struct { music []string } func main() { a1 := Album{music: []string{"music", "music2"}} a2 := Album{music: []string{"music", "music2"}} fmt.Println(a1 == a2) } 上面这段程序无法编译,报错: invalid operation: a1 == a2 (struct containing []string cannot be compared) 是因为结构体内的切片不具有比较性。 切片类型、字典类型、函数类型的值是不具有可比性的...阅读全文

博文 2015-01-24 17:00:11 itfanr

raft简单介绍

一致性算法 - Raft Raft 状态 一个 Raft 集群包含若干个服务器节点;通常是 5 个,这允许整个系统容忍 2 个节点的失效,每个节点处于以下三种状态之一: follower(跟随者) :所有结点都以 follower 的状态开始。如果没收到 leader消息则会变成 candidate状态。 candidate(候选人):会向其他结点“拉选票”,如果得到大部分的票则成为leader。这个过程就叫做Leader选举(Leader Election)。 leader(领导者):所有对系统的修改都会先经过leader。 Raft 一致性算法 Raft通过选出一个leader来简化日志副本的管理,例如,日志项(log entry)只允许从leader流向follower。 基于lead...阅读全文

博文 2018-08-06 11:34:53 kakushao

基于time的ticker封装的定时器

本人最近新学GO,为了能够深入了解GO,于是计划使用GO实现一个高并发、IO密集操作的ETL程序。闲话不多说,今天完成了ETL中最基本的要素,定时器。首先了解到GO中的time.Ticker不适用到高精度的定时器,因为ETL任务周期设定是1分钟,故此处无需高精度的定时器(对于高精度的定时器,在网上看到有人使用时间轮实现timewheel,我也看了实现,并且也按其思路实现了一版,此处略去)。封闭的类型:TimeTicker,使用示例代码如下:func main() { var tt *timeticker.TimeTicker = timeticker.New(3*time.Second) //创建一个3秒钟执行一次任务的定时器 e := tt.AddJob(job, true) //向此定时...阅读全文

博文 2018-04-11 22:36:24 duy_2018

go指南:映射练习

题目 题目地址https://tour.go-zh.org/moretypes/23 练习:映射 实现 WordCount。它应当返回一个映射,其中包含字符串 s 中每个“单词”的个数。函数 wc.Test 会对此函数执行一系列测试用例,并输出成功还是失败。 你会发现 strings.Fields 很有帮助。 答案 package main import ( "golang.org/x/tour/wc" "strings" ) func WordCount(s string) map[string]int { sFields := strings.Fields(s) var resMap = map[string]int{} for _,v := range sFields{ resMap[...阅读全文

自己业余时间学习GO语言,参考网上文章,利用layUI+Go+MySQL写了个小网站(博客+后台管理+即将开始的进销存系统)

#### 自己业余时间学习GO语言,参考网上文章,利用layUI+Go+MySQL写了个小网站(博客+后台管理+即将开始的进销存系统),欢迎大家提意见,多交流,有能一起开发进销存的最好了 ### [我的测试网站 http://www.haowd.top](http://www.haowd.top "我的测试网站") ### 第一次用WEB方面的程序,见笑了,大家多指导。 #### 部分代码示例: **控制器:** ``` package controllers import ( "strings" "github.com/astaxie/beego" "github.com/lwx3i/ydd/models" "github.com/lwx3i/ydd/util" ) // NextPrep...阅读全文

golang 时间和日期

//当前时间 t := time.Now() fmt.Println(t.Format("2006-01-02 15:04:05")) fmt.Println(t.Year(), int(t.Local().Month()), t.Day()) //时间戳10位 秒 fmt.Println(time.Now().Unix()) //时间戳13位 毫秒 fmt.Println(time.Now().UnixNano() / 1e6) //时间戳转时间 sec := time.Now().Unix() fmt.Println(time.Unix(sec, 0).Format("2006-01-02 15:04:05")) //时间转时间戳 fmt.Println(time.Date(2020, ...阅读全文

博文 2020-05-31 09:32:47 对方正在输入_5723

没想到总结也挺费时间的

这个防盗链真是烦,图片要自己一个一个上传。 时间没把握好,睡得多了点,玩的多了点,明天两篇阅读。 四月份的计划:计划尽量固定时间段 1.上午三番茄,中午13:00睡一会,下午四个番茄【主java,基础知识;副golang的区块链】 2.背单词都在傍晚,和15分钟的听力,一篇阅读连在一起 3.半小时阅读 4.晚上,听力精听课 额外:要多翻看单词本,可以看看笔记,整理下逻辑结构,补充相应的复习视频 多出来的边角时间,可以刷b站,看视频。 要知道人家有的自学的,一天学10小时,光是时间,一天就顶我好几天,以后,学习量是会慢慢增加的...阅读全文

博文 2020-03-31 23:32:46 div密码错误div

Golang 时间格式化的奇怪设定 —— 为什么你一直出错

首发于:http://blog.shajiquan.com/2015/12/golang-time-format/ 今天有人在群里问: 问一个时间格式化问题: fmt.Println(time.Now().Format("2006year 01month 02day")) 2015year 12month 18day fmt.Println(time.Now().Format("2015year 01month 01day")) 181253year 12month 12day 为什么? 困扰好久 首先,这是一个很奇葩的问题。 其次,我,以及比我对 Golang 更了解的朋友,都掉过这个坑。我们曾在这个问题上,花了很多时间,最后发现是 Golang 自己的奇怪设定导致。尤其是,一段时间不用 ...阅读全文

博文 2017-02-09 08:10:28 shajiquan

[译] 手把手教你 Go 程序的国际化和本土化

文:《A Step-by-Step Guide to Go Internationalization (i18n) & Localization (l10n)》 译者按:原文写得超详细,让我学习了 Go 中未曾使用到的但很有用的 i18n 知识,因而有了翻译文章的想法。 在征得原文作者同意的前提下,我开始了翻译工作。为了适应中文读者,我修改了原文中部分示例代码,还将 其中的希腊文,替换成了简体中文。 概述 Go 是静态编译的编程语言,最近很受欢迎,因为它简单、性能好而且非常适合开发云端应用。它有强大的能够 处理国际化(i18n)和本地化(l10n)的库,比如处理字符编码、文本转换还有特定地区的文本,但这个包的 文档写得不够好。让我们来看看该怎么使用这个库,并且让我们的 Go 程序能适应不同...阅读全文

博文 2018-07-02 16:29:03 zyfdegh

go版本Excel导入脚本

一直挺想用 go 的,但是没想到能干啥,前段时间正好有个任务导入 Excel 到后台数据库,用 Python 的话我可能分分钟就写好了,但是作死的我就想试下 go,因为 go 可以打包成可执行程序包,然后就可以不依赖 go 的环境。 直接编码 使用 flag 获取终端参数解析 path := flag.String("path", "", "excel 路径") url := flag.String("url", "**", "服务器地址") flag.Parse() 这里定义了 path 路径和服务器地址 url,唯一需要注意的是,这里变量返回都是指针。flag 有个好处,他的参数都是形如(defaultValue,$description),所以在执行 -h 的时候,都会返回 key 以...阅读全文

博文 2018-12-16 23:34:43 追风骚年

golang:使用timingwheel进行大量ticker的优化

Ticker 最近的项目用go实现的服务器需要挂载大量的socket连接。如何判断连接是否还存活就是我们需要考虑的一个问题了。 通常情况下面,socket如果被客户端正常close,服务器是能检测到的,但是如果客户端突然拔掉网线,或者是断电,那么socket的状态在服务器看来可能仍然是established。而实际上该socket已经不可用了。 为了判断连接是否可用,通常我们会用timer机制来定时检测,在go里面,这非常容易实现,如下: ticker := time.NewTicker(60 * time.Second) for { select { case <-ticker.C: if err := ping(); err != nil { close() } } } 上面我们使用一个...阅读全文

博文 2014-10-04 19:27:06 siddontang

Go Commons Pool 1.0 发布

Go commons pool是一个通用的go语言对象池,基于Java版本的Apache Commons Pool改写。Go commons pool实现了Java版本的主要功能,改写了大多数Java版本的测试用例,测试覆盖率达到90%,性能测试结果和Java版本的相近,已经可以用于生产环境,于是发布1.0版本。 Go commons pool保留了Java版本的主要功能,包括: 自定义的 PooledObjectFactory. 丰富的设置选项,可以精确控制对象的生命周期。详细参看ObjectPoolConfig。 对象池是否是 LIFO (后进先出) 或者是 FIFO (先进先出) 对象池的容量控制 对象池对象的验证配置 获取对象时是否阻塞以及最大等待时间配置 对象池对象的回收机制配置(...阅读全文

go语言使用体会

初步看了下GO语言的基本语法,只是看不写代码很快就看了后面就忘了前面了,所以还是要实战,但是只是写几个题目感觉有点浪费时间,突然间想到一直想着做算法题来着,所以这次就是用GO来实现算法题吧,一方面可以加深是用GO的语法,一方面也提高自己的算法水平,一箭双雕。 ---------------------------------------- 变量 ---------------------------------------- 1) 如果一个变量没有被用到,GO的编译会报错,而不是像JAVA这样报警。所以如果是遍历数组时使用range,不使用下标值时就使用_代替: for _, r := range result { --------------------------------------...阅读全文

博文 2015-10-27 16:00:06 mickelfeng

子串查找算法-Rabin-Karp

好久没学习东西了, 前段时间有点过于放纵, 天天打游戏, 现在需要写点东西来减轻罪恶感. 对Rabin-Karp早有耳闻, 它可以在Golang官方库中找到, 当初粗略看了下觉得有点复杂就没仔细研究, 现在就看看它吧. 什么是Rabin-Karp算法 Rabin-Karp算法用来解决一个"简单"的问题: 在一个字符串中定位子串的位置. 同样的算法还有: KMP, BM. 关于他两可以再看看这位老哥写的文章:白话分析字符串匹配算法——KMP算法 乍一看这个问题一个for循环就能搞定, 但Rabin-Karp这个神奇的算法能让问题解决得更高效 有趣. 在了解Rabin-Karp之前,我们需要了解for暴力算法的缺点。 暴力算法的缺点 首先从头部开始匹配,如果没匹配到则向后移动一步再次匹配,如此循...阅读全文

博文 2018-11-13 00:34:39 bysir

golang 使用beego框架安装bee 报错

不使用框架开发项目简直是浪费时间,好的轮子应该拿来就用,今天在安装国人开源的golang框架beego时,在安装bee工具时报错/usr/local/go/pkg/tool/darwin_amd64/link: combining dwarf failed: Unknown load command 0x32 (50),编译错误, 查了好久原来是版本问题,我的版本是1.92,降级到1.11.5解决问题,不知道beego为什么版本高了反而不支持了,,这让我对这个框架的靠谱程度产生了怀疑,而且这个bug的issue起码半年前就有了也没被修复。。。。...阅读全文

博文 2019-02-10 21:34:43 臣以君纲

H5响应式自助建站系统让快速建站成为触手可及

随着智能互联网的飞速发展,智能手机的普及,让网民用户对移动端的时候越来越多,浏览网页、查询资料手机浏览新闻、搜索资源、查找销售渠道、网购、订餐等等成为了一种新的生活方式。为了解决移动设备屏幕不同大小的问题,让网站适应每种设备的屏幕大小,所以响应式网站就这样出现了。 ![00.png](https://static.studygolang.com/180505/5cd545e6b099c4c71dfc4e6fab815813.png) 那么响应式网站怎么做?对于一般企业建站来说,他们会直接外包给建站公司或者团队进行网站开发搭建,而企业网站就如同互联网上的一张名片,定制化网站少则几千,多则上万,很多定制网站只是把界面稍加改动,实力强一点的企业可能稍好一些,其实目前企业想要建设...阅读全文

学习Golang语言(1): Hello World

今天开始进入golang语言的学习,golang语言的安装和测试就不再这里讲解了。网络上有不少资料可以参考。 学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Golang语言(5):类型--数组 学习任何编程语言的第一个程序都是Hello world,我就不打破这个传统了。看看Go的"Hello World"吧。 package main import "fmt" //引入fmt库 func main() { fmt.Println("Hello World!") } 逐行分析这段程序: 第一行是必须的。所有Go语言编写的文件都以package <*...阅读全文

博文 2014-10-09 16:00:03 codemanship

2019的到来Java程序员如何不被淘汰,互联网最新的技术了解足够?

程序员是一个高薪的行业,也是一个门槛比较高的职业,能进入这行是好多人的愿望,近几年来这行的人也是越来越多,每年都在持续增长,那么怎么才能保持持久的竞争力而不被淘汰了,除了一些精神品质上下功夫外,如耐心,勤奋,能吃苦之外,再加一些学习的技巧是十分有必要的。下面我就从以下几方面来说起。​不断的巩固基础首先技术是一个熟练工种,没有不断的实践,不断的巩固基本功很难在这方面出人头地的,做为一名程序员,要想优秀,比需有一定代码量的积累才是可以的,如果平时有项目,就积极的参与项目,增加自己的实战机会,项目不紧的时候,可以看一些书籍,敲一些各种形式的代码,争取自己的代码量远远高于其他人,这样在基本功上时间久了,你就会高于其他人,这是硬功夫,其他人就很难超越,要想超越,就要花同等时间去超越,这样你和其他人之间...阅读全文

博文 2019-01-14 18:58:14 javaJGJL

自定义打印日志函数

package main import ( "fmt" "runtime" "strings" ) func main() { myTest() } func myTest() { str := "hello , i am error" myLog(str) } func myLog(str string) { //func Caller(skip int) (pc uintptr, file string, line int, ok bool) pc, file, line, ok := runtime.Caller(1) names := strings.Split(file, "/") if ok { fun := runtime.FuncForPC(pc) fmt.Println("...阅读全文

博文 2017-03-31 08:29:11 shamibiji

阿里云专有网络VPC使用教

课程介绍 专有网络VPC可以帮助您基于阿里云构建出一个隔离的网络环境,并可以自定义IP 地址范围、网段、路由表和网关等;此外,也可以通过专线/VPN/GRE等连接方式实现云上VPC与传统IDC的互联,构建混合云业务。 产品详情:https://www.aliyun.com/product/vpc 课时列表 • 课时1:专有网络介绍 • 课时2:创建专有网络 • 课时3:创建交换机 • 课时4:在交换机中创建云产品实例 • 课时5:添加自定义路由 开始学习:http://click.aliyun.com/m/27843/ ...阅读全文

唯一ID生成器-发号器实践-企业实例--内存buffer方式

缓存模式 基于内存buffer的发号器架构如图,这也是目前我在维护的发号器之一 优点:1.水平扩展方便2.对高并发支持良好3.数据库依赖较低,只在buffer耗尽时需请求数据库,连接失败情况下仍可实现较长时间发号4.该服务目前支持step发号返回的id格式符合 id=startID+idStep*n5.该服务支持一次获取多号,性能与单个发号相近缺点:1.集群情况下,发号为趋势递增而非严格递增(趋势递增指ID整体上是增加且唯一的,但不是严格两次发号都差1,比如两台服务器A持有1001-2000 B持有2001-3000 两次发号请求分别到了AB两个机器,得到1001 和2001)2.重启服务后未用完的号段作废 实现: 服务以worker方式工作,一个serviceID对应一个worker,以服...阅读全文

博文 2020-04-16 17:33:01 Charles_Wong

golang中的switch

func main(){ arr := []interface{}{true,int16(1),uint8(2),"a",uint16(3),4,int8(5),"c",1.1} for _,v := range arr { fmt.Print(v) fmt.Print(" print type ") switch v.(type){ case bool: fmt.Println("bool") continue case string: fmt.Println("string") break case uint8: case uint16: fmt.Println("uint") case int,int8,int16: fmt.Println("int") default: fmt.Pr...阅读全文

博文 2019-02-15 14:26:01 yanglikai

Go1.5 zip 压缩目录修正时间

package zip import ( "archive/zip" "io" "os" "path/filepath" "time" ) const zone int64 = +8 func Zip(source, target string) error { zipfile, err := os.Create(target) if err != nil { return err } defer zipfile.Close() archive := zip.NewWriter(zipfile) defer archive.Close() return filepath.Walk(source, func(path string, info os.FileInfo, err error) e...阅读全文

博文 2016-03-07 18:00:01 fyxichen

golang时间处理

golang 时间处理 package main import ( "fmt" "time" ) const ( date = "2006-01-02" shortdate = "06-01-02" times = "15:04:02" shorttime = "15:04" datetime = "2006-01-02 15:04:02" newdatetime = "2006/01/02 15~04~02" newtime = "15~04~02" ) func main() { thisdate := "2014-03-17 14:55:06" timeformatdate, _ := time.Parse(datetime, thisdate) fmt.Println(timefor...阅读全文

博文 2014-10-04 19:26:45 别人说我名字很长

go学习笔记 利用chan嵌套chan 实现函数异步执行 顺序返回值

遇到的问题 异步对于绝大多数的开发而言并不陌生,在go语言中异步的实现变得异常方便。只要在执行的方法前加一个go关键字就可以实现异步操作。但是如果需求是,按照调用的先后顺序(FIFO)来返回值我们应该怎么办。大家都知道,一系列的方法调用如果使用了异步执行那么就并不能保证返回的先后顺序,返回的先后顺序取决于每个函数耗时的长短,耗时短的则会先返回。当然解决这个问题的办法有很多,在最近看的一本书中发现了chan嵌套chan可以很巧妙的实现这个需求。 没解决之前 先看一下没有使用嵌套chan的情况。代码很简单,方法operation1 内部sleep 1秒 方法operation2 内部sleep 2秒。5次调用都在goroutine中执行,结果可以看到 5个方法大约耗时2秒。 package ma...阅读全文

博文 2019-03-12 17:34:41 大二小的宝

Golang Time包的方法解析

基础使用 //获取秒级时间戳 time.Now().Unix() //获取毫秒级时间戳 time.Now().UnixNano()/1e6 //格式化时间 time.Now().Format("2006-01-02 15:04") //字符串转时间格式 t, err := time.Parse("2006-01-02 15:04:05", "2019-05-20 18:30:50") //时间戳转为字符串 t := time.Unix("1558348250", 0).Format("2006-01-02 15:04") 设置时区(中国) //在windows系统上,没有安装go语言环境的情况下,time.LoadLocation会加载失败。 var sh, _ = time.LoadLoc...阅读全文

博文 2020-01-04 09:32:40 howie_矜暮

集群管理和容器编排工具 SwarmKit

SwarmKit 是Docker公司开源的Docker集群管理和容器编排工具,其主要功能包括节点发现、基于[raft算法](https://en.wikipedia.org/wiki/Raft_%28computer_science%29)的一致性和任务调度等。 ### 基本概念 服务器上运行SwarmKit工具的swarmd命令后,即可将其加入到服务器集群中,该服务器就成为集群中的一个 节点 。SwarmKit将节点分为两类: * 工作节点 负责通过执行器运行任务。SwarmKit的默认执行器为Docker容器执行器(Docker Container Executor); * 管理节点 负责接收和响应用户的请求,将集群状态调节成最终状态。 用户可以动态调整节点的角色。 ...阅读全文

第6课 Go函数func&defer

Go语言函数的基本用法! package main import ( "fmt" ) /* 函数function -Go函数不支持嵌套、重载、默认参数 -但支持以下特性: 无序声明原型,不定长度变参,多返回值,命名返回值参数 匿名函数,闭包 -定义函数使用关键字func,且左大括号不能另起一行 -函数也可以作为一种类型使用 */ func A(a int, b string, c int) int { //代表参数有三个,返回值是一个int型 return 1 } func B(a, b, c int) { //参数也可以这样写 } func C() (a, b, c int) { a = 1 b = 1 c = 1 //代表返回值a,b,c,注意在此处abc已经是局部变量 return /...阅读全文

博文 2016-08-16 20:00:00 lhdalhd1996

Hyperledger-Fabric源码分析(开篇)

一直想将前段时间研究fabric1.0源码的一些心得体会分享出来,一是在写的过程中自己可以加深理解,二是有些地方代码是看过了,但是总感觉看得不到位,没到火候。 看过1.0的同学应该知道,shim与cc与peer之间千丝万缕的关系,剪不断理还乱。写了这么多年的Java,确实觉得Golang代码别扭,而且goroutine+channel的组合简直是阅读者大杀器。但是Golang的好处显而易见,如果fabric用Java实现,一倍的代码量都不止,而且性能差很多。扯远了,总之习惯成自然。 鉴于fabric已经出到1.4了,更新不可谓不快,改动不可谓不大,再来讲解1.0的实现估计大家都没什么兴趣,我就基于新版做一个系列吧,希望能坚持下来。请大家监督...阅读全文

博文 2019-03-05 22:34:51 Pillar_Zhong

golang的闭包和普通函数调用区别

先看一段程序 package main import ( "fmt" ) func main() { a := []int{1, 2, 3} for _, i := range a { fmt.Println(i) defer p(i) } } func p(i int) { fmt.Println(i) } 运行这段程序,输出结果为 1 2 3 3 2 1 这里就是普通的函数调用,每次调用func p时,完成 i 的值复制,然后打印,此时 i 值复制了3次,分别是1,2,3。由于defer是后进先出,所以执行变成3,2,1 下面我我们用闭包改写下程序: package main import ( "fmt" ) func main() { a := []int{1, 2, 3} for _...阅读全文

小口啃 Golang - 返回的 nil 不为 nil 的疑惑

前段时间在写代码的时候,遇到一个奇怪的问题,即返回的 nil 值,不为 nil。 导致这个问题的原因是对 Go 中的 nil 理解不全面导致的,直接上测试代码如下: package main import ( "fmt" ) // 定义我们自己的 Error 类型 type NilErr struct { Code int Msg string } // 实现 error 接口的 Error 方法 func (e *NilErr) Error() string { return fmt.Sprintf("Code:%d, Msg:%s", e.Code, e.Msg) } func returnNil() *NilErr { return nil } func main() { fmt.Pr...阅读全文

博文 2017-08-05 04:05:09 笑然一生

golang编程进阶技巧

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

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

老虞学GoLang笔记-控制语句

Go中的控制语句较精简,仅有if、for、select和switch。但使用时均比较灵活 if 在Go中条件语句*if*中如果条件部分的计算结果为**true**时将执行语句块,否则则执行else语句块(如果存在else时),此逻辑和其他语言中的if一样,但是在Go中还是有一些不同之处。 if条件表达式不能使用花括号**()**包含 if语句代码段必须使用**{}**,并且左括号必须和if在同一行 if条件表达式的前面可以包含初始化语句,支持平行赋值,但不支持多个赋值语句 赋值+条件判断 if a, b := 21, 3; a > b { fmt.Println("a>b ? true") } 在if条件表达式前面声明的的变量只能在if-else语句块中使用。 if a, b := 21, ...阅读全文

博文 2015-07-21 15:00:03 Gopher老虞

学习Golang语言(1)

想了很久准备学习一门新的语言,纠结了很久,最后选择了go语言。今天开始进入go语言的学习。 1、下载go http://www.golangtc.com/download 2、下载liteide http://www.golangtc.com/download/liteide 3、开始编程 学习任何编程语言的第一个程序都是Hello world。在GOPATH目录下建立hello.go文件,输入下面内容。 package main import "fmt" //引入fmt库 func main() { fmt.Println("Hello World!") } 逐行分析这段程序: 第一行是必须的。所有go语言编写的文件都以package <*>开头,对于独立运行的执行文件必须是 packag...阅读全文

博文 2015-06-17 23:08:17 lz0426001

VPN网关最佳实践系列(一)如何让VPC之间互通

摘要: 话题引入 VPN网关是阿里云新推出的一项网络服务,可以帮助你的企业轻松构建安全、稳定、高可用的网络互联方案。相比传统VPN软件和自建VPN,阿里云VPN网关部署方便,即开即用,售后支持专业。 今天,我们来谈一谈如何如何部署和配置VPN网关,使两个VPC之间能够私网互通,把你的云上网络连接起来。 话题引入 VPN网关是阿里云新推出的一项网络服务,可以帮助你的企业轻松构建安全、稳定、高可用的网络互联方案。相比传统VPN软件和自建VPN,阿里云VPN网关部署方便,即开即用,售后支持专业。 今天,我们来谈一谈如何如何部署和配置VPN网关,使两个VPC之间能够私网互通,把你的云上网络连接起来。 VPN部署 提示:VPN网关是基于Internet建立加密隧道进行通信,通信质...阅读全文

通过不到100行Go代码打造你自己的容器

Docker在2013年三月实现了开源发布,它的出现让软件开发行业对于现代化应用的打包以及部署方式发生了巨大的变化。紧随着Docker的发布,各种具有竞争性、致敬性以及支持性的容器技术纷纷涌现,为这一领域带来了极大的关注度,同时也引起了人们的反思。这一系列文章将解答读者的各种困惑,对如何在企业中实际使用容器进行分析。 这一系列文章首先将对容器背后的核心技术进行观察,了解开发者目前如何使用容器,随后将分析在企业中部署容器的核心挑战,例如如何将容器技术与持续集成和持续交付管道进行集成,并对监控方式进行改进,以支持不断变化的负载,以及使用短期容器的潜在需求。本系列文章的总结部分将对容器技术的未来进行分析,并探讨无核化技术(unikernels)目前在处于技术前沿的组织中所扮演的角色。 本文是本系列...阅读全文

博文 2016-08-23 05:00:02 justdoithai

老虞学GoLang笔记-控制语句

Go中的控制语句较精简,仅有if、for、select和switch。但使用时均比较灵活 if 在Go中条件语句*if*中如果条件部分的计算结果为**true**时将执行语句块,否则则执行else语句块(如果存在else时),此逻辑和其他语言中的if一样,但是在Go中还是有一些不同之处。 if条件表达式不能使用花括号**()**包含 if语句代码段必须使用**{}**,并且左括号必须和if在同一行 if条件表达式的前面可以包含初始化语句,支持平行赋值,但不支持多个赋值语句 赋值+条件判断 if a, b := 21, 3; a > b { fmt.Println("a>b ? true") } 在if条件表达式前面声明的的变量只能在if-else语句块中使用。 if a, b := 21, ...阅读全文

博文 2015-07-21 15:00:02 Gopher老虞

golang 使用时间通过md5生成token

package main import ( "crypto/md5" "fmt" "io" "strconv" "time" ) func main() { crutime := time.Now().Unix() fmt.Println("crutime-->", crutime) h := md5.New() fmt.Println("h-->", h) fmt.Println("strconv.FormatInt(crutime, 10)-->", strconv.FormatInt(crutime, 10)) io.WriteString(h, strconv.FormatInt(crutime, 10)) fmt.Println("h-->", h) token := fmt.Sp...阅读全文

博文 2017-03-02 12:01:07 徐学良

从nsq中学习如何优雅的退出go 网络程序

退出运行中的程序,可以粗暴的kill -9 $PID,但这样会破坏业务的完整性,有可能一个正在在执行的逻辑半途而费,从而产生不正常的垃圾数据。 本文总结在go语言中,如何能优雅的退出网络应用,涉及的知识包括:signal,channel,WaitGroup等。 从这里:https://gobyexample.com/channel-synchronization 可以简单了解到,在go中如何使用channel实现goroutines同步。 在nsq中,也使用了相同的机制,不过封装更复杂了些。我们以nsqadmin中的实现为例进行简单的分析。 代码段1(来自:https://github.com/bitly/nsq/blob/master/nsqadmin/main.go): 1 2 3 4 ...阅读全文

博文 2016-09-17 01:00:06 kc87654321

一致性哈希算法与高可用集群代理

一致性哈希算法与高可用集群代理 2017年11月30日 假定N为后台服务节点数,当前台携带关键字key发起请求时,我们通常将key进行hash后采用模运算(hash(key)%N)来将请求分发到不同的节点上。 对前台请求于后台无状态服务节点不敏感的场景而言,只要请求key具有一定的随机性,哪怕节点动态增删,该算法于后台而言已可以达到很好的负载均衡效果。 但对于分布式缓存,或者分布式数据库等场景而言,上述方式就不合适了。因后台节点的增删会引起几乎所有key的重新映射。这样,于分布式缓存而言,均发生cache miss;于分布式数据库而言发生数据错乱,其影响是灾难性的。 而一致性哈希算法的目标是,当K个请求key发起请求时。后台增减节点,只会引起K/N的key发生重新映射。即一致性哈希算法,在后...阅读全文

博文 2019-06-20 11:27:49 Larry

Go语言学习-time包

go语言的time包 组成 time.Duration(时长,耗时) time.Time(时间点) time.C(放时间点的管道)[ Time.C:=make(chan time.Time) ] time包里有2个东西,一个是时间点,另一个是时长 时间点的意思就是“某一刻”,比如 2000年1月1日1点1分1秒 那一刻(后台记录的是unix时间,从1970年开始计算) 时长就是某一刻与另一刻的差,也就是耗时 函数 Sleep函数 time.Sleep(time.Duration) 表示睡多少时间,睡觉时,是阻塞状态 fmt.Println("start sleeping...") time.Sleep(time.Second) fmt.Println("end sleep.") //【结果】...阅读全文

博文 2016-10-11 03:00:10 tree2013

正统闭包:不能有状态,只有常量和函数 函数只有一个参数.

package main import "fmt" func adder() func(int) int{ //sum的值可以改变 sum:=0 return func(v int) int { sum+=v return sum } } //正统函数式 type adder1 func(int) (int,adder1) func adder2(base int) adder1{ return func(v int) (int, adder1){ return base+v, adder2(base+v) } } func main() { a:=adder() for i:=0;i<10;i++{ fmt.Println(a(i)) } b:=adder2(0) for j:=0;j<1...阅读全文

博文 2018-08-29 23:00:27 zhangyangbest

golang 读取SQL时间与数据库差1秒,求解?????

请教一个问题,SQLSERVER中时间和GOLANG查的时间差1秒,如何处理。。。 ![TIM图片20180506121557.png](https://static.studygolang.com/180506/b29f1a7c42a314151bac1ee60888b3c2.png) ![TIM图片20180506121604.png](https://static.studygolang.com/180506/94004957331736431b7121ee676cc33b.png) 语句如下 srcData, _ := app.PLADB.DB.Query("SELECT top 1 StartTime FROM HN_NCMS.dbo.History WHERE ID...阅读全文

以Go的map是否并发安全为例,介绍最权威的Go语言资料的使用方法

公众号原文地址:https://mp.weixin.qq.com/s/KmT-Mu4YQDeaQY_95waj-Q 本篇目录 本篇目录 说明 正确使用正确的资料 最权威的 Go 语言资料是? Go 语言的 map 是否是并发安全的? 扩大搜索范围 找到答案不等于结束 为什么要执着于一手资料? 参考 说明 相比于细节,更在意知识框架的构建和完善,因此有时候对一些技术细节不是很清楚,只是知道如何找答案。最近要认真编码,需要仔细考虑、敲定细节,趁此机会将 Go 语言的知识整理一下。 正确使用正确的资料 找到正确的资料、能够正确的使用、正确的理解,是最关键的一步。除非是初学者,否则不要使用二手、三手和倒了无数手的资料,长期来看使用非一手资料,就是在浪费时间和引入错误。第一手的资料常常晦涩难懂,需要经...阅读全文

博文 2019-07-12 23:32:41 李佶澳

MySQL基本操作

golang调用MySQL数据库:使用MySQL数据库 go语言中文网 Golang Mysql笔记(二)--- CURD基础 操作 语句 创建数据库 create database dbname; 删除数据库 drop database dbname; 选择数据库 use dbname; 创建数据表 create table table_name(column_name column_type); 删除数据表 drop table table_name; 删除表全部数据,保留表结构 truncate table table_name; 删除带条件的删除,表结构不变 delete from table_name where xxx(条件); 插入数据 insert into table_na...阅读全文

博文 2018-11-04 12:34:45 喵喵小阳

手绘raft算法

在现实的分布式系统中,不能可能保证集群中的每一台机器都是100%可用可靠的,集群中的任何机器都可能发生宕机、网络连接等问题导致集群中的某个节点不可用,这样,那个节点的数据就有可能和集群不一致,所以需要有一种机制,来保证在大多数机器都存在的情况下向外提供可靠的数据服务。这里的大多数节点指的是集群半数以上的节点。 raft算法就是一种在分布式系统中解决集群中多节点之间数据一致性的算法。Golang生态圈中大名鼎鼎的etcd就是使用的raft算法来保持数据一致性的,与raft类似的一致性算法还有Paxos算法、Zab协议等。 其实,raft算法维持数据一致性的核心思想很简单,就是:“少数服从多数”。 leader选举 保证数据一致性,最好的方式就是只有唯一的一个节点,唯一的这个节点读,唯一的这个节...阅读全文

golang切片

数组的长度在定义后无法再次修改,数组是值类型,每次传递都会产生一份副本,显然这种数据结构无法满足正式开发的需求,为此golang提供了数组切片 数组切片就像是一个指向数组的指针,数组切片有自己的数据结构,而不仅是一个指针。 切片的定义 切片可以通过make()创建 格式 make([]type , 长度 ,容量),如: a := make([]int, 10, 10) 上面演示了创建一个类型为int,长度为10的切片 slice是可变长的,长度表示的是数组的出始长度,容量表示slice可以容纳的元素容量,容量未设置时,默认容量等于数组长度,slice的长度和容量分别可以使用 len() 与 cap() 获得 slice也可以使用数组来生成 格式 array[start:end] start表...阅读全文

博文 2019-04-30 09:34:42 我傻笑你跑掉

ld: warning: text-based stub file /System/Library/Framework

# command-line-arguments ld: warning: text-based stub file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation.tbd and library file /System/Library/Frameworks//CoreFoundation.framework/CoreFoundation are out of sync. Falling back to library file for linking. ld: warning: text-based stub file /System/Library/Frameworks//Security.fram...阅读全文

博文 2018-11-12 22:37:26 ccoding