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

jvm垃圾回收算法

前言 java相较于c、c++语言的优势之一是自带垃圾回收器,程序开发人员不用手动管理内存,内存的分配和释放完全由gc(Garbage Collector)来做,极大地提高了软件开发效率及程序健壮性(手动管理内存容易造成内存泄漏)。凡事皆有两面性,java gc在给我们带来内存管理便捷性的同时,也面临STW(Stop The World)影响程序吞吐的缺陷。作为java开发人员,只有深入理解jvm垃圾回收的机制,才能在程序性能出现瓶颈时,更好的对程序进行优化。笔者通过拜读《深入理解java虚拟机》,总结书中内容,给大家分享下java虚拟机常见的垃圾回收算法。 垃圾确定 在垃圾回收之前,jvm需要确定哪些对象已死,即需要当做垃圾被回收。垃圾确认的方法传统的有引用计数法:用一个引用计数器来标记对...阅读全文

博文 2019-01-26 22:34:42 luckiexie

Golang中生成随机字符串并复制到粘贴板

前段时间在生活中偶尔需要对某些文件进行重命名,而且是随机名字,刚 开始是手动重命名然后在键盘上胡乱打一些字母数字,时间长了发现也挺麻烦的,于是想到能不能用golang实现这个功能并且自动把生成的字符串 复制到粘贴板,然后生成exe文件,要用的是直接鼠标双击就行。说干就干。 网上搜了些相关资料,于是写了出来。 安装必要的库 go get github.com/atotto/clipboard 代码实现 package main import ( "fmt" "github.com/atotto/clipboard" "math/rand" "strings" "time" ) var a = [...]string{"a", "b", "c", "d", "e", "f", "g", "h",...阅读全文

博文 2019-12-21 06:32:58 梅云罗

ubuntu eclipse 编写简单go语言

1、下载配置Golang,配置相关环境 一、现在地址:http://www.golangtc.com/download 我选择的是下面这个(64位,linux版) 二、配置环境 解压后在.bashrc中配置环境变量 2、配置gocode 默认情况下go的解压包里面没有gocode,所以我们需要安装一个,通过命令: ? 1 go get -u github.com/nsf/gocode 就可以在go的目录里看到了: 3、eclipse集成goclipse插件 goclipse(https://github.com/GoClipse/goclipse )是eclipse的一个go语言插件,可以在eclipse里面在线安装也可以下载,解压,将features和plugins目录里面的文件复制到ec...阅读全文

博文 2015-06-17 23:01:36 Java__Coder

依据 smtp协议的简单golang 的发邮件实现

依据 smtp协议的简单golang 的发邮件实现协议格式如下 From:sender_user@demo.netbr/>To:to_user@demo.netSubject:这是主题Mime-Version:1.0 //通常是1.0Content-Type:Multipart/mixed;Boundary="THIS_IS_BOUNDARY_JUST_MAKE_YOURS" //boundary为分界字符,跟http传文件时类似Date:当前时间 --THIS_IS_BOUNDARY_JUST_MAKE_YOURS //boundary前边需要加上连接符 -- , 首部和第一个boundary之间有两个空行Content-Type:text/plain;chart-set=utf-8//单...阅读全文

博文 2019-05-26 20:35:40 云发G25295678

golang中的xg作用

前面的文章里大概说过一些如何阅读xg的源代码的东西,但是后来由于太懒了,总是不想写一些很系统的东西,所以感觉还是把一些值得说的大概写一点,做个备忘。 事实上xg的通用的内容都被放在了src/cmd/gc里,而整个编译阶段最重要的东西就是go.y这个文件,因为这个是bison的语法定义文件。事实上go在编译阶段也只是将所有的内容按语法分析的结果放入NodeList这个数据结构里,然后export写成一个*.6(比如amd64的架构),这个.6的文件大概是这样子的: amd64 exports automatically generated from test.go in package "main" $$ // exports package main func "".main () var ...阅读全文

博文 2015-06-17 20:18:51 HopingWhite

2014.12最新hosts文件亲测可用google服务

在Ubuntu下同过下面命令修改,把下方数据复制到hosts的底部 sudo gedit /etc/hosts hosts代码在下方 127.0.0.1 localhost ::1 localhost fe80::1%lo0 localhost 255.255.255.255 broadcasthost 17.151.36.30 gs.apple.com 198.252.106.236 serve.netsh.org #Microsoft OneDrive 134.170.108.154 onedrive.live.com 134.170.104.90 onedrive.live.com 134.170.107.154 onedrive.live.com 134.170.108.26 one...阅读全文

博文 2015-06-17 20:05:19 Moriarty_221

Golang 复制版 Copier

Copier 是 Golang 的复制版,它从一个结构复制到了另一个结构。它具有以下特点: * 如果名字匹配,就从一个场景复制到另一个场景 * 如果方法名和场景名匹配,就从方法复制到场景 * 如果场景名和方法名匹配,就从场景复制到方法 * 从片复制到片 * 从结构复制到片 示例代码:

import . "github.com/jinzhu/copier"
type User struct {
    Name string
    Role string
    Age  int32}
    func (user *User) DoubleAge...阅读全文

订阅通知 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 虽然本文的题目叫做“订阅通知”,但是呢,本文却主要介绍「观察者模式」如何在真实业务场景中使用。是不是有些不理解?解释下: 原因一,「观察者模式」其实看起来像“订阅通知” 原因二,“订阅通知”更容易被理解 什么是「观察者模式」? 观察者观察被观察者,被观察者通知观察者 我们用“订阅通知”翻译下「观察者模式」的概念,结果: “订阅者订阅主题,主题通知订阅者” 是不是容易理解多了,我们再来拆解下这句话,得到: 两个对象 被观察者 -> ...阅读全文

博文 2020-04-12 18:32:43 TIGERB

把别人的Tcl/Tk代码加入到Go语言里12 游戏5 画图案?

a 首先打开网页 http://wiki.tcl.tk/4206 b 把网页里提到的tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如...阅读全文

博文 2015-05-13 16:00:06 名字不能长

golang讲解(go语言)标准库分析之string开篇

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; 今天我们继续讲golang标准库的string这个包,我选定这个是看了下别的包真的需要这个功能所以我们来这个包,string包实现了简单的函数方法来操作字符串。其中的type Reader很简单,因为会返回一个*Reader这就用到我们前边讲的io了,废话不多说进入正题 (1)func Contains(s, substr string) bool这个函数是查找某个字符是否在这个字符串中存在,存在返回true [php] import ( "fmt" "strings" ) func main() { fmt.Println(strings.Contains("widuu", "wi")) /...阅读全文

博文 2017-02-09 18:40:36 widuu

golang-raft算法理论与实践

前言 我计划写raft的一系列文章,包含从理论到代码实践,此文章依托于MIT的研究生课程。 背景 raft 是一种分布式的共识算法,其目的是要实现多个节点集群的容错性,一致性从而能够构建大规模的软件系统。 在raft之前,比较有名的是Paxos。但是paxos难于理解。 raft的诞生是为了让共识算法更容易理解,在工程上更容易实现。 和其他的共识算法不同的是,raft具有下面的特点: leader:raft中会有一个领导者具有超级权限,可以把自己的log 复制到其他节点中。 leader election: raft每隔一段随机的时间就会进行leader的选举 raft允许集群配置变化时正常运行。 Replicated state machine 状态机是分布式系统中的一个重要概念,任何一个...阅读全文

博文 2020-02-12 07:32:56 唯识相链2

golang发邮件

由于go默认tls.Config{ServerName: host, InsecureSkipVerify: false}, func TestHtmlEmail(t *testing.T) { opt := &EmailOptions{ User: "", Password: "", To: []string{""}, From: "", Addr: "smtp.xxx.com:25", } auth := NewLoginAuth(opt.User, opt.Password) pic, err := ioutil.ReadFile(`C:\Pictures\example.png`) if err != nil { t.Log(err) } dest := make([]byte, b...阅读全文

博文 2017-03-09 08:01:01 u22b

把别人的Tcl/Tk代码加入到Go语言里9 游戏2 可旋转的3D多面体

a 首先打开网页 http://wiki.tcl.tk/14283 【3D polyhedra with simple tk canvas Updated 2014-10-24 21:38:58 by ZB 】 b 把网页里提到的tcl/tk代码复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里go run go代码文件,运行效果如...阅读全文

博文 2015-05-13 08:00:00 名字不能长

8:golang修复数据库文件(sql报错:database disk image is malformed)

思路: 1:导出sql语句到临时文件 2:修改tmp.sql文件(将最后一行的Rollback改为Commit;) 3:读取tmp.sql并写入到新库中 准备工作(三个文件) 1:sqlite3.exe(自行下载:https://www.sqlite.org/download.html) 2:read.sql(自行创建一个空的.sql文件) 3:dump.sql(自行创建一个空的.sql文件) 调用: DoRepair(DBPath, newDbName string) 方法定义: package repairTool import ( "bytes" "debian/ant/service/application" "fmt" "io" "io/ioutil" "os" "os/exec"...阅读全文

博文 2019-10-21 18:32:47 aside section._1OhGeD

订阅通知 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 虽然本文的题目叫做“订阅通知”,但是呢,本文却主要介绍「观察者模式」如何在真实业务场景中使用。是不是有些不理解?解释下: 原因一,「观察者模式」其实看起来像“订阅通知” 原因二,“订阅通知”更容易被理解 什么是「观察者模式」? 观察者观察被观察者,被观察者通知观察者 我们用“订阅通知”翻译下「观察者模式」的概念,结果: “订阅者订阅主题,主题通知订阅者” 是不是容易理解多了,我们再来拆解下这句话,得到: 两个对象 被观察者 -> ...阅读全文

博文 2020-04-12 18:34:25 TIGERB

把别人的Tcl/Tk代码加入到Go语言里11 游戏4 红心游戏

a 首先打开网页下载tcl/tk游戏源码http://sourceforge.net/projects/tkgames/files/latest/download?source=typ_redirect b 把压缩包里的tcl/tk源代码文件tkHearts-0.90用文本编辑器打开,并把所有内容 复制到如下go源代码的init_script字符串常量里 package main import "github.com/nsf/gothic" const init_script = ` #把Tcl/Tk源代码复制到这个常量里 ` func main() { ir := gothic.NewInterpreter(init_script) <-ir.Done } c 在LiteIDE里或命令行里...阅读全文

博文 2015-05-13 16:00:07 名字不能长

政府安全资讯精选 2017年第四期:聚焦美国网络安全新动态

摘要: , 摘要: Uber被指控侵犯用户数据,美科技公司建议对执法部门获取位置数据设更高门槛,欧盟《网络与信息安全指令》和GDPR将同时生效,美国商务部计划将三个网络安全项目迁移上云 d67f9d5f41f1d8068d9a791a9cc3f5fe6e4d228c 【安全事件】 Uber被指控侵犯用户数据 美政府要求接受20年隐私系统审核 点击查看全文 概要:美国联邦贸易委员会(下称FTC)经调查称,Uber失实报告了对雇员提取乘客和司机个人信息的监测程度,且未采取适当措施保护用户数据。FTC称,Uber甚至未采取低成本的防止入侵措施,例如要求工程师使用区分的密钥,或要求多重因素认证。此外,Uber还把地理位置等敏...阅读全文

zabbix检查硬盘S.M.A.R.T状态[go语言实现]

因为服务器比较多,以前都是喜欢用perl写程序,后来发现部署的时候还要安装perl环境,实在太麻烦了,所以改用go编程,把go编译发后,复制到服务器就可以运行,还真的挻方便的。 之前已经用go写了一个mysql 主从同步,检查从服务器是否出错的程序,如果同步出错就可以在zabbix里警告了,把mysql密码写到程序里,再编译,这样比脚本语言要安全很多,而且不用添加一个用户。 原因是这样的,有很多服务器,有很大一部分是普通硬盘,普通硬盘就很容易出问题,因为服务器上面没有办法做badblock 检查(太耗IO资源了),但是检查S.M.A.R.T状态可以提前预知硬盘故障,还是有点用,好过没有,对吧。 程序是基于linux的,window 改改也能用,主要是先检查/dev/sda…b…c…d 循环检...阅读全文

博文 2017-09-09 12:52:46 YiYou.Org

LollipopGo开源游戏服务器框架--网络基础模块源码

大家好,我是彬哥,本节给大家讲下LollipopGo游戏服务器NetBase.go,抛砖引玉了,主要是针对Go语言游戏服务器网络处理。 package main import ( "encoding/json" "fmt" "Proto" "Proto/Proto2" "code.google.com/p/go.net/websocket" ) func wwwGolangLtd(ws *websocket.Conn) { // fmt.Println("Golang语言社区 欢迎您!", ws) // data = json{} data := ws.Request().URL.Query().Get("data") fmt.Println("data:", data) NetDataCo...阅读全文

博文 2019-01-04 07:34:43 Golang语言社区

Go 包管理之module

Go Module 使用 Go Module 是官方用来管理 package 依赖的工具, 1.11 新加的, 使用时需要设置变量: GO111MODULE=on . go mod help 可以查看其帮助文档: $ go help mod Go mod provides access to operations on modules. Note that support for modules is built into all the go commands, not just 'go mod'. For example, day-to-day adding, removing, upgrading, and downgrading of dependencies should be d...阅读全文

博文 2018-11-27 23:34:41 jouyouyun

go语言学习笔记之slice用法

一、slice的概念: Slices(切片)slice是概念上一个结构包含三个域:一个数组的指针、长度和容量。切片支持[]操作符来访问底层数组的元素。内置的len函数返回的切片长度。内置的的cap函数返回切片的容量。 切片是引用类型,这意味着如果你将一个切片赋值给另外一个切片,这两个切片将引用同一个底层数组。 二、如何创建slice 创建切片可用以下两种方法: (1)直接创建: s := make([]int, 10) 创建了名为s 的,有10个元素(长度等于10)的整数类型切片 如果创建后没有给slice赋值,那么slice的值为创建类型的默认值,如: packagemain import"fmt" funcmain(){ s:=make([]int,10) fmt.Println(s) ...阅读全文

博文 2015-06-17 23:07:39 wuwenxiang91322

第二天:golang学习笔记之Byte

编码 名称 摘要 ★bytes bytes包实现了操作[]byte的常用函数. encoding encoding包定义了供其它包使用的可以将数据在字节水平和文本表示之间转换的接口. strconv strconv包实现了基本数据类型和其字符串表示的相互转换. strings strings包实现了用于操作字符的简单函数. text scanner对utf-8文本的token扫描服务,tabwriter缩进修正 unicode unicode 包提供了一些测试Unicode码点属性的数据和函数. bytes bytes包共有两个Struct分别是Reader和Buffer以及一个ErrTooLarge的er bytes文件定义了操作[]byte的众多函数: 类型之间的关系:rune,UTF-...阅读全文

博文 2019-12-15 17:32:39 Macmillan_

go语言嵌套类型的使用细节

1. 定义 在Go语言中,嵌套类型是将已有的类型直接声明在新的结构类型里。被嵌入的类型被称为新的外部类型的内部类型。 通过嵌入类型,与内部类型相关的成员变量会提升到外部类型上。就好像这些成员变量直接声明在外部类型一样。如下图所示: 外部类型可以通过声明与内部类型成员变量同名的成员变量来覆盖内部类型的成员变量。如下图所示: 2. 嵌套类型的基本使用 package main import "fmt" // 自定义类型 type userInfo struct { name string email string } // 自定义类型 type client struct { userInfo // 嵌入类型 level string } // 定义user指针类型调用的方法 func (u *...阅读全文

博文 2020-01-15 16:32:41 lioney

根据拓扑图理解golang的sync.Map工作原理

sync.Map的拓扑关系图 读懂关系图需要了解的几个关键点 var expunged = unsafe.Pointer(new(interface{})) type Map struct type readOnly struct type entry struct func (m *Map) Load(key interface{}) (value interface{}, ok bool) func (m *Map) Store(key, value interface{}) func (m *Map) Delete(key interface{}) func (m *Map) Range(f func(key, value interface{}) bool) 这里要重点关注readO...阅读全文

博文 2019-11-08 16:02:43 fizz

Golang WebAssembly 前端开发 - 1. Hello world.md

本文使用的环境: go1.11 linux/amd64 chrome 70.0.3538.67 Golang 源文件 main.go 如下: package main func main() { println("Hello, world!") } 在 Golang 源文件目录下,将 Golang 代码编译为 wasm 后缀的 WebAssembly 二进制文件,再将该文件复制到一个工作目录中: GOOS=js GOARCH=wasm go build -o go_main.wasm cp go_main.wasm /path/to/static 工作目录下的 HTML 源文件 go_index.html 如下: 阅读全文

博文 2018-12-29 23:34:45 Platanuses

Angular 2

一年前写的文字,当时还在 偶数科技实习。记录了技术栈和学习过程。 由于我司老板钦定了前端使用Bootstrap、Angular,后端使用GoLang。我们也只好硬着头皮上。GoLang半个月前刚了解大概,就直接上马写了Monitor process和RESTful service。前几天jQuery和Bootstrap也才大概了解。就剩下Angular这个框架让人很疑惑。最开始我是跟着官网的教程一步一步来的,大概只跟了一个section就放弃了。代码编译错误不知道怎么解决,quickstart一点也不for beginner。后来Eason又找了一些AngularJS和Angular的教程,Angular JS由于是快要淘汰的产品,我就没有看,那个Angular的教程又太老了,与现在的技术落...阅读全文

博文 2018-12-25 21:34:42 SaltSoup

Go Module 未来的趋势

Go Modules介绍 Modules是Go 1.11中新增的实验性功能,基于vgo演变而来,是一个新型的包管理工具。 GO111MODULE 要使用go module,首先要设置GO111MODULE=on GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。 GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。 GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:当前目录在GOPATH/src之外且该目录包含go.mod文件,或者当前文件在包含go.mod文件的目录...阅读全文

博文 2019-05-09 03:35:01 My_Fuzz

Docker部署Golang

1. 安装docker 2. mkdir myDocker 3. cd myDocker && touch Dockerfile 4. Dockerfile写入 # 将golang环境作为父镜像 FROM golang MAINTAINER Razil "zc6496359" WORKDIR $GOPATH/src/godocker ADD . $GOPATH/src/godocker RUN go build main.go EXPOSE 8080 ENTRYPOINT ["./main"] 参数解释: FROM -> 母镜像 MAINTAINER -> 维护者信息 WORKDIR -> 工作目录 ADD -> 将文件复制到镜像中 RUN -> 执行操作(就跟在终端执行语句一样) EXPO...阅读全文

博文 2018-08-15 15:30:02 dqh123

docker创建例子(go语言)

1. 安装docker -----先有docker环境 2. mkdir myDocker -----新建个文件夹,方便操作 cd myDocker ---进入 Dockerfile写入---新建镜像构造文件,就叫Dockerfile,构造的时候语句会自动执行该名称的构造文件 将golang环境作为父镜像,得先pull一个golang,因为有go的环境才能执行go代码 FROM golang//以go为基础来布置 MAINTAINER Razil "zc6496359" //这就是个名字而已 WORKDIR $GOPATH/src/godocker//go项目得在目录下才能执行就不用说了吧,这个workdir如果找不到该文件夹,就会自己新建一个,这里他自己新建一个 ADD . $GOPATH...阅读全文

博文 2019-08-24 17:32:51 哆啦在这A梦在哪

2018.9.11 从0到1,你准备好了吗?

最近两天又接到一个任务,给一家区块链公司招聘go开发的人才。于是便在一些社区发了招聘帖子,没多久就有人加我微信,立即通过了。对方是一位前端开发工程师,对区块链感兴趣,想转做区块链后端开发,对于这样的转行跳槽者,我觉得她是有勇气的。她跟我了解了区块链行业的人才需求以及薪酬情况,我也一一解答向她了。她还问了我一个问题:你们招区块链培训机构出来的人么?我说:这个和培训机构没关系的,主要看你自己的技术功底的,不过我个人觉得区块链培训机构,目前应该都不是很成熟的,不太建议你去,大部分不太靠谱。她还和我说,听培训机构说有很多hr跟他们要人。我第一感觉就是她被这些机构忽悠了,区块链技术处于起步阶段,大家都还在摸索,并没有完全成熟的模式,他们这些机构哪能一下子掌握呢?这些都是要靠实践才行的,不是去短时间培训...阅读全文

golang 通道channel 基础

声明一个通常的基本语法:channel := make(chan int,0)  当容量为0时,我们可以称通道为非缓冲通道,当容量大于0时,我们称为缓冲通道;  一个通道相当于一个先进先出(FIFO)的队列。也就是说,通道中的各个元素都是严格地按照发送的顺序排列的,先被发送通道的元素值一定会先被接受。元素值的发送和接受都需要用到操作符<-。我们也可以叫它接受操作符。 问:对通道的发送和接受操作都有哪些基本特性? 答: 1.对于同一个通道,发送操作之间是互斥的,接受操作之间也是互斥的。    2.发送操作和接受操作中对元素值的处理都是不可分割的。    3.发送操作在完全完成之前都会被阻塞。接受操作也是如此。 第一个特性:在同一时刻,Go语言的运行时系统只会执行对同一个通道的任意个发送操作中的...阅读全文

博文 2018-09-29 01:34:39 one_zheng

(四)GoLang小记 —— 中文编程

什么,GoLang 也能写中文代码?是的, 你没看错! (编译版本) 请将如下代码复制到您的IDE后直接运行; package main import ( "fmt" ) type 老爸 struct { 力量 string 高大 string } type 老妈 struct { 聪明 string 细心 string } type 儿子 struct { 老爸 老妈 } func main() { var 儿子对象 = 儿子{老爸{"我有力量","我长得高"},老妈{"我很聪明","我很细心"}} fmt.Println("s.力量:",儿子对象.力量) fmt.Println("s.高大:",儿子对象.高大) fmt.Println("s.聪明:",儿子对象.聪明) fmt.Print...阅读全文

博文 2016-10-19 11:00:13 水果糖

青蛙跳台阶 Golang 与 Python 最简解法

「剑指Offer」里的经典题目,近期群里聊到这题,特来复习一波。 题目 一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 思路 首先跳到 n 级台阶可以分解为两种情况: 之前跳到 n-1 级台阶,然后再跳 1 级到达 n 级; 之前跳到 n-2 级台阶,然后再跳 2 级到达 n 级; 因此 n 级跳法数量,等于这两种情况之和。 即 F(n) = F(n-1) + F(n-2) 同理可继续推导: F(n-1) = F(n-2) + F(n-3) F(n-2) = F(n-3) + F(n-4) ... F(2) = F(1) + F(0) F(1) = 1 F(0) = 1 可见这是斐波那契数列,数列中从第三个数开始,每个数都是前两个数...阅读全文

博文 2020-03-09 10:32:48 张凯强

垃圾回收(GC)浅谈

关于内存 计算机通过两个机制,去实现内存的高效使用。 第一种机制是虚拟内存。硬盘的容量其实是远远大于内存的(RAM),虚拟内存会在内存不足的时候,把不经常访问的内存的数据写到硬盘里。虽然说硬盘容量比较大,但是它的访问速度却很慢。如果内存和硬盘交换数据过于频繁,处理速度就会下降,计算机就会看上去像卡死了一样,这种现象被叫做抖动(Thrushing)。造成电脑蓝屏的主要原因之一就是抖动。 第二种机制就是垃圾回收(GC)。 虚拟内存的东西在计算机组成原理和操作系统的教科书里有相关的章节去讲。由于内容很多我就不多叙述了。主要来讲一下GC的事情。 GC 之前学习java以及参加java相关的面试,被问到关于相关GC的事情一直很是头疼,看了好多遍还是记不住,脑袋里只有隐隐约约的一些关键字,什么老年代、新...阅读全文

密码管理EasyPass开发笔记(第2篇)

EasyPass的后端框架 EasyPass采用golang作为后端语言。作为近今年比较火爆的语言,golang以它的高并发和开发快吸引了一大批优秀的开发者,EasyPass也正是看中了它的简洁、高效和高性能。后端存储EasyPass采用mongo,mongo是nosql的佼佼者,支持各种复杂的查询,特别是4.0支持了事务后,发展迅猛。 EasyPass的后端主要负责加密数据的存储,架构也是相对简单,如下所示: EasyPass后端架构图 网关层负责借口的限流和鉴权,业务层是具体业务逻辑,底层存储是用的mongodb。 EasyPass的表结构 用户的每一个密码对于mongodb里的一条数据,具体的数据结构如下所示: { "id": "数据的ID", "account": "数据所有者的帐号...阅读全文

博文 2018-10-03 09:34:41 zhongxuqi

golang:send mail using smtp package

go语言发送邮件,可以使用smtp包,两个关键函数: func PlainAuth(identity, username, password, host string) Authfunc SendMail(addr string, a Auth, from string, to []string, msg []byte) error 刚开始玩的时候,很好奇邮件的title是怎么设置进去的,毕竟从代码没看见有setTitle。后来发现是解析msg获取标题、发件人、收件人、邮件格式、邮件内容等;因此msg需要按一定格式写:To: xxx\r\nFrom:xxxx\r\nSubject: xxxx\r\nContent-Type:text/html; charset=UTF-8\r\n\r\n[邮...阅读全文

博文 2017-12-14 07:00:01 dannyyao

Go 应用的 vendoring utilityManul

Manul 是 Go 应用的 vendoring utility。 **为什么需要 Manul ?** 因为其他的 vendor utilities 有以下缺点: 有些会对 go 的二进制文件和 GOPATH env 变量进行欺骗包装。你将得到一个非 go-gettable 项目,需要额外的软件来编译和运行; 有些将依赖关系的源代码复制到供应商目录中:更新依赖关系需要手动干预,并将大量修改的行直接提交到主仓库;不能通过查看仓库来告诉你的项目使用的依赖关系的版本; 必须在与提交相关联的供应商的附加模糊文件中保留版本。 还有各种架构问题: 不能更新所有或特定的依赖关系; 不能将特定版本的被依赖关系回滚; 不能删除未使用的被依赖关系; 不能锁定版本的 vendored 依赖...阅读全文

手绘raft算法

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

golang-101-hacks(12)——copy

注:本文是对golang-101-hacks中文翻译。 内置函数copy定义如下: func copy(dst, src []Type) int 内置函数copy将元素从源切片复制到目标切片。(作为一种特殊情况,它还会将字符串中的字节复制到一个字节片段)切片源和目标可能存在重叠。Copy返回值是copy的总数,即是len(src)和len(dst)的最小值。 看一下基础演示代码,其源切片和目标切片双方不存在重叠 package main import ( "fmt" ) func main() { d := make([]int, 3, 5) s := []int{2, 2} fmt.Println("Before copying (destination slice): ", d) fmt...阅读全文

博文 2019-06-02 00:34:40 羊羽share

TCP连接的状态变迁

全部11种状态 客户端独有的:(1)SYN_SENT (2)FIN_WAIT1 (3)FIN_WAIT2 (4)CLOSING (5)TIME_WAIT 。 服务器独有的:(1)LISTEN (2)SYN_RCVD (3)CLOSE_WAIT (4)LAST_ACK 。 共有的:(1)CLOSED (2)ESTABLISHED 。 ![image.png](https://static.studygolang.com/190222/c1b69cd34b964ea79036a1f00b187f9f.png) 状态变迁 1、建立连接时的状态变迁 一开始,建立连接之前服务器和客户端的状态都为CLOSED。服务器创建socket后开始监听,变为LISTEN状态。客户端请求建立连接,向服务器发送SYN...阅读全文

go-events package简介

go-events实现了一种处理event的机制,其核心概念是Sink(定义在event.go): // Event marks items that can be sent as events. type Event interface{} // Sink accepts and sends events. type Sink interface { // Write an event to the Sink. If no error is returned, the caller will // assume that all events have been committed to the sink. If an error is // received, the caller ma...阅读全文

博文 2017-06-25 14:10:32 肖楠

开源API测试工具 Hitchhiker v0.5更新 - 完善细节

Hitchhiker 是一款开源的支持多人协作的 Restful Api 测试工具,支持Schedule, 数据对比,压力测试,支持上传脚本定制请求,可以轻松部署到本地,和你的team成员一起管理Api。 详细介绍请看: http://doc.hitchhiker-api.com/cn/introduction.html 在线体验: http://www.hitchhiker-api.com/, 可以用 try without login 来免登录使用 (在线演示不支持压力测试和上传js,虚拟机单核的,撑不住)。 下面来看看这次的更新: request和setRequest Script 增加属性request来得到请求的信息,包括 method, url, headers, body。 c...阅读全文

博文 2017-11-30 00:04:39 布鲁克石

jvm垃圾回收算法

前言java相较于c、c++语言的优势之一是自带垃圾回收器,程序开发人员不用手动管理内存,内存的分配和释放完全由gc(Garbage Collector)来做,极大地提高了软件开发效率及程序健壮性(手动管理内存容易造成内存泄漏)。凡事皆有两面性,java gc在给我们带来内存管理便捷性的同时,也面临STW(Stop The World)影响程序吞吐的缺陷。作为java开发人员,只有深入理解jvm垃圾回收的机制,才能在程序性能出现瓶颈时,更好的对程序进行优化。欢迎学Java和大数据的朋友们加入java架构交流: 855835163群内提供免费的架构资料还有:Java工程化、高性能及分布式、高性能、深入浅出。高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高...阅读全文

博文 2019-01-27 11:34:48 Java大生

GoLang练习实例100之007----切片COPY

package main import "fmt" //将一个列表的数据复制到另一个列表中 func printSlics(s []int){ fmt.Printf("%v, 长度=%d, cap=%d\n", s, len(s), cap(s)) } func main(){ slice_A := []int{1,2,3,4,5,6,7,8} var slice_B = make([]int,len(slice_A)) //s2 := make([]int, 16) copy(slice_B, slice_A) fmt.Println("打印复制新列表内容") printSlics(slice_B) ...阅读全文

博文 2018-03-26 22:33:05 不折腾难受斯基

nsqjs客户端的部署

因为公司在业务中需要用到消息队列产品,我选用了基于golang开源的nsq产品,记录下我遇到的那些部署中的坑。首先安装nsq,这个没什么好说的,我是直接在官网下载bin文件,直接部署的,环境是centOS 6.7,安装在/opt/nsq-0.3.7.linux-amd64.go1.6目录下;其次是安装nodejs,我安装的是v6.1.0版本,这步也没什么好讲;然后安装nsqjs这个遇到了些坑,这里先记录下1、要看下gcc的版本; $ gcc -v使用内建 specs。 目标:x86_64-redhat-linux 配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bu...阅读全文

博文 2017-02-09 08:21:08 阿修罗王

使用GoAdmin极速搭建golang应用管理后台(二)——自定义登录页面

前面我们介绍怎么快速上手搭建一个管理后台,这一节就介绍一下怎么自定义登录的页面。 框架内置提供了一个登陆界面,但有时候我们想要自定义一个,这时我们需要自定义一个组件去引入。线上的demo的登录页面就是自定义的组件。其代码这里:https://github.com/GoAdminGro...。 我们想要自定义一个登录界面,可以照葫芦画瓢,先将demo的这个登录组件下载下来,放到我们的项目目录下: . ├── login │ ├── Makefile Makefile命令 │ ├── assets │ │ ├── login │ │ │ └── dist 前端资源文件合并 │ │ └── src │ │ ├── css 前端css文件 │ │ └── js 前端js文件 │ ├── assets...阅读全文

博文 2020-04-20 12:32:43 cg33

[golang]slice的坑:从append到共享

go是宣扬实用主义的语言,很多时候都把c中的最佳实践直接规定成语法了。其中之一就是slice,简单但是非常容易踩坑。 先看一个小例子: func main() { a := make([]int, 2, 2) a[0], a[1] = 1, 2 b := append(a[0:1], 3) c := append(a[1:2], 4) fmt.Println(b,c) } 在这个小例子中,原本是希望将a[0:1]作为b的前缀,然后追加上3;将a[1:2]作为c的前缀,然后追加上4。但实际上输出结果并不是原本期望的[1 3] [2 4],而变成了[1 3] [3 4]。这是为什么呢? 我们知道数据结构中数组是非常高效的,可以直接寻址,但是有个缺陷,难以扩容。所以slice被设计为指向数组的指针...阅读全文

博文 2018-09-29 12:34:45 一桶冷水

[译]Go Concurrency Patterns: Pipelines and cancellation - 1

英文原文:https://blog.golang.org/pipelines #### 简介 go语言的并发原语支持使得开发者构建流式数据`pipeline(管道)`变得容易,这些管道可以有效的利用I/O和多cup。本文介绍了这类pipeline的示例,重点介绍了操作失败时出现的细微差别,和如何优雅的处理错误的技术 #### What is a pipeline go语言中没有对`pipeline`正式的定义;`pipeline`只是多种并发模式中的一种。通常而言,`pipeline`是由`channel`连接的一系列阶段,其中每个阶段是由运行相同方法的`goroutine`。在每个阶段中,`goroutine`会完成 - 从`上游channel`接收值 - 对数据进行一些处理,通常会产生新...阅读全文

博文 2020-04-11 23:39:35 TIEDPAG