golang

golang(10)interface应用和复习

房东的猫 提交于 2019-12-01 16:26:41
原文链接 http://www.limerence2017.com/2019/10/11/golang15/ interface 意义? golang 为什么要创造interface这种机制呢?我个人认为最主要的就是做约束,定义一种规范,大家可以按照同一种规范实现各自的功能,从而实现多态。 同时当interface做函数形参,可以很好地限制传入参数,并且根据不同的实参调用达到多态的效果。多态的意思就是多种多样的功能,比如我们定义了一 个接口 1234 type IOInter interface{ write()int read()int} 定义了一个IOInter的接口,只要别人实现了write和read方法,都可以转化为这个接口。至于具体怎么读,读什么,网络IO还是文件IO取决于具体的实现, 这就形成了多样化的功能,从而实现多态。同时IOInter做函数的形参, 123 func WriteFunc(io IOInter){ io.Write()} 还达到了安全限制的功能。比如没有实现读写功能的类实例无法传给WriteFunc,WriteFunc内部调用io的Write函数会根据实参具体的实现完成特定的读写。 我们通过一个小例子实战下接口做形参的意义。golang中sort包提供了几个排序api,我们先实现一个int类型slice排序功能。 123 arrayint := [

golang随机数及pipe

[亡魂溺海] 提交于 2019-12-01 16:05:17
var pipe1 = make(chan int, 1000) func piTest(){ for{ data := <- pipe1 fmt.Printf("get data:%v\n", data) } } func putData(){ for { source := rand.NewSource(time.Now().UnixNano()) dataR := rand.New(source).Intn(100) time.Sleep(time.Second *1 ) pipe1 <- dataR } } func main(){ go piTest() go putData() time.Sleep(time.Minute* 1) } 来源: https://www.cnblogs.com/lajiao/p/11691878.html

Golang environment setting

前提是你 提交于 2019-12-01 15:53:01
1 Install visual studio code https://code.visualstudio.com Go with defaults for all installation step. 2 Install Go. Add Make sure you had set the environment variable.GO binary is available in PATH , and GOPATH Detail see https://rominirani.com/setup-go-development-environment-with-visual-studio-code-7ea5d643a51a 来源: https://www.cnblogs.com/developer1980/p/11691454.html

golang glog

我的梦境 提交于 2019-12-01 15:28:02
原文链接:https://blog.csdn.net/u010857876/article/details/79094942 Flush log 产生后,会暂存在内存的buffer中。只有显示的调用 glog.Flush(), 数据才会真正被写入文件。glog package 的 init 函数中启动了一个 go routine 用来周期性的调用 glog.Flush() 来保证数据被写入文件, 默认的 Flush 周期为30 秒。 当程序运行至 glog.Fatal() 时, glog package 中保证了在退出前程序前会将所有缓存中的log写入文件。但是对于 Info, Warning 以及 Error, 如果程序正常退出,那么在程序退出前 30 秒的 log 就会丢失。defer 可以被用来防止这种情况的发生。 package main import "github.com/golang/glog" func main() { defer glog.Flush() glog.Info("Testing glog.") } 参考文献 https://godoc.org/github.com/golang/glog 来源: https://www.cnblogs.com/lajiao/p/11690681.html

支持GoLang,类似 Source Insight的vim编辑器搭建

