-
[Go] 写文件和判断文件是否存在
所属栏目:[大数据] 日期:2021-05-21 热度:177
OpenFile得到一个File,然后调用它的Write,参数是字节切片 Stat看看返回错误没有 package mainimport ( " fmt " os " )func main() { file := 1.txt f,_ : = os.OpenFile( file ,os.O_RDWR|os.O_CREATE, 0766 ) f.Write([] byte ( 你好 )) f.Close() // 判[详细]
-
[Go] gocron源码阅读-flag包实现命令行参数获取
所属栏目:[大数据] 日期:2021-05-21 热度:63
调用flag包可以方便的获取到命令行中传递的参数,比如可以实现类似Nginx执行程序获取命令行参数执行不同操作的目标 @H_301_2@ package mainimport ( " flag " fmt os " )func main() { var h bool var c,s string flag.BoolVar( h, h " , false ,1)">帮助信[详细]
-
[Go] 并发imap收信
所属栏目:[大数据] 日期:2021-05-21 热度:133
并发数太大会直接死,这里有时候需要多试几次 package mainimport ( " flag " fmt io/IoUtil log math os sync " github.com/emersion/go-imap github.com/emersion/go-imap/client " )var ( server,email,password string workernum int imapClient * client[详细]
-
[Go] tcp服务下的数据传递
所属栏目:[大数据] 日期:2021-05-21 热度:176
go中实现一个tcp服务,首先是要监听端口,接收请求,这个地方会被阻塞等待 当客户端连接过来,会开一个grountine去处理这条客户端的tcp连接,因此可以同时处理多条连接 在连接中,要循环的去读取客户端传递过来的数据,这样就可以不停的处理客户端的请求数据[详细]
-
[Go] gocron源码阅读-go语言中的切片和类型综合
所属栏目:[大数据] 日期:2021-05-21 热度:109
在gocron.go文件的main函数中,有下面这一句,从这句代码中可以学习到切片和类型的综合运用 cliApp.Flags = append(cliApp.Flags,[]cli.Flag{}...) ? 首先在go语言中定义一个类型需要使用type 名字 struct{},还可以给这个类型定义成员方法 type Taoshihan s[详细]
-
[Go] 利用channel形成管道沟通循环内外
所属栏目:[大数据] 日期:2021-05-21 热度:62
这个要解决的问题是,比如如果有一个大循环,取自一个大的文件,要进行逻辑处理,那么这个逻辑的代码要放在循环每一行的循环体里面,这样有可能会出现一个for循环的逻辑嵌套,一层又一层,类似俄罗斯套娃.如果放在外面那么就需要把大循环的每一行数据存到一个数组或[详细]
-
[Go] gocron源码阅读-go语言中的切片接口和类型综合
所属栏目:[大数据] 日期:2021-05-21 热度:179
// getCommands func getCommands() []cli.Command { command : = cli.Command{ Name: " web " ,Usage: run web server host 0.0.0.0 bind host port,p bind port env,e prod runtime environment,dev|test|prod 上面那些代码非常不容易理解,我们需要把它拆[详细]
-
[Go] 测试go连接imap的tcp长连接
所属栏目:[大数据] 日期:2021-05-21 热度:146
连接上imap服务后,什么都不操作,我测试大约5分钟会被服务端断掉,测试代码如下 imapClient,_ := client.Dial( " imap.sina.net:143 " ) for { time .Sleep( time .Second * 1 ) } 为了保持住这条连接,每隔10秒列取一下邮件夹列表,这样就可以一直保持住连[详细]
-
[Go] 分页计算页码的主要逻辑
所属栏目:[大数据] 日期:2021-05-21 热度:132
当使用imap进行读取邮件体的时候,有个函数可以根据传入的开始和结束索引来一次读取多条邮件内容 主要逻辑类似这样,从1开始,1,10? ?11,20? ? ?21,30 或者 1,31? ?32,63 这样的分批处理 现在就是使用数组切片来模拟这个过程,总数据12条,每次10个,要分两次,开始[详细]
-
[Go] golang的MPG调度模型
所属栏目:[大数据] 日期:2021-05-21 热度:190
MPG模式运行状态1 1)当前程序有三个M,如果三个M都在一个cpu运行,就是并发,如果在不同的cpu运行就是并行 2)M1,M2,M3正在执行一个G,M1的协程队列有三个,M2的协程队列有三个,M3的协程队列有两个 3)从上图可以看到:Go的协程是轻量级的线程,是逻辑态的,[详细]
-
[Go] golang的接口合约
所属栏目:[大数据] 日期:2021-05-21 热度:116
接口类型 1.接口类型具体描述了一系列方法的集合,实现这些方法的具体类型是这个接口类型的实例 2.一个类型如果拥有一个接口需要的所有方法,那么这个类型就实现了这个接口 package mainimport ("fmt")//定义一个接口类型Persontype Person interface {//描述[详细]
-
[Go] golang结构体成员与函数类型
所属栏目:[大数据] 日期:2021-05-21 热度:135
package mainimport ("fmt")//定义一个类型type tsh struct {//定义成员,类型是func() stringtest func() string}//定义一个函数,获取tsh类型func New(fn func() string) *tsh {return tsh{test: fn,}}func cre() string {return fmt.Sprintf("%s,来了","tsh[详细]
-
[Go] golang连接查询mysql
所属栏目:[大数据] 日期:2021-05-21 热度:84
package mainimport ("database/sql"_ "github.com/go-sql-driver/MysqL""log")func main() {//连接数据库查询db,err := sql.Open("MysqL","root:xxx@tcp(xxx:3306)/my_test")if err != nil {log.Fatal(err.Error())}//最终关闭数据库defer db.Close()msql :[详细]
-
[Go] vscode配置Go环境
所属栏目:[大数据] 日期:2021-05-21 热度:103
首先要先把环境变量配置好,配置好环境变量打开go文件的时候,会自动提示需要安装的扩展 在/root/.profile和/home/当前用户/.profile都加上 export GOPATH=/var/www/html/go-project/lib export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin:$GOPATH[详细]
-
[Go] golang缓冲通道实现资源池
所属栏目:[大数据] 日期:2021-05-21 热度:188
go的pool资源池: 1.当有多个并发请求的时候,比如需要查询数据库 2.先创建一个2个容量的数据库连接资源池 3.当一个请求过来的时候,去资源池里请求连接资源,肯定是空的就创建一个连接,执行查询,结束后放入了资源池里 4.当第二个请求过来的时候,也是去资源池请[详细]
-
[Go] gocron源码阅读-go语言的结构体
所属栏目:[大数据] 日期:2021-05-21 热度:140
结构体类型 type 名字 struct{},下面这段是github.com/urfave/cli包里的代码,声明了一个App的结构体类型 type App struct { // The name of the program. Defaults to path.Base(os.Args[0]) Name string Full name of command for help,defaults to Name He[详细]
-
[Go] golang使用github里的imap类库
所属栏目:[大数据] 日期:2021-05-21 热度:163
1.在windows系统下,需要首先定义两个环境变量GOPATH和GOROOT,GOPATH是第三方类库的代码目录,GOROOT是go的安装目录 ? ? 2.按照我的定义,进入这个目录D:golangcodesrcgithub.comemersion,使用git 更新代码 git clone https://github.com/emersion/go-imap[详细]
-
[Go] golang缓冲通道实现管理一组goroutine工作
所属栏目:[大数据] 日期:2021-05-21 热度:57
通道 1.当一个资源需要在goroutine之间共享时,通道在goroutine之间架起了一个管道 2.无缓冲通道和有缓冲通道,make的第二个参数就是缓冲区大小 3.无缓冲通道需要发送和接收都准备好,否则先执行的goroutine会阻塞等待 4.有缓冲的通道,在缓冲区没满之前,发送和[详细]
-
[Go] golang的range循环遍历通道
所属栏目:[大数据] 日期:2021-05-21 热度:200
range循环会无限在channels上面迭代 package mainimport ("fmt""time")func main() {//创建一个通道ch := make(chan int)//开启一个goroutinego func() {//无限循环for {//往通道里发送数据ch - 1//睡眠一秒time.Sleep(time.Second)}}()//无限循环从通道中读[详细]
-
[日常] gocron源码阅读-go语言的变量
所属栏目:[大数据] 日期:2021-05-21 热度:138
变量的声明形式是这样的 var 变量名字 类型 = 表达式 var ( AppVersion = "1.5" BuildDate,GitCommit string ) 类型可以被省略,这时候会通过表达式推导变量的类型,AppVersion 应该是string类型 表达式可以被省略,这时候会根据零值初始化机制,初始化一个值,Bu[详细]
-
[Go] golang连接redis测试
所属栏目:[大数据] 日期:2021-05-21 热度:189
go-redis的使用 1.下载代码到GOPATH环境变量指定的目录 比如我的是进入目录D:golangcodesrcgithub.comgo-redis,执行git clone https://github.com/go-redis/redis.git 2.redis设置过期时间的命令是: setex name 10 taoshihan ;设置10秒过期 ? package m[详细]
-
[Go] golang类型断言
所属栏目:[大数据] 日期:2021-05-21 热度:195
类型断言有点像向下转型,接口类型转到具体的实现实例类型上 类型断言是一个使用在接口值上的操作。语法上它看起来像x.(T)被称为断言类型,这里x表示一个接口的类型和T表示一个类型 ? package mainimport ("fmt")//定义一个接口type Person interface {Say()}[详细]
-
[Go] golang的用途和windows搭建环境
所属栏目:[大数据] 日期:2021-05-21 热度:115
Golang核心编程:区块链研发工程师(分布式账本技术,互联网数据库技术,特点是去中心化)Go服务器端 /游戏软件工程师(现在主流是C C++ ,处理日志,数据打包,文件处理,美团后台流量支撑,处理大并发;游戏后台数据通道)Golang分布式 / 云计算软件工程师(盛大云,cdn,[详细]
-
[Go] golang设置运行的cpu数
所属栏目:[大数据] 日期:2021-05-21 热度:113
package mainimport("fmt""runtime")func main() {cpuNum:=runtime.Numcpu()fmt.Println("cpuNum=",cpuNum)runtime.GOMAXPROCS(cpuNum)}[详细]
-
[Go] golang原子函数实现goroutine同步
所属栏目:[大数据] 日期:2021-05-21 热度:165
启动了两个goroutine,并完成一些工作。在各自循环的每次迭代之后,在goroutine 会使用LoadInt64 来检查shutdown 变量的值。这个函数会安全地返回 shutdown 变量的一个副本。如果这个副本的值为1,goroutine 就会跳出循环并终止。 ? package mainimport ("fm[详细]