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

Go语言 unsafe的妙用

unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对象,uintptr类型的目标会被回收。golang的unsafe包很强大,基本上很少会去用它。它可以像C一样去操作内存,但由于golang不支持直接进行指针运算,所以用起来稍显麻烦。 切入正题。利用u...阅读全文

博文 2014-10-14 10:00:01 abv123456789

golang http.handler接口详解

golang http.handler接口详解 1.标准库接口定义 package http type Handler interface { ServeHTTP(w ResponseWriter, r *Request) } func ListenAndServe(address string, h Handler) error ListenAndServe函数需要一个例如“localhost:8000”的服务器地址,和一个处理所有请求的Handler接口实例。它会一直运行,直到这个服务因为一个错误而失败(或者启动失败),它的返回值一定是一个非空的错误。 2.小Demo type dollars float32 func (d dollars) String() string { retu...阅读全文

博文 2016-06-01 17:00:03 secretx

golang实现改进版的快速排序

初学golang,写个快速排序练练手,无需额外编写partition函数,直接使用一个函数递归实现快排。 gopackage main import "fmt" func quickSort(arr []int, start, end int) { if start < end { i, j := start, end key := arr[(start+end)/2] for i <= j { for arr[i] < key { i++ } for arr[j] > key { j-- } if i <= j { arr[i], arr[j] = arr[j], arr[i] i++ j-- } } if start < j { quickSort(arr, start, j) } if...阅读全文

博文 2015-06-17 20:03:56 lilei_scut

go语言怎样开多进程图文讲解。

今天给大家讲解下go语言开多进程。 package main import ( "fmt" "time" ) var c chan int func main() { c = make(chan int) go waiting("coffee", 1) go waiting("tea", 2) fmt.Println("I,am waiting") //time.Sleep(3 * time.Second) <-c <-c } func waiting(w string, sec int) { time.Sleep(time.Duration(sec) * time.Second) fmt.Println(w, "is ready") c <- 1 } 如果进程开的比较多,怎样去避免去写多个...阅读全文

博文 2015-03-23 11:00:06 guoer9973

golang: 利用unsafe操作未导出变量

看了 @喻恒春 大神的利用unsafe.Pointer来突破私有成员,觉得例子举得不太好。而且不应该简单的放个demo,至少要讲一下其中的原理,让看的童鞋明白所以然。see:http://my.oschina.net/achun/blog/122540 unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uin...阅读全文

博文 2014-10-04 19:26:58 陈一回

golang之数组,slice,map

一 、==========================array 数组=================================== 索引只能是 int 整数型 所以不管几维数组 索引都是 整数 slice 是动态数组 索引也是 整数型 map为key 所以 可以为 整数 也可以为 字符串型 注意slice和数组在声明时的区别:声明数组时,方括号内写明了数组的长度或使用...自动计算长度,而声明slice时,方括号内没有任何字符。 arr1 := [10]int{1,2,3,4} //数组,长度为10,只有4个元素指定,其它的元素值默认为0 arr2 := [...]string{"a","b","c"} //数组,长度自适应,这里长度为3 s1 := []int{1,2,3,4...阅读全文

高性能、解耦、异步的微博的消息队列

离开微博已久,总想着弄点东西出来纪念一下当年的峥嵘岁月:)。在微博,你不能不知道鸟哥 Laruence ,也不能不知道 mq 。 mq 是一个基于 memcached 协议,用 c/c++编写的消息队列中间件,有着高性能、解耦、异步化等特点。现在用 Go 重新实现了一遍,将早前自己用 mq 的过程中觉得有些特性可以加上的,都一一加上了,由于其依赖的东西极少,只是简单用了一个轻巧型的嵌入式数据库 BerkeleyDB ,就可以实现一个 simple 的队列服务 tcp server ,见https://github.com/YoungPioneers/mgq, 特性如下,希望大家给些意见,么么哒。 1、一写多读:举个例子, set myqueue message ,只要 get 的时候...阅读全文

golang 查找数组中最小数的泛型函数

golang里要实现查找数组最小数的泛型函数,需要用到类型开关。 gol的类型开关写法: switch v.(type) { case int: case float64: case string: } 思路就是遍历数组,遇到更小的数保存下来,函数退出返回那个数。 golang代码: package main import ( "fmt" ) func Minimum(first interface{}, rest ...interface{}) interface{}{ minimum := first for _, v := range rest { switch v.(type) { case int: if v := v.(int); v < minimum.(int) { mini...阅读全文

博文 2015-05-31 13:00:01 guonaihong

5亿次请求,95万QPS HTTPS CC攻击——阿里云云盾抗下全球最大DDoS攻击

5亿次请求,95万QPS HTTPS CC攻击——阿里云云盾抗下全球最大DDoS攻击 3月29日, 阿里云正式对外发布《2015下半年云盾互联网DDoS状态和趋势报告》。报告披露,去年11月,阿里云安全团队成功防御了黑客对阿里云平台上某互联网金融用户发起的超大规模HTTPS/SSL CC流量攻击,此次攻击也是迄今为止全球有统计数据最大的HTTPS SSL/CC攻击。 作为国内最大的公共云计算服务提供商,大量网站选择阿里云的安全防护,也因此为国内客户防御了当前互联网上主要的攻击行为。 攻击者从11月5日下午14点开始针对网站开始发起攻击,出现两次波峰分别在14点10和晚上7点30左右,总攻击量达到了5亿次请求。 ![1攻击请求QPS变化.jpg](http://stu...阅读全文

Golang分布式设计模式之-----星型拓扑分形设计

Golang分布式设计模式之-----星型拓扑分形设计 上一篇分层设计中,利用了简单的流水线原理,实现了简单的状态转移的设计。如下 这一篇我们将考虑另外一种情况。例如,linux内核中的进程管理。所有的进程都有一个父进程。当子进程正常运行时候,与父进程基本无通信。但当子进程死亡时,要通知其父进程,让父进程进行资源回收。当父进程死亡时,两种情况,子进程随着父进程一起死亡,或者将子进程交由父进程的父进程管理。类似于下图 其中每个进程都有自己的父进程,也有可能会有自己的子进程。 在这种管理中,父子关系,或者说是管理者与被管理者的关系。被管理者,可以独自运行,但要将其的一些状态告知管理者,或者管理者,可以定期获取被管理者的状态。 下面以一个p2p下载器为例: 一、职能划分,形成管理者与被管理者 1)...阅读全文

博文 2015-01-21 09:17:51 screscent

Golang泛型函数

目前,golang还不支持模板函数(类型参数化),所以看上去不得不为每一种类型都实现一个函数。但是Golang可以利用空接口interface{}和闭包/高阶函数来实现泛型函数。1 空接口 空接口interface{}是指方法集为空的接口,任何类型的值都可以赋值给空接口。接口相关内容请参见另一篇博客《Golang中的接口》// interface{} func minimum(first interface{}, rest ...interface{}) interface{} { minimum := first for _, x := range rest { switch x := x.(type) { case int: if x < minimum.(int) { minimum ...阅读全文

博文 2017-02-09 17:25:06 说话的白菜

go语言基本语法——常量constant

一、常量的使用1.1 常量声明常量是一个简单值的标识符,在程序运行时,不会被修改的量。const identifier [type] = value 显式类型定义: const b string = "abc" 隐式类型定义: const b = "abc" package main ​ import "fmt" ​ func main() { const LENGTH int = 10 const WIDTH int = 5 var area int const a, b, c = 1, false, "str" //多重赋值 ​ area = LENGTH * WIDTH fmt.Printf("面积为 : %d", area) println() println(a, b, c) }运...阅读全文

如何设计一个麻雀般的微型分布式架构?

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由mariolu 发表于云+社区专栏 序言(初衷) 设计该系统初衷是基于描绘业务(或机器集群)存储模型,分析代理缓存服务器磁盘存储与回源率的关系。系统意义是在腾讯云成本优化过程中,量化指导机房设备扩容。前半部分是介绍背景,对CDN缓存模型做一些理论思考。后半部分会实际操作搭建一个微型但是五脏俱全的分布式通用系统架构,最后赋予该系统一些跟背景相关的功能,解决成本优化中遇到的实际问题。 缓存服务器存储模型架构(背景): img 图1 存储模型 腾讯CDN的线上路由是用户à分布于各地区各运营商的OC->SOC->SMid->源站。各个层级节点部署的都是缓存服务器。来自用户的部分请求流量命中服务器,另一部分产生回源流量。 随着业务带宽自...阅读全文

博文 2018-09-06 19:34:39 腾讯云加社区

golang 生成随机数,时间种子改进型

直接上代码: var ( randSeek = int64(1) l sync.Mutex ) //获取指定长度的随机字符串 //@params num int 生成的随机字符串的长度 //@params str string 可选,指定随机的字符串 func GetRandomSring(num int, str ...string) string { s := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" if len(str) > 0 { s = str[0] } l := len(s) r := rand.New(rand.NewSource(getRandSeek())) var buf bytes...阅读全文

博文 2015-06-17 20:23:36 rariki

GO語言基礎教程:數據類型,變量,常量

GO類似PHP,每行的結尾要加分號來結束,不同點在於GO對此並不強制,這一點又像javascript,另外GO的語句塊是用一對大括號來包裹的,但是go要求左大括號必須要在語句的結尾處,不能在行首出現左大括號,這是一個新的特性,至少在我接觸的編程語言中第一次遇到這種狀況.還有就是GO對大小寫敏感,這一點相信大家不會有什麽爭議. GO語言的註釋方法和PHP是相同的,單行註釋用//,而多行註釋用/*註釋內容*/,這一點是沒差別的. Go有眾所周知的數據類型int,這個類型很特殊,他會自動根據您的硬件決定適當的長度,在32位的硬件上他的長度是32位,在64位的硬件上,他的長度就是64位,當然了,您也可以強制定義某個變量的長度,例如int8,int16,int32,int64 和 byte,uint8...阅读全文

让golang的cron库支持带事件参数的回调

一直在寻觅c/c++下的cron库,可惜一直没找到。目前对我来说,cron可以做定时的某活动,比如晚上八点怎么怎么的,golang下有大神提供的cron库,那么这部分的实现还是放到go实现的服务器下面吧,然后再通知别的服务器,只能绕路子了。 go下的cron库使用的是 github.com/robfig/cron,最终使用的是 github.com/jakecoffman/cron,后者也是前者的改进版,主要增加了个RemoveJob的函数来移除特定的任务。 主要使用中的不变就是自带的回调为一个func(),无任何参数,所以被激活的时候无法判断到底是哪个计划任务被调度了,写多个函数也比较麻烦,于是看看是否能修改下源码来完成这个功能。后来看了下代码,原来不用修改代码就可以实现,设计的还是不错的...阅读全文

博文 2015-12-11 19:00:01 sryan

snowflake算法可以指定各域位数的改进版

snowFlake算法在生成ID时特别高效,可参考:https://segmentfault.com/a/1190000011282426 它可以保证: * 所有生成的id按时间趋势递增 * 整个分布式系统内不会产生重复id(因为有datacenterId和workerId来做区分) 但在在某下场影下dataCenterId、workerId并不需要占那么多的位,或是机器没那么多。自己就写了一个各个域的位可以自定义设置的。 https://github.com/liuyongshuai/goSnowFlake ``` /** * @author Liu Yongshuai * @package goSnowFlake * @date 201...阅读全文

博文 2018-02-01 17:52:29 liuyongshuai

golang技巧-接口型函数

接口型函数:指的是用函数实现接口,这样在调用的时候就会非常简便,这种函数为接口型函数,这种方式适用于只有一个函数的接口。 定义一个类型,这个类型只定义了函数的参数列表,函数参数列表与接口定义的方法一致: type HandlerFunc func(k, v interface{}) 然后这个类型去实现接口,实现的函数调用自己 func (hf HandlerFunc) Do(k, v interface{}) { hf(k, v) // 接口的实现中调用本身。这样就使得可以用函数来实现接口功能,而不是定义类型并实现接口来实现接口功能 } 这样就可以用两种方法去实现接口功能 func Each(mp map[interface{}]interface{}, h Handler) { // 传入...阅读全文

go语言 类型:数组

在go语言中数组array是一组特定长度的有序的元素集合。 go的数组类型由两部分组成——类型和长度,二者缺一不可。数组本来就是一块存储相同类型元素的连续内存空间,因此决定一个数组的类型,必然需要决定其存储元素的类型以及存储多少个元素。 在Go语言中,数组长度在定义后就不可更改。 数组是值类型,每次传递都将产生一份副本。 例子: package main import ( "fmt" "strconv" ) func main() { var a [5]int //定义数组 5个整数型 fmt.Println("emp:", a) //整数型零值为0 a[4] = 100 //修改数组 fmt.Println("set:", a) fmt.Println("get:", a[4]) //输出...阅读全文

博文 2015-10-13 03:00:00 osfipin

Golang必备技巧:接口型函数

接口型函数,指的是用函数实现接口,这样在调用的时候就会非常简便,我称这种函数,为接口型函数,这种方式使用于只有一个函数的接口。 我们以迭代一个map为例,演示这一技巧,这种方式有点类似于groovy中Map的each方法一样,也是Gradle里each闭包。 原始接口实现1234567891011type Handler interface { Do(k, v interface{})}func Each(m map[interface{}]interface{}, h Handler) { if m != nil && len(m) > 0 { for k, v := range m { h.Do(k, v) } }} 首先定义一个Handler接口,只有一个Do方法,接收k,v两个参数,...阅读全文

博文 2017-07-04 02:16:32 飞雪无情

golang设计模式-成员变量赋值

常见golang的struct赋值有两种: 1)定义变量同时初始化 val := &Options{ UID:int(1), } 2)先定义变量,再赋值 val := new(Options) val.UID = int(3) 赋值设计模式: 1)每个属性一个方法,方法名称与属性有关 2)赋值方法的返回值是统一的,可由同一个方法无差异执行 package main import ( "os" ) func main() { //err := New("/tmp/empty.txt") //if err != nil { // panic(err) //} err := New("/tmp/file.txt", Length(200), UID(1000), Contents("Lorem I...阅读全文

go语言的"泛型函数or模板函数"

首先大家知道golang是没有JAVA的泛型函数或者C++的模板函数这种语法的,今天学到了一种很有用的类似泛型操作的语法,拿来和大家分享 以大家喜闻乐见的Add函数来说明,目的是来实现一个泛型的Add函数 先写了三个ADD函数 在把三个ADD函数统一起来前,先学习一个简单的Interface{}的用法,注意int,int32,int64在setvalue的泛型判断中是不同的类型 相信到这里大部分同学都明白了,我们是要通过switch data:=input.(type)这样的类型判断来实现所谓的泛型,先按照最常规的 伪代码:Add(a,b){return a+b} 来实现 ps:这里b2其实是个float64类型 也可以传指针 看到这里有没有想到一个问题,如果我的add函数是 伪代码:add...阅读全文

博文 2016-10-31 03:00:08 easy_mind

go package列表泛型包

# package slicelement Go library for finding element in slice type or operating set including union, interaction and difference. not only it supports the buildin types which includes `[]int/[]*int`, `[]float/[]*float`, `[]string/[]*string`, but also it supports `[]struct/[]*struct` . The latter is very important and convenient ## Installati...阅读全文

存储IO加强型实例I1+D1 ——为极致存储性能要求场景而生

摘要: 企业客户广泛使用数据库、分布式缓存、ELK(Elasticsearch、Logstash和Kibana)日志分析和大数据等系统,对小IO随机读写IOPS和延时,以及大IO存储吞吐Throughput等提出了严格的要求。 企业客户广泛使用数据库、分布式缓存、ELK(Elasticsearch、Logstash和Kibana)日志分析和大数据等系统,对小IO随机读写IOPS和延时,以及大IO存储吞吐Throughput等提出了严格的要求。而当前高效云盘或SSD云盘存储在性能、成本等方面,还无法很好地满足企业客户存储严苛场景下的要求,成为制约企业客户上云的关键瓶颈。 针对此问题,阿里云ECS企业级产品线推出存储IO加强型实例I1(本地SSD型)和D1/D1NE(大数据型),为客户提...阅读全文

golang strings包

package main import ( "fmt" "strings" ) func main(){ var sayHi string = "Hello" //定义字符串并赋值 fmt.Println(sayHi + "World") //字符串拼接 fmt.Println(len(sayHi)) //len显示字符串长度 fmt.Println(sayHi[0]) //显示第一个字符的asic码 fmt.Println(string(sayHi[0])) //要正常显示第一个字符,转成string类型 var pi float64 = 3.14 //定义一个浮点类型 fmt.Println("%T:%d\n",int(pi),int(pi)) //string可直接将浮点转成整数 //...阅读全文

博文 2017-02-10 11:03:56 欺世

golang: 利用unsafe操作未导出变量-Pointer使用

unsafe.Pointer其实就是类似C的void *,在golang中是用于各种指针相互转换的桥梁。uintptr是golang的内置类型,是能存储指针的整型,uintptr的底层类型是int,它和unsafe.Pointer可相互转换。uintptr和unsafe.Pointer的区别就是:unsafe.Pointer只是单纯的通用指针类型,用于转换不同类型指针,它不可以参与指针运算;而uintptr是用于指针运算的,GC 不把 uintptr 当指针,也就是说 uintptr 无法持有对象,uintptr类型的目标会被回收。golang的unsafe包很强大,基本上很少会去用它。它可以像C一样去操作内存,但由于golang不支持直接进行指针运算,所以用起来稍显麻烦。 切入正题。利用u...阅读全文

博文 2018-08-05 16:34:56 豆瓣奶茶

泛型展开

泛型展开 Wombat Project: https://github.com/v2pro/wombat 泛型展开不是简单的类型替换。在C++中有模板偏特化,以及由此发展出来一系列实现编译期计算的奇技淫巧,直到最后以constexpr变成语言的一部分。D语言的static if也是类似的,在编译期实现了D语言的一个子集。在 Go 2.0 中即便支持了泛型,要达到D语言的高度,可能还需要很长的路要走。所以目前最佳的方案还是用代码生成的方案。但是纯手写的代码生成没有办法做到很复杂的泛型代码的组合,比如一个泛型函数调用另外一个泛型函数之类的。所以 wombat 的实现目标是设计一个能够支撑大规模代码生成的机制,使得复杂的utility能够被广泛复用。这些utility不仅仅是简单的compare,...阅读全文

博文 2017-07-28 15:12:11 v2p.ro

Go语言编程-语法

Go注释 //单行注释 /* */多行注释 Go的内置关键字 default select defer go goto fallthrough range package(包) import(导包) return (返回) var(声明全局变量) type(一般类型声明) struct(结构) interface(接口) func(方法) map(map类型) switch case if else for continue break const(定义常量) chan(通道,用于多个服务器之间的通道,用于并发) Go基本类型 bool:布尔型 1字节,取值:true,false, 不可以用数字代表 int/uint:整型 根据运行平台可能是32或64bit int8/uint8:8位整型 ...阅读全文

博文 2016-02-15 05:00:00 u013355724

Go 语言常量

Go 语言常量常量是一个简单值的标识符,在程序运行时,不会被修改的量。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。常量的定义格式:const identifier [type] = value你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。显式类型定义: const b string = "abc"隐式类型定义: const b = "abc"多个相同类型的声明可以简写为:const c_name1, c_name2 = value1, value2以下实例演示了常量的应用:package main import "fmt" func main() { const LENGTH int = 10 const WIDTH int = 5...阅读全文

博文 2016-02-25 11:00:02 u011225629

golang第一天

环境搭建 win10环境,.msi软件一直下一步,安装结束,path环境变量自动配置 测试环境是否搭建成功,使用go version命令 1.png 测试代码 hello.go, 包含go的基本语法和类型 package main //主包 import ( "fmt" //打印模块 "math" //数据运算模块 ) /** * 常量的声明 * 只能为:布尔型、数字型(整数型、浮点型和复数)和字符串型 */ const ( MY_NAME = "JACK" MY_AGE int = 19 MY_FLAG bool = true ) /** * 程序入口 main函数和main包 */ func main() { /** * 声明一个字符串类型变量 */ var message string...阅读全文

博文 2019-02-26 23:34:44 陌生人的头像

如何优雅的落地一个微型分布式架构

设计该系统初衷是基于描绘业务(或机器集群)存储模型,分析代理缓存服务器磁盘存储与回源率的关系。系统意义是在腾讯云成本优化过程中,量化指导机房设备扩容。前半部分是介绍背景,对CDN缓存模型做一些理论思考。后半部分会实际操作搭建一个微型但是五脏俱全的分布式通用系统架构,最后赋予该系统一些跟背景相关的功能,解决成本优化中遇到的实际问题。缓存服务器存储模型架构(背景):​图1 存储模型腾讯CDN的线上路由是用户à分布于各地区各运营商的OC->SOC->SMid->源站。各个层级节点部署的都是缓存服务器。来自用户的部分请求流量命中服务器,另一部分产生回源流量。随着业务带宽自然增长,用户端带宽增长,假设业务回源率不变的情况下,磁盘缓存淘汰更新(淘汰)速率变快,表现为以下业务瓶颈(iowait变高、回源带...阅读全文

博文 2018-09-27 19:17:09 tuomaochengxuyuan

如何设计一个微型分布式架构?

序言(初衷)设计该系统初衷是基于描绘业务(或机器集群)存储模型,分析代理缓存服务器磁盘存储与回源率的关系。系统意义是在腾讯云成本优化过程中,量化指导机房设备扩容。前半部分是介绍背景,对CDN缓存模型做一些理论思考。后半部分会实际操作搭建一个微型但是五脏俱全的分布式通用系统架构,最后赋予该系统一些跟背景相关的功能,解决成本优化中遇到的实际问题。缓存服务器存储模型架构(背景): 图1 存储模型腾讯CDN的线上路由是用户à分布于各地区各运营商的OC->SOC->SMid->源站。各个层级节点部署的都是缓存服务器。来自用户的部分请求流量命中服务器,另一部分产生回源流量。随着业务带宽自然增长,用户端带宽增长,假设业务回源率不变的情况下,磁盘缓存淘汰更新(淘汰)速率变快,表现为以下业务瓶颈(iowait...阅读全文

博文 2018-09-21 16:34:47 Java架构解析

一文读懂公有链、私有链、联盟链

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 区块链中公有链、私有链、联盟链都是区块链技术的一个细分,而技术仅仅是一种工具,怎么在不同的场景应用好不同的工具才是技术进步的关键。 公有链是什么? 公有链(publicblockchain)是指全世界任何人都可读取、发送交易且能获得有效确认的共识区块链。 公链的安全由工作量证明机制(pow)或权益证明机制(pos)等方式负责维护。他们是以经济奖励和加 密数字验证相结合的方式存在的,并遵循这一定的原则: 每个人从中可获得的经济奖励,与对共识过程作出的贡献成正比。 这些区块链通常被称为是“完全去中心化”的。 私有链是什么? 私有链是什么?(Token-less blockchain)。完全私有的区块链,是指其写入权限...阅读全文

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

致 Go 团队的一封公开信 —— 关于 try

> polaris 注:目前关于 try 的提案被否决了,具体见:https://studygolang.com/articles/22043 *“一旦语言变得足够复杂,在其中编程更像是从无限多的特性海洋中划出一个子集,其中大部分都是我们永远不会学到的。一旦语言像是有无限多的特性,为其添加更多特性的成本就不再明显。”* - *[Mark Miler](https://medium.com/@erights/the-tragedy-of-the-common-lisp-why-large-languages-explode-4e83096239b9)* 新的关于 `try` 的提议是对语言的补充,它引入了第二种错误处理机制。它是根据 [2018 年 Go 语言调查](https://blog....阅读全文

博文 2019-07-27 20:10:14 polaris

doublejump - 快速、简洁的一致性哈希库,Google Jump 算法的改进版

Overview doublejump 的核心是 Google Jump 一致性哈希算法,这个实现弥补了该算法的最大缺点:不能删除节点。 传送门 https://github.com/edwingeng/doublejump Benchmark BenchmarkDoubleJumpWithoutLock/10-nodes 50000000 27.6 ns/op BenchmarkDoubleJumpWithoutLock/100-nodes 30000000 42.7 ns/op BenchmarkDoubleJumpWithoutLock/1000-nodes 30000000 54.1 ns/op BenchmarkDoubleJump/10-nodes 20000000 72.9 n...阅读全文

博文 2018-11-19 19:34:40 edwingeng

如何设计一个微型分布式架构?

序言(初衷) 设计该系统初衷是基于描绘业务(或机器集群)存储模型,分析代理缓存服务器磁盘存储与回源率的关系。系统意义是在腾讯云成本优化过程中,量化指导机房设备扩容。前半部分是介绍背景,对CDN缓存模型做一些理论思考。后半部分会实际操作搭建一个微型但是五脏俱全的分布式通用系统架构,最后赋予该系统一些跟背景相关的功能,解决成本优化中遇到的实际问题。缓存服务器存储模型架构(背景): 图1 存储模型腾讯CDN的线上路由是用户à分布于各地区各运营商的OC->SOC->SMid->源站。各个层级节点部署的都是缓存服务器。来自用户的部分请求流量命中服务器,另一部分产生回源流量。随着业务带宽自然增长,用户端带宽增长,假设业务回源率不变的情况下,磁盘缓存淘汰更新(淘汰)速率变快,表现为以下业务瓶颈(iowai...阅读全文

博文 2018-09-28 18:34:42 Java架构007

一篇文章读懂阿里云负载均衡性能保障型实例

什么是负载均衡性能保障型实例? 性能保障型实例提供了可保障的性能指标(性能SLA)。与之相对的是性能共享型实例,即不保障实例的性能指标,资源是所有实例共享的。 在阿里云负载均衡推出性能保障型实例之前,用户所有购买的实例均为性能共享型实例。在控制台上,可以查看已购实例的类型。 把鼠标移至性能保障型实例的绿色图标,可查看具体的性能指标,如下图所示。 实例类型 性能保障型实例的三个关键指标如下: 最大连接数-Max Connection 最大连接数定义了一个负载均衡实例能够承载的最大连接数量。当实例上的连接超过规格定义的最大连接数时,新建连接请求将被丢弃。 每秒新建连接数-Connection Per Second (CPS) 每秒新建连接数定义了...阅读全文

GoLang 学习笔记 - 常量

常量   常量是在程序运行时不会被修改也不可修改的量。在GoLang 中,常量的数据类型只可以是布尔型、数值型(整数型、浮点型和复数)和字符串,通常用下划线分隔大写字母来命名常量。   GoLang 中常量的定义格式: const A string = "a" // 显式类型定义 const B = "b" // 隐式类型定义   多个相同类型的声明可以简写为: const NUM_1, NUM_2 = 3, 4   常量还可以用作枚举(枚举篇会讲): const ( Unknown = 0 Female = 1 Male = 2 ) iota   iota,特殊常量,可以认为是一个可以被编译器修改的常量,通常用作常量计数器。   iota iota 每次出现都会初始化为 0,const 中...阅读全文

博文 2019-07-21 05:32:39 凉丶心园

Go语言入门(十一) 接口编程

接口 接口的定义 接口定义了一个对象化的行为规范 只定义规范,不实现 具体的对象需要实现规范的细节 实践 type 定义接口 interface 接口里面是一组方法签名的集合 type Animal interface { Talk() Eat() Run() } 实现 一个对象只要包含接口中的方法,那么就实现了这个接口 接口类型的变量可以保存实现该接口的任何类型的实例 type Animal interface { Talk() Eat() Run() } type Dog struct { name string } //一个对象只要包含接口中的方法,那么就实现了这个接口 func (d *Dog) Eat() { fmt.Printf("%s is eating\n",d.name) ...阅读全文

博文 2020-04-14 20:33:15 wx5b285b48ed74e

八、Golang过程式编程

Golang过程式编程 1、接口型函数 用函数实现接口,这样在调用的时候就会非常简便,这一类型的函数就叫做接口型函数;使用情景:仅限于只有一个函数签名的接口。 原始使用,请看如下使用案例: type Handle interface { Done (k , v interface{}) } func each(m map[interface{}]interface{}, h Handle) { if m != nil && len(m) > 0 { for k, v := range m { h.Done(k, v) } } } 上面案例,我们定义了仅有一个函数签名Done (k , v interface{}) 的Handle类型接口,接着我们定义一个each函数,接收两个参数:一个map...阅读全文

golang基础(2)基础类型

基本类型 在开始之前,先补充一下上一次分享的内容,是不可以重复为变量 foo 初始化赋值的。 foo := 'hello' foo := "world" 我是一名 web 前端出身的 developer,接触最早也是接触最多还是 javascript ,所以学习任何其他新的语言我都喜欢给 javascript 对比地来学。在 javascript 数据类型中对于数值只有 number 类型也就是 float 类型,而在 go 语言却进行相当细致的划分数值类型,应该是为了效率,节省内存空间吧。更准确地为变量分配内存空间。 int8 int16 int32 int64 float32 float64 关于这些数据类型,我就不做过多解释 int 代表整数型,后面 8 代表的占内存大小也是就是这个数...阅读全文

golang快速排序改进版

package main import ( "fmt" "math/rand" ) // 如果数量小于13直接用插入排序 func SortForMerge(arr []int, left, right int) { for i:=left; i<=right; i++ { temp := arr[i] var j int for j=i; j>left && temp < arr[j-1]; j-- { arr[j] = arr[j-1] } arr[j] = temp } } func swap(arr []int,i, j int) { // 数据交换 arr[i], arr[j] = arr[j], arr[i] } func QuickSortX(arr []int, left, ...阅读全文

博文 2019-08-16 18:02:42 发条家的橙子

golang语言渐入佳境[26]-string转其他类型函数

string转其他类型函数12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788package mainimport ("strconv""fmt")/*1、func Atoi(s string) (int, error)Atoi 返回 ParseInt(s, 10, 0) 转换为 int 类型的结果。【alphabet:字母】2、func ParseInt(s string, base int, bitSize i...阅读全文

博文 2018-12-12 00:35:17 jonson_jackson

04 | 常量与iota

常量 使用const定义,类型可不指定 const Con string = "hello" const Constr = "world" func TestCon(t *testing.T){ //t.Log(getConNum()) t.Log(Con) t.Log(Constr) t.Log(reflect.TypeOf(Con)) } 常量可以是字符、字符串、布尔值或数值(整数型、浮点型和复数) 常量的值必须在编译时就能够确定 func getConNum() int { return 1 } const Con = getConNum() func TestCon(t *testing.T){ //t.Log(getConNum()) t.Log(Con) } //result :...阅读全文

博文 2020-03-21 18:32:43 刀斧手何在