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

golang 正则表达式

package main import "bytes" import "fmt" import "regexp" func main() { //这个测试一个字符串是否符合一个表达式。 match, _ := regexp.MatchString("p([a-z]+)ch", "peach") fmt.Println(match) //上面我们是直接使用字符串,但是对于一些其他的正则任务,你需要使用 Compile 一个优化的 Regexp 结构体。 r, _ := regexp.Compile("p([a-z]+)ch") //这个结构体有很多方法。这里是类似我们前面看到的一个匹配测试。 fmt.Println(r.MatchString("peach")) //这是查找匹配字符串的。 f...阅读全文

博文 2015-04-21 03:00:01 benlightning

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: 利用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) }运...阅读全文

golang之正则校验

Go语言中使用正则校验需要用到 regexp 包 先介绍几种常用的方法: 1、 使用MatchString函数 regexp.MatchString(pattern string, s string) pattern为正则表达式,s为需要校验的字符传 例: match,_:=regexp.MatchString("p([a-z]+)ch","peddach") 返回的第一个参数是bool类型即匹配结果,第二个参数是error类型 fmt.Println(match) //结果为true 2、使用 Compile函数或MustCompile函数 它们的区别是Compile返回两个参数*Regexp,error类型,而MustCompile只返回*Regexp类型 func Compile(ex...阅读全文

博文 2016-11-22 01:00:02 skh2015java

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

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

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

golang中整数的阶乘

