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

for data:=range 通道中data定义了几次

本人刚学习go,再体验range 遍历通道的遍历之时,又产生了一些误解,对于for data:=range 通道中data我之前一直以为是每次for循环都会通过:=新定义一个data变量,但实际上并非如此,只是第一次会定义变量data,在后面的每次循环都是重复使用。这在官方文档里面,可以看到:The iteration variables may be declared by the "range" clause using a form of short variable declaration (:=). In this case their types are set to the types of the respective iteration values and their s...阅读全文

golang 初识小结

1 为什么学 工作需要,未来投资 2 golang的特点 设置为服务端语言,简洁,用来替换C语言。 3 有意思的特性 《1》 函数的可变参数 《2》变量函数首字母大写是公共的,小写是私有的 ; 《3》中文命名的变量和函数 《4》延迟执行,离开作用域后执行。关键字 defer(再也不担心忘记释放语句)(函数返回时,能再次修改返回值) 《5》函数的强制云括号格式化,必须在函数名那一句的右边。不这样还编译报错。 4 平凡语言特性 自动垃圾回收 更丰富的内置类型 函数多返回值 错误处理 匿名函数和闭包 类型和接口 并发编程 反射 语言交互性 5 和c的比较 (##总的说,比C语言省略了圆括号,分号; 类型名靠后;) 1 头文件引用 #include <***> vs import "fmt" 2 函...阅读全文

博文 2016-06-30 12:00:02 baidang201

我为什么不看好 PHP ? 转载看了有点糟心

我为什么不看好 PHP ?讲道理来说对 php 还是蛮有感情的,从第一次看到 HHVM,swoole , PHP7,再到后来 laravel reactphp php-pm 等项目,php 社区有着源源不断的潜力,和一群热爱开发的人来给它续命。糟心的设计性能问题PHP 设计之初是没有过多考虑性能问题,同步阻塞模型非常适合一般思维,多进程也一定解决了脚本语言长时间跑会不稳定的问题。但是这样做的后果就是多进程十分占用 CPU 资源,进程需要等数据库操作。而且 PHP 本身不常驻内存,像 laravel 这样重量级框架,每次请求需要从磁盘加载代码到内存,再执行,响应速度可想而知。 这就好比你开了一家饭馆,厨师炒菜慢,为了简化管理,你选择增加 100 个服务员,给顾客 1 对 1 服务。而异步非阻塞...阅读全文

博文 2018-11-01 14:34:40 半瓶阳光o_o

go语言类型和接口

在go语言中,只要一个类型实现了一个接口含有的方法,我们就可认为该类型实现了该接口,下面是go语言中一个简单的类型和接口的例子。 package main import ( "fmt" ) //定义一个接口,实现run方法 type IRun interface { run() } //定义一个大人的类型 type man struct { } //定义一个小孩类型 type kid struct { } //为大人实现run方法,实质也是为大人实现了IRun接口 func (m *man) run() { fmt.Println("大人在跑") } //为小孩实现run方法,实质也是为小孩实现了IRun接口 func (k *kid) run() { fmt.Println("小孩在跑")...阅读全文

博文 2015-06-17 23:00:33 leege100

GO 利用unsafe.Sizeof,Alignof,Offsetof理解内存对齐

以下讲解均在64位系统下进行 基础类型大小 type size/bytes bool 1 intN, uintN, floatN, complexN N/8 int, uint, uintptr 1 *T 1 string 2(data,len) []T 3(data,len,cap) map 1 func 1 chan 1 interface 2 详解 先来看一段go代码 var x struct { a bool b int32 c []int } 问: unsafe.sizeof(x)返回值是多少? 第一次思考这个问题的时候,根据上面的基础类型大小我们可以知道,x的大小应该是sizeof(a) + sizeof(b) + sizeof(c) = 1 + 4 + 24 = 29 但是由于...阅读全文

博文 2019-07-11 19:32:40 jonyhy96

golang中结构体的初始化方法(new方法)

自:http://my.oschina.net/ifraincoat/blog/517139 自定义一个结构体 type Rect struct { x, y float64 width, height float64 } 初始化方法: rect1 := new(Rect) rect2 := &Rect{} rect3 := &Rect{0, 0, 100, 200} rect4 := &Rect{width:100, height:200} 注意这几个变量全部为指向Rect结构的指针(指针变量),因为使用了new()函数和&操作符.而如果使用方法 a := Rect{} 则表示这个是一个Rect{}类型.两者是不一样的.参考代码: func main() { rect1 := &Rect{...阅读全文

博文 2016-10-10 15:00:01 xxx9001

让我们一起Go(十一)

前言: 今天又要继续了,当初自己的挖的坑必须得填啊,尽管天气非常滴热,但是丝毫无法阻挡我填坑的热情,那么,我们继续让我们一起Go!!! 定义方法: 这里我们要来看看Golang中的(Methods)方法了。我们在让我们一起Go(九)中谈到过Go语言的函数(functions),这和今天说的方法不是一个概念哦。熟悉面向对象的同学应该知道,一般我们把类的成员函数叫做Methods(方法)。Go作为一门面向对象的语言,当然也有这个概念啦(虽然到目前我们还没讲到Go的面向对象编程)。说了那么多,对于码农来说,代码是最快的展现方式啊,那么马上就show you the code: oh yeah,上面的程序中,第4行我们定义了一种新类型mystring,其实就是string的别名。当然,你可以定义你想...阅读全文

博文 2015-07-06 18:00:05 a6652162

golang里面自定义tls的ciphers

下面的内容是从stackoverflow上面抄过来的。https://stackoverflow.com/questions/31226131/how-to-set-tls-cipher-for-go-server You can see an example in secrpc/tls_server.go: tls.Listen("tcp", addr, &tls.Config{ Certificates: []tls.Certificate{cert}, CipherSuites: []uint16{ tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, }, Min...阅读全文

博文 2019-04-04 12:34:39 areece

golang自己定义数据类型查询与插入postgresql中point数据

golang自己定义数据类型查询与插入postgresql中point数据 详细代码例如以下: package main import ( "bytes" "database/sql" "database/sql/driver" "fmt" _ "github.com/lib/pq" "strconv" "strings" ) // 自己定义支持类型 type Point struct { X float64 `json:"lat"` Y float64 `json:"lng"` } // 实现driver.Valuer接口 func (p *Point) Value() (driver.Value, error) { buf := new(bytes.Buffer) fmt.Fprintf...阅读全文

博文 2017-07-01 19:00:07 gavanwanggw

golang 自定义log日志

golang 自定义log日志 func TLog(){ dir, _ := filepath.Abs(filepath.Dir("")) logFileNmae := time.Now().Format("20060102")+".log" logFileAllPath := dir+"/log/"+logFileNmae _,err :=os.Stat(logFileAllPath) var f *os.File if err!=nil{ f, _=os.Create(logFileAllPath) }else{ //如果存在文件则 追加log f ,_= os.OpenFile(logFileAllPath,os.O_WRONLY|os.O_CREATE|os.O_APPEND, 06...阅读全文

博文 2019-09-29 14:32:55 aside section ._1OhGeD

[Go小技巧] 如何写很酷的连贯操作?

定义连贯操作的结构体方法 package toy type Toy struct { nick string shape string color string height int } func (t *Toy) SetNick(nick string) *Toy { t.nick = nick return t } func (t *Toy) SetShape(shape string) *Toy { t.shape = shape return t } func (t *Toy) SetColor(color string) *Toy { t.color = color return t } func (t *Toy) SetHeight(height int) *Toy { t.he...阅读全文

博文 2016-09-02 02:00:01 henrylee2cn

9.蛤蟆笔记go语言——方法和接口

9.蛤蟆笔记go语言——方法和接口 方法 Go 没有类。然而,仍然可以在结构体类型上定义方法。 方法接收者 出现在 func 关键字和方法名之间的参数中。 package main import ( "fmt" "math" ) type Vertex struct { X, Yfloat64 } func (v *Vertex) Abs() float64 { returnmath.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { v :=&Vertex{3, 4} fmt.Println(v.Abs()) } 执行: 5 你可以对包中的 任意 类型定义任意方法,而不仅仅是针对结构体。 但是,不能对来自其他包的类型或基础类型定义方法。 package main...阅读全文

博文 2016-08-18 10:00:04 notbaron

go中斐波切纳数列

package main import ( "fmt" // "time" ) func main() { fmt.Println(sum(5)) fmt.Println(amount(5)) } // 1+1+2+3+5 func sum(n int) int { if n == 1 || n == 2 { return 1 } return sum(n-1) + sum(n-2) } // 1+1+2+3+5 func amount(n int) int { if n == 1 || n == 2 { return 1 } a, b := 1, 1 for i := 3; i < n; i++ { a, b = b, a+b } return a + b } 第二种方法性能更好...阅读全文

博文 2016-11-14 05:00:01 Samete9011

了解 Go 1.9 的类型别名

目录 [−] 类型别名类型命名和类型声明的区别类型循环可导出性方法集byte 和 rune 类型参考资料 如你所知, 类型别名(type aliases) 最终还是加入到Go 1.9中, Go 1.9 beta2今天已经发布了, 正式版预计8月初发布, 是时候深入了解一下它的新特性了,本文介绍的就是它的重要的新特性之一: 类型别名。 当然,如果你想尝试这些新特性,需要安装Go 1.9的版本,目前是beta2版,可以在官方网站下载。 类型别名主要解决什么问题,为什么需要这个特性? Russ Cox 的论文Codebase Refactoring (with help from Go)介绍了它的背景。类型别名主要用在: 在大规模的重构项目代码的时候,尤其是将一个类型从一个包移动到另一个包中的时候...阅读全文

博文 2017-07-08 10:17:48 smallnest

go text/templete模板

抽空把go 的text/templete模板整理学习了,现在总结下。 步骤 1、定义数据类型 type Opt struct{ Name string Age int Score float32 } one := Opt{"xiao chao",26,90} two := Opt{"xiao er",29,89} 2、建立模板 one_str := "one_str :my name is {{.Name}},and age is {{.Age}},my score is {{.Score}}." two_str := "two_str :my name is {{.Name}},and age is {{.Age}},my score is {{.Score}}." t1 := templ...阅读全文

博文 2016-06-12 00:00:13 u010165367

img_gen:使用Golang自定义文字生成表情包图片.

# 地址 : https://github.com/wenjiax/img_gen ## Example ./img_gen -s "今天在群里看到老是有人发这样的图片,\ 我看着心里很不爽,于是写个程序来装逼。\ 现在终于写完了,我要去装逼了,这个逼我记住了..." ![example1](https://raw.githubusercontent.com/wenjiax/img_gen/master/out.png) ./img_gen -o out1.png -t temp2.png -s "今天在群里看到老是有人发这样的图片,\ 我看着心里很不爽,于是写个程序来装逼。\ 现在终于写完了,我要去...阅读全文

Golang 方法

方法是依托于结构体的,正如前面说的:结构体和其他面向对象语言中的class同等地位。 定义方法 格式: func (变量名 类型) 方法名(形参列表) (返回值列表) { #code } 示例: package main import "fmt" type Person struct { Name string } func (p Person) Test1(newName string) string { p.Name = newName return p.Name } func (p *Person) Test2(newName string) string { p.Name = newName return p.Name } func main() { p1 := Person{"ab...阅读全文

Go语言学习5:Go语言的变量类型

布尔类型 Go中布尔类型的值有true和false两种,由bool关键字定义 数字类型 由int定义的类型在Go中位数是确定的,例如在32为系统上int就是32位,在64位系统上就是64位。如果想定义其他位数的int数据,则需要明确指定,例如int8,int16,int32等。Go中还有两种个别的别名型数据:rune和byte,byte是uint8的别名,rune是int32的别名,rune主要用来遍历字符串中的字符(采用UTF-8编码) 常量 Go中用关键字const定义常量,常量的类型只能是,数字型,字符串,bool类型,定义形式可以如下: const a=10 枚举类型 用关键之iota来定义 const( a=iota b=iota )其中a=0,b=1,定时的时候可以取消重复的io...阅读全文

type 自定义map使用问题

### map是需要make初始化的,然后我自定义了一个map ### m0,m1都可以使用,m2却报错assignment to entry in nil map ### 想请教下m0,m1为什么没报错,内部如何实现初始化操作的? ```go package main import "fmt" type HashMap map[string]bool func main() { m0 := HashMap{} m0["0"] = false fmt.Println(m0) m1 := &HashMap{} (*m1)["1"] = false fmt.Println(m1) m2 := new(HashMap) ...阅读全文

红黑树原理详解及golang实现

目录 红黑树原理详解及golang实现 二叉查找树 性质 红黑树 性质 operation 红黑树的插入 golang实现 类型定义 leftRotate RightRotate Item Interface insert 完整代码 小结 红黑树原理详解及golang实现 在看红黑树原理之前,先看下二叉查找树。 二叉查找树 二叉查找树,又称二叉排序树,二叉搜索树。 性质 它具备一下性质: 1、左子树上的所有节点均小于它的根节点值。 2、右子树上的所有节点的值均大于等于它根节点的值。 3、左佑子树也分别二叉排序树。 4、没有键值相等的节点。 既然叫搜索树,那这种结构的好处当然也就是搜索咯, 假如我们要查找15 1、从root节点开始,15<50,找左子树。 2、15<20,找左子树, 3、15...阅读全文

博文 2019-06-03 23:07:46 ailumiyana

go 结构体

go 结构体 go 结构体 定义 赋值 工厂方法 Go 通过结构体的形式支持用户自定义类型。 结构体是复合类型(composite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。 定义 结构体定义的一般方式如下: type Identifier struct { field1 type1 field2 type2 ... } 赋值 结构体是值类型,因此可以通过 new 来创建。 我们可以使用 . 给字段赋值: structname.fieldname = value 同样的,也可以使用 . 获取结构体字段的值: structname.fieldname 在 G...阅读全文

博文 2016-08-11 20:00:01 fengfengdiandia

golang笔记之方法(一)方法声明

在能够给任意类型定义方法这一点上,Go和很多其他的面向对象的语言不太一样。因此在Go语言里,我们为一些简单的数值、字符串、slice、map来定义一些附加行为很方便。方法可以被声明到任意类型,只要不是一个指针或者一个interface。 package geometry import "math" type Point struct{ X, Y float64 } // 函数 func Distance(p, q Point) float64 { return math.Hypot(q.X-p.X, q.Y-p.Y) } // 方法 func (p Point) Distance(q Point) float64 { return math.Hypot(q.X-p.X, q.Y-p.Y) }...阅读全文

博文 2019-05-06 15:46:52 月下独酌100

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

《Go语言四十二章经》第四章 常量

《Go语言四十二章经》第四章 常量 作者:李骁 ## 4.1 常量以及iota 常量使用关键字 const 定义,用于存储不会改变的数据。 存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。 常量的定义格式:const identifier [type] = value,例如: ```go const Pi = 3.14159 ``` 在 Go 语言中,你可以省略类型说明符 [type],因为编译器可以根据变量(常量)的值来推断其类型。 显式类型定义: const b string = "abc" 隐式类型定义: const b = "abc" 一个没有指定类型的常量被使用时,会根据其使用环境而推断出它所需要具备的类型。换句话说,未定义类型的常量会在必要时刻根据...阅读全文

Golang关键字--type 类型定义

参考Go关键字--type,原文除类型定义外,还介绍了type其它几种使用场合。本文只说类型定义。 type有如下几种用法: 1.定义结构体 2.定义接口 3.类型定义 4.类型别名 5.类型查询 一、类型定义--------节选自《Go语言圣经》第69页 为了说明类型声明,我们将不同温度单位分别定义为不同的类型: // Package tempconv performs Celsius and Fahrenheit temperature computations. package tempconv import "fmt" type Celsius float64 // 摄氏温度 type Fahrenheit float64 // 华氏温度 const ( AbsoluteZeroC ...阅读全文

博文 2019-03-06 17:34:45 懒皮

# 作为程序开发,你所需要知道的编译型与解释型、动态语言与静态语言、强类型语言与弱类型语言的概念以及区别!

在各式各样的开发过程当中,我相信各位开发小伙伴在开发过程中并没有太关注什么是解释性语言和编译性语言,什么又是动态语言和静态语言?什么是强类型语言和弱类型语言呢? 这里小栈君为大家解释一下 file 1. 解释型语言和编译型语言 解释型语言即是源代码先翻译成中间代码,然后由解析器对代码进行解释和执行,程序不需要编译,只有在运行时才翻译成机器语言,所以每执行一次都需要翻译一次。其代表语言常见的有Python,shell,JavaScript等,具有运行效率一般相对比较低,因为依赖解释器,所以具有良好的跨平台属性。 编译型语言是只需要编译一次就可以将源代码编译成机器语言,后面执行时无需再次编译,因此其执行效率很高,常用的代表语言有c 、c++ ,虽然具有很高的执行效率,但比较依赖编译器所以在跨平台...阅读全文

博文 2019-09-30 15:32:50 aside section ._1OhGeD

go语言中type的几种使用

type是go语法里的重要而且常用的关键字,type绝不只是对应于C/C++中的typedef。搞清楚type的使用,就容易理解go语言中的核心概念struct、interface、函数等的使用。以下我用例子代码总结描述,请特别留意代码中的注释。 1、定义结构体 //结构体定义 type person struct { name string //注意后面不能有逗号 age int } func main() { //结构体初始化 p := person{ name: “taozs", //注意后面要加逗号 age: 18, //或者下面的}提到这儿来可以省略逗号 } fmt.Println(p.name) } //初始化字段不一定要全部指定,比如下面也是可以的,name默认取长度为0的空字...阅读全文

博文 2019-05-11 17:32:43 itzhongzi

【翻译】go是面向对象语言吗?

文:http://spf13.com/post/is-go-object-oriented 前言 为了真正理解面向对象的含义,我们需要回顾一下这个概念的起源。第一个面向对象语言-simula问世于19世纪60年代。它引入了对象(object)、类(class)、继承(inheritance)、子类(subclass)、虚方法(virtual method)、协程(coroutine)等概念。然而simula最重要的贡献可能是它引入颠覆性的思想——将数据和逻辑完全分离。 你可能不熟悉simula语言,但你肯定熟悉Java, C++, C# & Smalltalk中的一种,这些语言深受simula的影响,当然这些语言又同时影响着现今几乎所有的高级语言如:Objective C, Python, ...阅读全文

博文 2017-02-09 13:42:46 MrRightLeft_秦磊

OC信号量的基本使用

信号量 dispatch_semaphore_create(long value); value: 信号量的起始值。 传递小于零的值将导致返回NULL。 des: 当两个线程需要协调特定事件的完成时,为值传递零是有用的。 传递大于零的值对于管理有限的资源池非常有用,其中池大小等于该值。 returned: 新创建的信号量,或失败时为NULL。 dispatch_semaphore_wait(dispatch_semaphore_t dsema, dispatch_time_t timeout); desema: 信号量。 在此参数中传递NULL的结果是未定义的。 timeout: 何时超时(请参阅dispatch_time)。 为方便起见,有DISPATCH_TIME_NOW和DISPATC...阅读全文

博文 2019-05-24 17:34:41 Nonsense_biubiu

【译】Golang x-files 里的rsync介绍(并发问题的解决方案)

本文是基于原文并结合作者自己的一些观点混合而成,如有问题欢迎交流。 go语言里使用go关键字就可以轻松搞定并发的问题,它讲究的是“不要通过共享内存来通信,而应该通过通信来共享内存”的原则,在Go里channel是个线程安全的多线程通讯介质。Go本身的这些原语基本上可以解决常见的各种需求了。 但是有些时候在某些情况下,面对并发问题或在错误处理上需要引入更多的协调手段,比如,goroutines会去访问一个非线程安全的资源(如map,slice等)。Go的标准库给我们提供了WaitGroup, Once, 和 Mutex, 如果再野一点还可以用 sync/atomic(原子操作包,偏底层,特殊场景的时候用到),这些工具结合上chanel确实可以解决并发场景下数据竞争的问题,但是这样做多少回让我们...阅读全文

博文 2020-03-08 22:55:45 刘付强

go语言 自定义 error

package main import ( "errors" "fmt" ) type data struct{} func (this *data) Error() string { return "" } func bad() bool { return true } //自定义错误返回函数 func test() error { var p *data = nil if bad() { return p } return nil } //只是返回错误非空 func test1() error { var val error = errors.New("XXX") return val } func main() { var e error = test() if e == nil { ...阅读全文

博文 2015-06-17 23:07:21 xwiwi

golang枚举类型 - iota用法拾遗

在c#、java等高级语言中,经常会用到枚举类型来表示状态等。在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手。 1、枚举类型定义 从百度百科查询解释如下:http://baike.baidu.com/link?url=Lrq57-YIZJ35grERvdg2kh7lfGfxvvLCVsNBMAqjBUOQX3CJUYnJp-9oZ2-rf3JGMqL3e4RbnSRQWs_5nmaI6K 枚举类型在C#或C++,java,VB等一些计算机编程语言中是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中是一种构造数据类型。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。 枚举可以根据Integer、Long、Short或Byte...阅读全文

go学习

package main import ( "errors" "fmt" ) //在go语言中的不可思议的事情返局部变量的指针,一切ok func myfun() *int { var a int = 10 return &a } //用来处理常规错误 func myerror() { err := errors.New("emit macho dwarf:elf header corrupted") if err != nil { fmt.Print(err) } } //还有就是在go中字符串常量可以修改 func main1() { var va = float32(3.2) var myname = "peter" c := []byte(myname) c[0] = 'A' var...阅读全文

博文 2016-05-24 23:00:13 u010165367

Go语言错误处理

package main import ( "fmt" "math" ) //对应错误类型输出 type ErrNegativeSqrt float64 //定义错误类型输出 func (e ErrNegativeSqrt) Error() string { return fmt.Sprintf("cannot Sqrt negative number:%f", float64(e)) } //计算平方根的方法 func Sqrt(f float64) (float64, error) { if f > 0 { return math.Sqrt(f), nil } return 0, ErrNegativeSqrt(f) } func main() { g, h := Sqrt(2) if ...阅读全文

博文 2015-06-17 23:03:18 genispan

golang协程进行同步方法

1、使用chanel func main() { done := make(chan bool) ticker := time.NewTicker(time.Millisecond * 1000) go func() { total := 0 for t := range ticker.C { fmt.Println("Tick at:", t) total += 1 if total > 10 { break } } done <- true }() <-done ticker.Stop() } 2 、使用waigroup func main() { var wg sync.WaitGroup wg.Add(1) ticker := time.NewTicker(time.Millisec...阅读全文

博文 2017-09-19 12:30:02 xiazh

golang手把手实现tcp内网穿透代理(2)

上一篇文章明确了我们需要做的东西,接下来就是实现具体功能 定义数据模型 首先是协议的定义,服务端和客户端需要一套协议来交互 协议的内容包括了,livecheck,以及发起tcp连接建立的请求,和响应的对象 假设内网里面需要暴露到外网的端口是5050,那么客户端需要请求服务端在外网建立一个端口,同时服务端需要知道内网被代理的端口是多少。 是因为当外网端口接收到tcp请求的时候,服务端也是需要下发请求到客户端要求客户端建立到被代理端口的连接的。 那么使用什么文本格式呢?首先考虑使用大家都知道的比较简单的,那就是json格式了。 既然使用的文本格式是json,那么需要了解golang下怎么使用json的序列化和反序列化一个对象。 下面开始结构体的定义: 新建一个model.go文件,用来放客户端和...阅读全文

博文 2019-06-17 00:32:40 iamdev

groupcache 使用示例

一个缓存系统,memcached的golang版本,这里先了解一下使用方式 使用示例 groupcache由于是框架,需要导入在编写业务代码才能运作 缓存方式可自定义:db,文件等 type TblCache struct { Id int Key string Value string } func main() { //定义节点数量以及地址 peers_addrs := []string{"http://127.0.0.1:8001", "http://127.0.0.1:8002"} db, _ := sql.Open("sqlite3", "./console.db") if len(os.Args) != 2 { fmt.Println("\r\n Usage local_addr...阅读全文

博文 2019-02-28 15:34:44 Linrundong

leetcode_447

Golang: 前言:在我看来,这还真不算是道简单题,想想虽然是可以想明白的,但实现起来还是有点复杂的。但是这超过百分之五十的通过率是什么,难道这题只是单方面对我不友好吗? 思路:以i点为起点,找到所有到达i点距离一样的点,然后用数学方法得出排列方式,加入到sum中。 实现:使用一个二维数组记录所有点到点之间的距离,然后从第一个点开始一个for循环,每次循环过程中将这个点到其他所有点的距离值存进一个map中,这样我们就能得到一个以i点到其他点距离为key的map,value是距离i点为key的所有点的数目。然后遍历这个map,凡是value大于2的,即至少有两个点到i点距离一样的,都用数学方法得到排列的数目,然后更新sum,这一套流程完成后,再继续下一个点 代码如下: func number...阅读全文

博文 2020-01-30 21:32:46 淳属虚构

go语言坑之并发访问map

go提供了一种叫map的数据结构,可以翻译成映射,对应于其他语言的字典、哈希表。借助map,可以定义一个键和值,然后可以从map中获取、设置和删除这个值,尤其适合数据查找的场景。但是map的使用有一定的限制,如果是在单个协程中读写map,那么不会存在什么问题,如果是多个协程并发访问一个map,有可能会导致程序退出,并打印下面错误信息: fatal error: concurrent map read and map write 上面的这个错误不是每次都会遇到的,如果并发访问的协程数不大,遇到的可能性就更小了。例如下面的程序: package main func main() { Map := make(map[int]int) for i := 0; i < 10; i++ { go wri...阅读全文

博文 2017-04-24 12:54:10 songleo

对Golang interface的理解

什么是interface interface是一组method(方法)的组合,我们通过interface来定义对象的一组行为。 interface类型 interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。 (如果给鸭子模型定义划水的方法,当我再新建立一个鸟的对象,让它实现划水的方法,这时我可以认为鸟也是鸭子) 一个例子: type Human struct { name string age int phone string } type Student struct { Human //匿名字段Human school string loan float32 } type Employee struct { Human //匿名字段Human...阅读全文

博文 2019-03-05 15:35:00 不会飞的章鱼

39.蛤蟆笔记go语言——接口

39.蛤蟆笔记go语言——接口 在Go中,保留字interface被赋予了多种不同的含义。每个类型都有接口,意味着对那个类型定义了方法集合。 接口定义为一个方法的集合。方法包含实际的代码。换句话说,一个接口就是定义,而方法就是实现。因此,接收者不能定义为接口类型,这样做的话会引起invalid receiver type ... 的编译器错误。 根据规则,单方法接口命名为方法名加上-er后缀:Reader,Writer,Formatter等。 有一堆这样的命名,高效的反映了它们职责和包含的函数名。 Read,Write,Close,Flush,String等等有着规范的声明和含义。为了避免混淆,除非有类似的声明和含义,否则不要让方法与这些重名。相反的,如果类型实现了与众所周知的类型相同的方法...阅读全文

博文 2016-07-09 12:00:12 notbaron

又特么一编程语言开源上线了,真的是学不动了

就在 6 月 24 号的时候,一种开源的名为 V 的新的静态类型编程语言,正式开源了,并发布了首个可用版本,当前开源的版本是 0.0.12 。一经开源,就在 Github 上引起了大量的关注,star 数也是嗖嗖上升。那么什么是 V 语言呢?相信大家对 Golang ,也就是 go 语言都有所耳闻,甚至熟悉吧?而 V 语言的名字比 Go 语言还简洁,少一个字母叫:V ,全名叫:vlang 。它被描述为一种简单,快速,编译的语言,用于创建可维护的软件。它的创造者 Alex Medvednikov 表示它与 Go 非常相似,并受到 Oberon,Rust 和 Swift 的启发。其提供了方便、快捷、安全的编程语言和工具包,还能够很好地服务于区块链技术。V 语言多牛逼?据说 V 语言将来每秒可以编...阅读全文

golang的func的一些笔记

先看一看func 的基本构成元素 func (p myType ) funcName ( a, b int , c string ) ( r , s int ) { return } 其中: 关键字———func // 这个是定义函数的关键字 函数拥有者—(p myType) // 这个是此函数的拥有者,下面解释(此项可省略) 方法名———funcName // 这个是定义函数的名字 入参———— a,b int,b string // 这个是定义函数的入参 返回值——— r,s int // 这个是定义函数的返回值,golang可以返回多个值 函数体——— { } 重点说说这个函数拥有者(p myType),这个是相较于C/C++比较特殊的地方。 为特定类型定义函数,即为类型对象定义方法 ...阅读全文