golang
robertkun
deep thinking
展开
-
go 协程返回值处理
go 协程返回值处理package mainimport "fmt"import "sync"var ch = make(chan int)func do(lock *sync.Mutex, ct *int) { lock.Lock() *ct++ lock.Unlock() ch <- 1}func main() { fmt....原创 2019-12-23 18:03:17 · 7776 阅读 · 0 评论 -
golang-goroutine的调度原理
首先简单的介绍一下进程,线程和协程三者的关系 用户线程和内核线程之间的调用关系 goroutine的运行机制 goroutine的三个重要结构 goroutine的调度原理 转自:https://www.zhihu.com/question/20862617转载 2018-01-18 09:15:02 · 531 阅读 · 0 评论 -
golang实现一个正经的接口
使用gin和gjson库打造的一个轻量级的http接口.package mainimport ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "github.com/gin-gonic/gin" "net/http" "strings" "github.com/t原创 2018-01-17 21:51:26 · 543 阅读 · 0 评论 -
golang toml解析
TOML 的全称是 Tom’s Obvious, Minimal Language,因为它的作者是 GitHub 联合创始人 Tom Preston-Werner。TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。github: https://github.com/BurntSushi/toml 安装:go get gith原创 2018-01-04 00:18:45 · 10924 阅读 · 2 评论 -
golang的defer,recover,panic用法
示例如下:package mainimport ( "fmt")func defer_call() { defer func() { fmt.Println("before") }() defer func() { if p := recover(); p != nil { fmt.Prin原创 2018-01-29 21:15:43 · 1872 阅读 · 0 评论 -
golang源码剖析-Goroutine源码分析-1
转自:[https://studygolang.com/articles/7734] 本文针对的go版本是截止2016年6月29日最新的Go1.7。一、Golang简介1.1概述Golang语言是Google公司开发的新一代编程语言,简称Go语言,Go 是有表达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核和网络应用,而新奇的类型系统允许构建有弹性的模块...转载 2018-04-22 07:23:56 · 3838 阅读 · 0 评论 -
golang源码剖析-Goroutine与调度器-2
转自: 原文地址 此文文风优雅, 通俗易懂, 让人理解起来比较容易, 很是不错. goroutine与调度器我们都知道Go语言是原生支持语言级并发的,这个并发的最小逻辑单元就是goroutine。goroutine就是Go语言提供的一种用户态线程,当然这种用户态线程是跑在内核级线程之上的。当我们创建了很多的goroutine,并且它们都是跑在同一个内核线程之上的时候,就需要一...转载 2018-04-22 17:00:30 · 1694 阅读 · 0 评论 -
golang源码剖析-内存管理-2
接上篇:[ https://blog.csdn.net/robertkun/article/details/80140594 ] 在真正进入内存分配过程之前,还需要了解一下整个内存分配器是如何创建的以及初始化成什么样子。完成内存分配器创建初始化的函数是runtime·mallocinit,看一下简化的源码:voidruntime·mallocinit(void){ // 创建mh...转载 2018-05-02 23:07:42 · 532 阅读 · 0 评论 -
golang源码剖析-网络库的基础实现-1
转自: http://skoo.me/go/2014/04/21/go-net-core 偶遇大神写的文章, 分析的很透彻, 转过来学习了.Go语言的出现,让我见到了一门语言把网络编程这件事情给做“正确”了,当然,除了Go语言以外,还有很多语言也把这件事情做”正确”了。我一直坚持着这样的理念——要做”正确”的事情,而不是”高性能”的事情;很多时候,我们在做系统设计、技术选型的时候,都被“高...转载 2018-04-25 22:57:32 · 1043 阅读 · 0 评论 -
golang源码剖析-网络库的基础实现-2
转自: http://skoo.me/go/2014/04/21/go-net-core 接上一篇: https://blog.csdn.net/robertkun/article/details/80087304想要弄明白网络库的底层实现,貌似只要弄清楚echo服务器中的Listen、Accept、Read、Write四个函数的底层实现关系就可以了。本文将采用自底向上的方式来介绍,也就是从...转载 2018-04-26 23:17:27 · 1385 阅读 · 0 评论 -
golang源码剖析-网络库的基础实现-3
转自: http://skoo.me/go/2014/04/21/go-net-core 接上一篇: https://blog.csdn.net/robertkun/article/details/80101591runtime中的epoll事件驱动抽象层其实在进入net库后,又被封装了一次,这一次封装从代码上看主要是为了方便在纯Go语言环境进行操作,net库中的这次封装实现在poll/fd...转载 2018-04-27 23:04:45 · 990 阅读 · 0 评论 -
golang源码剖析-内存管理-1
转自[http://skoo.me/go/2013/10/13/go-memory-manage-system-alloc ] 这个拿来主义虽然不太好, 但总比不拿强.. 吃水不忘挖井人,感谢原文作者分享.内存布局结构图 我把整个核心代码的逻辑给抽象绘制出了这个内存布局图,它基本展示了Go语言内存分配器的整体结构以及部分细节(这结构图应该同样适用于tcmalloc)。从此结构图来看,...转载 2018-04-29 00:50:20 · 2405 阅读 · 0 评论 -
golang文件读取-按指定BUFF大小读取
golang文件读取-按指定BUFF大小读取a.txt文件内容: ABCDEFGHI HELLO GOLANGpackage mainimport ( "fmt" "os" "io")func main() { fileName := "C:\\Robert\\日志分析\\tools_go\\vdn_sqlInterface\\原创 2018-01-25 16:43:09 · 5374 阅读 · 0 评论 -
golang文件读取-按行读取
golang文件读取-按行读取a.txt文件内容: ABCDEFGHI HELLO GOLANGpackage mainimport ( "fmt" "os" "io" "bufio" "strings")func main() { fileName := "C:\\Robert\\日志分析\\tools_go原创 2018-01-25 16:49:15 · 18606 阅读 · 0 评论 -
go连接mysql,redis并完成日志字符处理实例
go连接mysql,redis并完成日志字符处理实例package main// 引入所需包import ( "compress/gzip" "fmt" "io/ioutil" "os" "strings" //"reflect" "github.com/garyburd/redigo/redis" "math" "strco原创 2017-12-11 15:11:07 · 815 阅读 · 0 评论 -
go判断文件夹是否存在,并创建
go判断文件夹是否存在,并创建package mainimport ( "fmt" "os")// 判断文件夹是否存在func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if o原创 2017-12-11 20:48:58 · 46294 阅读 · 0 评论 -
使用go读取gzip格式的压缩包
使用go读取gzip格式的压缩包package main// 引入所需包import ( "os" "compress/gzip" "io/ioutil" "fmt")// gzip文件var fn = "./113.200.251.66_1510825558_A6D39783B05943D8ACA64F397748CF1B_vdn.gz"func main()原创 2017-12-06 11:15:28 · 5276 阅读 · 0 评论 -
go连接redis
go连接redispackage mainimport ( "fmt" "github.com/garyburd/redigo/redis")func main() { // 连接redis数据库,指定数据库的IP和端口 conn, err := redis.Dial("tcp", "x.x.x.x:6379") if err != nil {原创 2017-12-06 11:23:07 · 1845 阅读 · 0 评论 -
go操作redis的有序集合(zset)
go操作redis的有序集合(zset)package mainimport ( "fmt" "github.com/garyburd/redigo/redis")func main() { // 连接redis数据库,指定数据库的IP和端口 conn, err := redis.Dial("tcp", "36.99.16.197:6379") if err原创 2017-12-06 18:26:46 · 8357 阅读 · 0 评论 -
go遍历文件夹和文件
go读取文件和目录package mainimport ( "fmt" "io/ioutil" "os" "strings")//获取指定目录下的所有文件和目录func GetFilesAndDirs(dirPth string) (files []string, dirs []string, err error) { dir, err := ioutil原创 2017-12-07 18:28:54 · 28052 阅读 · 2 评论 -
golang flag示例
golang flag示例golang flag 包是用来解析命令行参数的.package mainimport ( "flag" "fmt")func test_flag() { data_path := flag.String("D", "/home/manu/sample/", "DB data path") log_file := flag.String("原创 2018-01-04 00:21:14 · 915 阅读 · 0 评论 -
golang实现Http Server
实现Http Server 主要使用golang 的 gin包, 接口使用Post发送, 数据格式采用Json格式, 注意, 定义Json格式时, 变量的首字母,必须大写, 要不然会识别失败.Json格式的解析和打包使用golang的默认json包 打包: json.Marshal() 解包:json.Unmarshal()Http Server 代码:package mainimport (原创 2018-01-04 00:35:48 · 5929 阅读 · 0 评论 -
golang使用aes库实现加解密
golang实现加密解密的库很多, 这里使用的是aes库+base64库来实现. 使用时,需要指定一个私钥,来进行加解密, 这里指定是: var aeskey = []byte(“321423u9y8d2fwfl”)上代码:package mainimport ( "fmt" "crypto/cipher" "crypto/aes" "bytes原创 2018-01-31 15:39:42 · 19789 阅读 · 3 评论 -
golang解决数据库中null值的问题
转自: http://blog.csdn.net/qq_15437667/article/details/78780945要点 从数据库读取可能为null值得值时,可以选择使用sql.NULL***来读取;或者使用IFNULL、COALESCE等命令让数据库查询值返回不为”“或者NULL 若需要往数据库中插入null值,则依然可以使用sql.NULL***存储所需的值,然后进行插转载 2018-01-25 09:11:33 · 8388 阅读 · 0 评论 -
golang使用net库实现一个简单的服务端和客户端通信
golang使用net库实现一个简单的服务端和客户端通信服务端代码: 服务端启动监听,默认127.0.0.1, 设置端口9090package mainimport ( "fmt" "runtime" "net" "os")func recvFile(conn net.Conn) { fmt.Println("new connecti原创 2018-01-25 15:50:14 · 1506 阅读 · 0 评论 -
go连接mysql
go连接mysqlpackage mainimport ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql")func main() { db, err := sql.Open("mysql", "root:***@tcp(127.0.0.1:3200)/server_conf?charset=utf8"原创 2017-12-08 16:08:08 · 1931 阅读 · 0 评论