-
Go实战--Design Patterns in Golang 之单利模式(Singleton)
所属栏目:[大数据] 日期:2020-12-16 热度:103
小插曲: 一猎头拉了个几百人的微信群,主要是沈阳、大连从事IT工作的人,以下是某几个时段的聊天截图: 回不去的东北……很多同事都说如果我选择回东北,肯定后悔,用不了多久还会回北京。 生命不止,继续 go go go !!! golang的基础知识介绍了很多很多了,[详细]
-
golang sizeof 占用空间大小
所属栏目:[大数据] 日期:2020-12-16 热度:127
C语言中,可以使用sizeof()计算变量或类型占用的内存大[详细]
-
golang 多个routine之间的同步
所属栏目:[大数据] 日期:2020-12-16 热度:193
本文以一个例子的方式介绍channel在同步中的使用。 下面的例子中,主task首先阻塞,直到两个task完成后,再继续执行。 package main import ( "log" "time" ) func main() { ch := make ( chan int ) go task1(ch) go task2(ch) for i: =0 ; i 2 ; i++ { v :[详细]
-
Golang 实现计算器
所属栏目:[大数据] 日期:2020-12-16 热度:124
只进行基本的四则运算,利用栈结构和后缀表达式来计算数学表达式的值。 本文代码:GitHub 原文:wuyin.io 转载请注明来源。 运行效果: 问题 如果只能进行两个值的加减乘除,如何编程计算一个数学表达式的值? 比如计算 1+2*3+(4*5+6)*7 ,我们知道优先级顺[详细]
-
golang 网络框架之 thrift
所属栏目:[大数据] 日期:2020-12-16 热度:108
thrift 最初是 facebook 开发使用的 rpc 通信框架,后来贡献给了 apache 基金会,出来得比较早,几乎支持所有的后端语言,使用非常广泛,是不可不知的一个网络框架 和 grpc 一样,需要先定义通信协议,然后实现自己业务逻辑,下面还是通过一个简单示例(之前[详细]
-
goLang 之 type Method Value 和Method Expressions
所属栏目:[大数据] 日期:2020-12-16 热度:178
在使用 goLang 时,经常遇到 Method Value 和 Method Expressions 的问题,简单记录一下两者的使用区别 goLang 的 type 类型方法定义如下: func (p myType) funcName(q type) (r,s type){return 0,0) //类似这样 本质上这就是一种语法糖,方法调用如下: ins[详细]
-
go语言中的slice
所属栏目:[大数据] 日期:2020-12-16 热度:109
package main;import "fmt"func main() {//slice本身不是数组,指向底层的数组//作为变长数组的替换方案//slice是引用类型//声明一个slice,这里不需要指定长度var a []int;//创建一个数组var b = [10]int{1,2,3,4,5,6,7,8,9,10};//通过数组来创建slicec :=[详细]
-
使用go语言的list实现一个简单的LRU缓存
所属栏目:[大数据] 日期:2020-12-16 热度:140
package main;import ("container/list""errors""sync""fmt""encoding/json")//LRU(Least recently used)最近最少使用,算法根据数据的历史访问记录来进行淘汰数据//核心思想是"如果数据最近被访问过,那么将来被访问的几率也更高"//常见的实现方式是用一个[详细]
-
go语言io和ioutil包的学习和使用
所属栏目:[大数据] 日期:2020-12-16 热度:154
io包 package main;import ("errors""fmt""io")//io包中定义了非常多的interface//只要实现了接口中的方法//那么io包中的导出方法就可以传入我们自定义的对象然后进行处理//像什么文件数据,网络数据,数据库数据都可以统一操作接口type MyReWr struct {//保[详细]
-
golang语言中os/user包的学习与使用
所属栏目:[大数据] 日期:2020-12-16 热度:86
package main;import ("os/user""fmt")func main() {//返回当前用户的结构u,_ := user.Current();fmt.Println(u.Name);//用户主目录fmt.Println(u.HomeDir);//用户名fmt.Println(u.Username);//组IDfmt.Println(u.Gid);//用户IDfmt.Println(u.Uid);//根据用[详细]
-
golang语言中os/exec包的学习与使用
所属栏目:[大数据] 日期:2020-12-16 热度:122
package main;import ("os/exec""fmt""io/ioutil""bytes")func main() {//在环境变量path中查找可执行二进制文件//返回完整路径或者相对于当前目录的一个相对路径file,_ := exec.LookPath("go");fmt.Println(file);//返回一个cmdcmd := exec.Command("go","v[详细]
-
go语言log包的学习(log,Logger)
所属栏目:[大数据] 日期:2020-12-16 热度:116
package main;import ("log""os""time""fmt")func main() {//创建输出日志文件logFile,err := os.Create("./" + time.Now().Format("20060102") + ".txt");if err != nil {fmt.Println(err);}//创建一个Logger//参数1:日志写入目的地//参数2:每条日志的前[详细]
-
go语言path包和filepath包的学习与使用
所属栏目:[大数据] 日期:2020-12-16 热度:160
path包的使用 package main;import ("fmt""path")//go语言path包的学习func main() {//返回路径的最后一个元素fmt.Println(path.Base("./a/b/c"));//如果路径为空字符串,返回.fmt.Println(path.Base(""));//如果路径只有斜线,返回/fmt.Println(path.Base("[详细]
-
golang sync.Pool包的使用和一些注意地方
所属栏目:[大数据] 日期:2020-12-16 热度:175
package main;import ("sync""fmt""net""runtime")//sync.Pool是一个可以存或取的临时对象集合//sync.Pool可以安全被多个线程同时使用,保证线程安全//注意、注意、注意,sync.Pool中保存的任何项都可能随时不做通知的释放掉,所以不适合用于像socket长连接[详细]
-
golang 实现延迟消息原理与方法
所属栏目:[大数据] 日期:2020-12-16 热度:179
实现延迟消息具体思路我是看的下面这篇文章 https://mp.weixin.qq.com/s/eDMV25YqCPYjxQG-dvqSqQ 实现延迟消息最主要的两个结构: 环形队列:通过golang中的数组实现,分成3600个slot。 任务集合:通过map[key]*Task,每个slot一个map,map的值就是我们要执[详细]
-
golang 创建一个简单的广播echo服务器
所属栏目:[大数据] 日期:2020-12-16 热度:124
package main;import ("net""fmt""bufio")//里面的代码部分参考cmu440课程//https://github.com/cmu440/p0//广播服务器接口type MultiEchoServer interface {//开始Start(port int) error;//停止Close();//当前客户端连接数Count() int;}//广播服务器type mu[详细]
-
golang语言中os/signal包的学习与使用
所属栏目:[大数据] 日期:2020-12-16 热度:76
package main;import ("os""os/signal""fmt")//signal包中提供了两个函数//Notifyf()用于监听信号//Stop()用于停止监听func main() {ch := make(chan os.Signal);//notify用于监听信号//参数1表示接收信号的channel//参数2及后面的表示要监听的信号//os.Inte[详细]
-
go语言中的文件创建,写入,读取,删除
所属栏目:[大数据] 日期:2020-12-16 热度:82
package main;import ("os""fmt""strconv")func main() {//打开文件,返回文件指针file,error := os.Open("./1.txt");if error != nil {fmt.Println(error);}fmt.Println(file);file.Close();//以读写方式打开文件,如果不存在,则创建file2,error := os.Ope[详细]
-
go语言time包的学习(Time,Location,Duration,Timer,Ticker)
所属栏目:[大数据] 日期:2020-12-16 热度:91
package main;import ("time""fmt")func main() {//time.Time代表一个纳秒精度的时间点var t time.Time;//返回当前时间t = time.Now();fmt.Printf("%vn",t);//反回所在时区fmt.Printf("%vn",t.Location());//返回UTC时间和UTC时区fmt.Printf("%v %vn",t.U[详细]
-
go语言处理文件上传和多个文件上传
所属栏目:[大数据] 日期:2020-12-16 热度:84
uploadOne.html代码如下: !doctype htmlhtml lang="en"head meta charset="UTF-8" titleDocument/title/headbody form action="http://127.0.0.1:9090/uploadOne" method="post" enctype="multipart/form-data" 文件:input type="file" name="file" value=[详细]
-
go语言中常用的文件和文件夹操作函数
所属栏目:[大数据] 日期:2020-12-16 热度:114
package main;import ("os""log""time""fmt")//一些常用的文件操作函数func main() {//创建目录//perm权限设置,os.ModePerm为0777err := os.Mkdir("./tmp",os.ModePerm);if err != nil {log.Fatal(err);}//创建多级目录err2 := os.MkdirAll("./a/b/c",os.Mo[详细]
-
go语言net包rpc远程调用的使用
所属栏目:[大数据] 日期:2020-12-16 热度:67
一、基于http的RPC 服务端: package main;import ("net/rpc""net/http""log")//go对RPC的支持,支持三个级别:TCP、HTTP、JSONRPC//go的RPC只支持GO开发的服务器与客户端之间的交互,因为采用了gob编码//注意字段必须是导出type Params struct {Width,Heigh[详细]
-
go语言中的反射reflect
所属栏目:[大数据] 日期:2020-12-16 热度:66
package main;import ("fmt""reflect")//反射refection//反射使用TypeOf和ValueOf函数从接口中获取目标对象信息//反射会将匿名字段作为独立字段type A struct {id int;name string;age int;}type B struct {Aheight int;}type C struct {Id int;Name string;[详细]
-
golang 通过fsnotify监控文件,并通过文件变化重启程序
所属栏目:[大数据] 日期:2020-12-16 热度:150
一、下载我们需要的包 go get github.com/fsnotify/fsnotify 二、使用fsnotify监控文件 package main;import ("github.com/fsnotify/fsnotify""log""fmt")func main() {//创建一个监控对象watch,err := fsnotify.NewWatcher();if err != nil {log.Fatal(err)[详细]
-
golang语言中bytes包的常用函数,Reader和Buffer的使用
所属栏目:[大数据] 日期:2020-12-16 热度:177
bytes中常用函数的使用: package main;import ("bytes""fmt""unicode")//bytes包中实现了大量对[]byte操作的函数和两个最主要的Reader和Buffer两个结构func main() {str := "aBcD";//转为小写fmt.Println(string(bytes.ToLower([]byte(str))));//转为大写fm[详细]