狂风中的少年 提交于 2019-12-01 15:24:39
,曾经配置过一个类似source insight的vim编辑器,(http://blog.csdn.net/linuxandroidwince/article/details/74202412)默认对C,C++语言是支持的,只是不支持golang,下面介绍下如果打造一个vim-go的编辑器,类似source insight,自动补齐等等, 我使用的是ubuntu16.04 LTS 32bits。 ##下载安装GoLang 写博时,官方稳定版本是1.8,下载的是linux 32bits的。 https://golang.org/dl/ 下载后直接解压到/usr/local/go下面即可,解压到其他path也可以,没有特别指定,只是习惯而已,比如解压到$HOME/go。 ##配置环境变量 可以将下面内容复制到/etc/profile,也可以复制到~/.profile # go path export GOROOT=/usr/local/go export GOARCH=386 export GOOS=linux export GOPATH=/home/jack/go export GOBIN=$GOPATH/bin export PATH=$PATH:$GOROOT/bin:$GOBIN 下面安装的一些go工具,如果配置了GOBIN这个变量,都会安装到这个目录下,如果没有配置这个变量

GoCN每日新闻(2019-10-16)

馋奶兔 提交于 2019-12-01 15:18:37
GoCN每日新闻(2019-10-16) GoCN每日新闻(2019-10-16) 1. 持续的性能分析与优化 https://medium.com/@tvii/continuous-profiling-and-go-6c0ab4d2504b 2. 理解Go 中的 defer https://www.digitalocean.com/community/tutorials/understanding-defer-in-go 3. Go 语言反射的实现原理 https://draveness.me/golang/basic/golang-reflect.html 4. 如何构建一个云原生框架 https://medium.com/@yannick.b/how-should-be-built-the-ideal-cloud-native-framework-part-2-2fcfa38c9de7 5. pigo - 人脸识别库 https://www.reddit.com/r/golang/comments/di3n1k/the_pigo_face_detection_library_now_is_capable/ 编辑: yulibaozi 订阅新闻: http://tinyletter.com/gocn 来源: https://www.cnblogs.com/landv/p

golang: 详解interface和nil

ぃ、小莉子 提交于 2019-12-01 14:55:22
golang的nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。nil是预先说明的标识符,也即通常意义上的关键字。在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic。对此官方有明确的说明: http://pkg.golang.org/pkg/builtin/#Type golang中的interface类似于java的interface、PHP的interface或C++的纯虚基类。接口就是一个协议,规定了一组成员。这个没什么好说的,本文不打算对宏观上的接口概念和基于接口的范式编程做剖析。golang语言的接口有其独到之处:只要类型T的公开方法完全满足接口I的要求,就可以把类型T的对象用在需要接口I的地方。这种做法的学名叫做 Structural Typing ,有人也把它看作是一种静态的Duck Typing。所谓类型T的公开方法完全满足接口I的要求,也即是类型T实现了接口I所规定的一组成员。 在底层,interface作为两个成员来实现,一个类型和一个值。对此官方也有文档说明: http://golang.org/doc/go_faq.html#nil_error ,如果您不习惯看英文,这里有一篇柴大的翻译:

golang利用reflect包实现struct与params自动绑定

主宰稳场 提交于 2019-12-01 14:55:08
前言 因为 golang 静态强类型语言特性以及没有很好的泛型支持导致在用 go 写 web 服务的时候,总会因为要对 http params 的解析和类型转换上要花很多时间,并且这会让代码显得很冗余,那有什么办法可以解决这一苦痛呢?答案当然是有的,这里我讲会到如何用 reflect 包写一个工具类实现 model 层 struct 与 http params 的自动映射绑定。 具体实现其实很简单,主要用到的就是通过 reflect.TypeOf() 获取字段的类型(包括字段名,类型,Tag描述等相关信息),以及 reflect.ValueOf() 来获取字段的值类型用于复写从params获取到的数据, 同时还要注意不同类型数值在 Set 时的差别。 用料 首先我们设计一个struct来储存每个反射字段的属性,就比如以下这样。 注意:取决于 golang 对于反射模型实现上的差异,这种操作在 go 里面其实并不是那么的高效,推荐在第一次反射后 cache 一份结果到内存,以便下次用的时候直接获取。 type field struct { name string def bool defValue reflect.Value required bool } 通过 range reflect.Type 获取 struct field 信息并填充到 []*field

golang数据

此生再无相见时 提交于 2019-12-01 13:54:56
整数类型   Golang各整数类型分:有符号和无符号,int uint 的大小和系统有关。   Golang查看一个变量的数据类型: package main import "fmt" func main() { var n1 = 100 fmt.Printf("n1的类型 %T", n1) } 浮点类型 浮点数 = 符号位 + 指数位 + 尾数位 尾数部分可能丢失,造成精度损失 func main() { var num3 float32 = -123.0000901 var num4 float64 = -123.0000901 fmt.Println("num3=", num3, "num4=", num4) } float64比float32精度高 字符类型 golang中没有专门的字符类型,如果要存储单个字符(字母),一般使用byte来保存。 字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。也就是说对于传统的字符由字符组成的,而Go的字符串不同,它是由字节组成的。 来源: https://www.cnblogs.com/xiangxiaolin/p/11689470.html

golang多核陷阱一例

三世轮回 提交于 2019-12-01 09:51:11
同时发布在 独立博客 。 以前一直以为,在Golang中,针对高并发的情况,采用多核处理一定效果最优,但是项目实践证明事实不是这样的。 在 Sniper 项目中(一个结合了 ab 和 siege 优点的http负载测试工具),原来一直设置cup使用数为系统cpu总数: runtime.GOMAXPROCS(runtime.NumCPU()) 在与ab的性能比较中一直有较大差距,GET请求局域网的一个10k大小的文件: 以下是ab的性能,并发100,总请求100k,执行时间16.082秒 Concurrency Level: 100 Time taken for tests: 16.082 seconds Complete requests: 100000 Failed requests: 0 Write errors: 0 Total transferred: 1035500000 bytes HTML transferred: 1024000000 bytes Requests per second: 6218.04 [#/sec] (mean) Time per request: 16.082 [ms] (mean) Time per request: 0.161 [ms] (mean, across all concurrent requests) Transfer rate