package main import "fmt" var facVal uint64 = 1 var i int = 1 var n int /* function declaration */ func factorial(n int) uint64 { if n < 0 { fmt.Print("Factorial of negative number doesn't exist.") } else { for i := 1; i <= n ; i++ { facVal *= uint64(i) } } return facVal } func main() { fmt.Println("Enter a positive integer between 0 - 50 : ") fmt....阅读全文

博文 2019-03-05 21:35:50 PowerMichael

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

通过leetcode学习位运算及其Go实现

问题描述 461. Hamming Distance即求两个正整数的二进制对应位数不同的个数 原理说明 从问题描述来看,最直观的解决方法就是十进制数先转成二进制,再比对相同位数是否相同,不同则计数器累加,最终计数器的值即是Hamming Distance。 优化方案:先^运算,对运算结果的位数进行遍历,1则计数器累计 基于这个思想,需要用到的有 异或运算 和 位运算。 异或^ 和 异或非 异或运算法则:相同为零,不同为一。异或非运算法则:相同为一,不同为零。即: 输入A: 1 0 1 0 输入B: 1 1 0 0 异或运算结果: 0 1 1 0 异或非(同或)运算结果:1 0 0 1 左移<< 和 右移>> 左移 右边空出的位用0填补 高位左移溢出则舍弃该高位 右移 左边空出的位用0或者1填...阅读全文

博文 2017-10-29 06:04:40 酒肉穿肠过

go语言十大排序算法总结(下篇)

希尔排序 希尔排序基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2《d1重复上述的分组和排序,直至所取的增量dt=1(dt《dt-l《…《d2《d1),即所有记录放在同一组中进行直接插入排序为止。 该方法实质上是一种分组插入方法。 个人总结: public class ShellSorter { public void Sort(int[] arr) { int inc; for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ; for (; inc > 0; inc /= 3) { for (int i = ...阅读全文

博文 2016-07-17 19:00:04 guoer9973

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

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

GoLang练习实例100之003----完全平方数

package main import ( "fmt" ) //题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少 func main() { for i :=1; i<=85; i++{ if 168 % i==0{ j := 168 / i if (i>j) && ((i + j) % 2==0) && ((i - j) % 2 == 0){ //m := (i + j) / 2 n := (i - j) / 2 x := n * n - 100 fmt.Printf("符合条件的整数有:%s\n",x) } } } ...阅读全文

博文 2018-03-20 22:33:04 不折腾难受斯基

【面试题】计算某个整数 1 的位数,即 Hamming weight

编写一个函数,接收一个无符号整数,返回它拥有的“1”位数(也称为汉明权重,[Hamming weight](https://en.wikipedia.org/wiki/Hamming_weight))。 例如,32 位整数 '11' 的二进制表示为 `00000000000000000000000000001011`,所以函数应该返回3。 ```go // hammingWeight 计算 Hamming weight func hammingWeight(n uint32) int { } ``...阅读全文

Go中的素数筛选

~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ Examination Problem 质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。 判断101-200之间有多少个素数,并输出所有素数。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Analysis 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 在一般领域,对正整数n,如果用2到根号n之间的所有整数去除,均无法整除,则n为质数。 质数大于等于2不能被它本身和1以外的数整除 ~~~~...阅读全文

博文 2016-09-11 15:00:00 u013346007

golang math/big 和 string bytes相互转化

显式初始化 num := big.NewInt(math.MaxInt64) math.MaxInt64是最大的整数 num := big.NewInt(1999) fmt.Printf("Big int: %v\n", num) ⚠️显式初始化最大只能是math.MaxInt64,如果还想大,就得需要byte或者string byte array -> big.Int import "math/big" z := new(big.Int) z.SetBytes(byteSliceHere) or func Base64ToInt(s string) (*big.Int, error) { data, err := base64.StdEncoding.DecodeString(s) if ...阅读全文

博文 2019-09-26 14:33:28 aside section ._1OhGeD

golang99道练习题之14

**1.将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。** **2.程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:** (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。 **3.程序源代码:** ```go package main import "fmt" func main() { var i, n int fmt.Print("n=") fmt.Scan(&n) fmt.Printf("%d=", n) for i = 2; i < n;...阅读全文

博文 2018-11-21 09:54:07 hdking

go语言函数例题

// proctice3.2 project main.go main import ( "fmt" ) func main() { //Q10. (5) 变参 1. 编写函数接受整数类型变参,并且每行打印一个数字 printthem printthem fmtPrintln /*Q11. (5) 斐波那契1. 斐波那契数列以:1; 1; 2; 3; 5; 8; 13; : : : 开始。或者用数学形式表达:x1 =1; x2 = 1; xn = x...阅读全文

博文 2015-08-13 14:00:01 直冲

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) { // 传入...阅读全文

C语言面试题-这些简单的你能很快的写出来吗?

C语言面试题-这些简单的你能很快的写出来吗?在职场上,面试已经成了我们经常讨论的一个话题,但是当我们在求职面试的时候总是会遇到各种问题,在这里我就给大家讲解一些C语言的面试题!​面试题一: 编写一个函数将一个字符串倒置,即将“abc”变为“cba”。分析: 这样的问题显然涉及到char型指针的运算。Exp: void InvertStr(char *str) { long int i=0; //估计这么长的字符串应该够用了,如果实在不行只能用float的数据来试验了。 char *head; char *chTemp; if(NULL == str) { return ; } head=str; chTemp=str; while('\0' != *str) { str++; i=i+1; ...阅读全文

博文 2019-01-17 16:34:10 gaohuan123

POJ 1047 Round and Round We Go 循环数新解

题目描述: 给定一字符串表示的高精度数,判断它是否是可循环的。如果假设字符串num的长为n,则将num从1开始乘到n,如果每次得到的结果包含的字符元素都和a是相同的,则它是可循环的。 解题思路: 初看这一题,想到的解法是利用高精度数的乘,计算出num乘以1到n的结果,再与num进行对比。这种方法较为简单,可以得到正确的结果,但是效率并不是很理想。对于循环数,我们最常见到的是循环小数,而这一题的解法也是由此引申得出的。 初等数论里面有以下三个定理: 欧拉定理:设a、m为整数,m>1,(a,m)=1,则a^φ(m)≡1 (mod m)。 整数的次数:a、m为整数,m>1,(a,m)=1,k是使a^k≡1 (mod m)成立的最小正整数,则k叫做a对模m的次数。 次数定理:设a对模m的次数为k,n...阅读全文

博文 2016-02-05 07:00:01 furney

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

Go语言正则表达式

package main import "bytes" import "fmt" import "regexp" func main() { //这个测试一个字符串是否符合一个表达式。 match, _ := regexp.MatchString("p([a-z]+)ch", "peach") fmt.Println(match) //上面我们是直接使用字符串,但是对于一些其他的正则任务,你需要使用 Compile 一个优化的 Regexp 结构体。 r, _ := regexp.Compile("p([a-z]+)ch") //这个结构体有很多方法。这里是类似我们前面看到的一个匹配测试。 fmt.Println(r.MatchString("peach")) //这是查找匹配字符串的。 f...阅读全文

博文 2016-04-30 05:00:02 Jesounao

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...阅读全文

Golang 正则表达式

参考 golang之正则校验 golang正则使用总结 //MatchString返回的第一个参数是bool类型即匹配结果,第二个参数是error类型 sourceStr := `my email is gerrylon@163.com` matched, _ := regexp.MatchString(`[\w-]+@[\w]+(?:\.[\w]+)+`, sourceStr) fmt.Printf("%v", matched) // true r,_:=regexp.Compile("p([a-z]+)ch") b:=r.MatchString("peach") fmt.Println(b) //结果为true //Compile函数或MustCompile函数是将正则表达式进行编译,返...阅读全文

博文 2019-02-22 18:34:43 懒皮

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 豆瓣奶茶

GO函数调用出问题了!!求大神帮忙

function.go文件内容: package main import ( "errors" ) func Add(a int, b int) (sum int, err error){ if a<0 || b<0 { err = errors.New("请输入正整数") return } return a+b, nil } functionTest.go文件内容: package main import ( "fmt" ) func main() { a, err := Add(-2,3) fmt.Println(a,err) } 报错: # command-line-arguments co...阅读全文

泛型展开

泛型展开 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中的素数筛选

~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~ Examination Problem 质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数的数称为质数。 判断101-200之间有多少个素数,并输出所有素数。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Analysis 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。 在一般领域,对正整数n,如果用2到根号n之间的所有整数去除,均无法整除,则n为质数。 质数大于等于2不能被它本身和1以外的数整除 ~~~~...阅读全文

博文 2016-09-03 03:00:01 u013346007

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 陌生人的头像

Golang 优化之路——bitset

写在前面 开发过程中会经常处理集合这种数据结构,简单点的处理方法都是使用内置的map实现。但是如果要应对大量数据,例如,存放大量电话号码,使用map占用内存大的问题就会凸显出来。内存占用高又会带来一些列的问题,这里就不展开说了。还有就是,大量数据存放于map,查找的哈希算法消耗也会很高。这时就该考虑对数据结构进行优化。之前浏览awesome-go时发现了一种叫bitset的数据结构,今天就介绍一下它。 bitset 简介 首先这是一个数据结构。从名字set不难发现,这是一个集合的数据结构。bit的含义也比较好懂,通过set是通过bit实现的。如果你需要一个集合,正好集合内的元素都是正整数,那么用这个就没错了。 注:biset 有时也会被叫做 Bitmap。 Example import "g...阅读全文

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

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

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