GoLang
斛兵
克己力行 严以修身!
展开
-
go函数式选项模式
Go语言没有提供默认参数,一旦一个对象有很多属性(这些属性都可以有默认值)的时候,生成一个对象会变得及其麻烦。函数式选项模式可轻松解决该类问题。package mainimport "fmt"type Connection struct{}type stuffClient struct { conn Connection timeout int retries int}var defaultStuffClient = stuffClient{ retri原创 2021-06-28 19:35:23 · 252 阅读 · 0 评论 -
go高阶函数
高阶函数(Hiher-order Function)定义为:满足下列条件之一的函数: 接收一个或多个函数作为参数 返回值是一个函数 高阶函数可以轻松的实现函数的个性化过滤,举个例子package mainimport ( "fmt")type student struct { firstName string lastName string grade string country string}func原创 2020-08-11 21:05:22 · 542 阅读 · 0 评论 -
Go中chan引发的协程死锁
fatal error: all goroutines are asleep - deadlock!代码如下package mainimport ( "fmt" "time")func deadLock(c chan string) { timeout := time.Millisecond * time.Duration(10) tk := time.NewTicker(timeout) defer tk.Stop() for { select { case tx原创 2020-08-11 14:52:49 · 1192 阅读 · 0 评论 -
go用chan实现WaitGroup并支持超时
来来来,话不多说,上代码package mainimport "fmt"import "time"import "sync"type group struct { gc chan bool tk *time.Ticker cap int mutex sync.Mutex}func WaitGroup(timeOuteRec int) *group{ timeout := time.Millisecond * time.Duration(timeOuteRec) w原创 2020-08-11 12:45:10 · 1479 阅读 · 0 评论 -
go并发协程示例
如何用go写并发协程呢?来来来,有代码有真相package mainimport "fmt"import "time"import "runtime"import "sync/atomic"var runningMultiGoNum int64func main() { //定时器,防止协程执行超时阻塞进程 timeOuteRec := 10 timeout := time.Millisecond * time.Duration(timeOuteRec) tk :=原创 2020-08-05 11:32:06 · 502 阅读 · 0 评论 -
喷气大脑(jetBrain)快捷键指南
跳转、搜索、工作区切换跳单词 alt + 右键跳行 command + 右键光标位置前进,后退 command+] , command +[跳转到最新编辑地区 command + shift + del顶部项目目录:command + 向上方向键已经打开文件切换:shift+command+[ 、shift+command+]项目目录切换:command + 1terminal切换:alt+f12选中、列操作、代码模板选中:将光标移动到待选中单词的某个位置,alt..原创 2020-05-13 15:52:45 · 871 阅读 · 0 评论 -
Golang包管理工具glide
glide命令# 初始化glide配置glide createglide init# 添加新的包glide get [package name]# 根据glide.yaml更新包glide updateglide up# 根据glide.yaml安装包glide install# 返回当前项目的名称glide name# 列出当前项目已安装的包...原创 2020-04-20 20:59:11 · 198 阅读 · 0 评论 -
Golang调试工具Delve安装调试
1.安装Golang debug 推荐使用 Delve 工具,项目地址:https://github.com/derekparker/delve拉取最新 delve 项目代码到本地,编译安装。# cd $GOPATH/src/# git clone https://github.com/derekparker/delve.git# cd delve/cmd/dlv/# go bu...原创 2020-02-16 22:25:11 · 1844 阅读 · 0 评论 -
golang中.([]byte)和 []byte()
.([]byte)value, ok :=var.([]byte)这是标准的golang类型断言(Type Assertion)。这里的val一般是一个interface{}类型的变量。这句的字面含义是“我认为val这个interface{}类型变量的underlying type是[]byte,如果是,请将其值赋给变量value,并且ok =true,如果不是ok = false。...原创 2019-11-29 10:29:11 · 11812 阅读 · 0 评论 -
golang变量类型判断方法
方法一:用Printf判断package mainimport ( "fmt")func main() { v1 := "123456" v2 := 12 fmt.Printf("v1 type:%T\n", v1) fmt.Printf("v2 type:%T\n", v2)}输出内容:v1 typ...原创 2019-11-27 21:46:09 · 435 阅读 · 0 评论 -
beego使用过滤器实现PUT、DELETE请求
首先要说明, 在 XHTML 1.x 标准中, 表单只支持 GET 或者 POST 方法. 虽然说根据标准, 你不应该将表单提交到 PUT 方法, 但是如果你真想的话, 也很容易, 通常可以这么做:首先表单本身还是使用 POST 方法提交, 但是可以在表单中添加一个隐藏字段:<form method="post" ...> <input type="hidden" ...原创 2019-07-22 18:04:52 · 1370 阅读 · 0 评论 -
golang中make和new的区别
话不多说先上代码package mainimport "fmt"func main() { p := new([]int) //p == nil; with len and cap 0 fmt.Println(p) v := make([]int, 10, 50) // v is initialed with len 10, cap 50 fmt.P...原创 2019-07-22 17:51:00 · 239 阅读 · 0 评论 -
golang检测结构体是否实现了接口的方法
假设我们定义了一个NestPreparer接口,并且定义了一个baseController结构体,那么如何判断结构体baseController是否实现了NestPreparer接口的方法呢? 结话不多说先上代码:type NestPreparer interface { NestPrepare()}// baseRouter implemented glo...原创 2019-07-22 16:59:34 · 3281 阅读 · 0 评论 -
Go中获取当前日期信息和时间戳
1.获取当前时间 currentTime:=time.Now()//获取当前时间,类型是Go的时间类型Timet1:=time.Now().Year()//年t2:=time.Now().Month()//月t3:=time.Now().Day()//日t4:=time.Now().Hou...原创 2019-07-24 17:58:50 · 4406 阅读 · 0 评论 -
beego框架之orm模块
1.安装mysql驱动 github.com/go-sql-driver/mysq2.建立模型映射,并使用结构体的tag标签来将结构体的成员变量和表的字段做映射。在models模块里,被注册的结构体与数据库里的表会以一种默认方式进行一一对应。然而,在实际开发中,默认的这种映射关系并不是我们所期待的,所以我们需要指定被注册的结构体与数据库里的表之间的关系。其中函数TableNam...原创 2019-07-24 17:40:15 · 373 阅读 · 0 评论 -
beego框架orm时区问题
使用beego框架,orm层插入datetime类型字段会比插入当前时间晚八个小时。根据github上go-sql-driver/mysql和beego官网的说法,从某一版本的驱动程序会无视数据库和系统时区,所以需要在连接字符串中指定时区。1.在linux(Ubuntu)和windows上(Mac上测试不支持)测试mysql5.6是可以支持loc=Asia/Shanghai这种写法的,而5.5...原创 2019-07-23 20:38:00 · 1758 阅读 · 0 评论 -
golang 方法
Go 没有面向对象,而我们知道常见的 Java、C++ 等OOP语言中,实现类的方法做法都是编译器隐式的给函数加一个 this 指针,而在 Go 里,这个 this 指针需要明确的声明出来,其实和其它 OOP 语言并没有很大的区别:在 C++ 中其实是这样的:class Circle { public: float getArea() { return 3.1...原创 2019-06-25 19:04:46 · 154 阅读 · 0 评论