Golang
go日常学习
xinxin100011
这个作者很懒,什么都没留下…
展开
-
7days golang orm 笔记
反射的简单使用ValueOf, Elem,Indirectreflect.ValueOf把一个interface{}包起来成为reflect.ValueValue.Interface() 是反向操作,得到被Value包起来的值Value.Elem 和 reflect.Indirect类似,当Value包起来一个指针时,这两个方法可以得到指针指向的具体对象的值 var i int = 3 var p *int = &i fmt.Println(p, i) //0xc0000ae008原创 2022-01-14 10:49:11 · 453 阅读 · 0 评论 -
golang text/template
text/templatehttps://www.cnblogs.com/wanghui-garcia/p/10385062.htmlurfave/cli 命令行框架https://jaycechant.info/2020/golang-in-action-day-8/原创 2021-10-26 14:55:45 · 123 阅读 · 0 评论 -
Golang unsafe.Pointer 和 uintptr
参考这里 感谢!golang中的指针:普通指针:var ptr *int 定义一个int类型指针内置类型uintptr,本质是一个无符号整形,足够容纳一个指针unsafe.Pointer,可以指向任意类型的指针// uintptr is an integer type that is large enough to hold the bit pattern of any pointer.// uintptr是一个能足够容纳指针位数大小的整数类型uinptr 主要用来做地址的加减,配合un原创 2021-10-20 17:00:32 · 222 阅读 · 0 评论 -
golang闭包
闭包是:内层函数对外层变量的使用例子:package mainimport "fmt"func counter() func() { i := 0 return func() { //闭包 i++ //i的作用域是整个counter函数 fmt.Println(i) }}func main() { counterFunc1 := counter() for i := 0; i < 3; i++ { counterFunc1() } counterFunc2原创 2021-09-10 14:47:49 · 103 阅读 · 0 评论 -
golang init函数
编译器会让init在main函数之前执行,init函数常用来加载配置文件,连接数据库等。golang每个包都可以有init其它包的init先执行,main包中的init最后执行(按依赖顺序)(一个包中可以有多个init)//first/first.gopackage firstimport "fmt"func init() { fmt.Println("first init")}func Run() {}//main.gopackage mainimport ( "f原创 2021-09-09 17:42:33 · 85 阅读 · 0 评论 -
golang interface 指针、对象
接口 Say结构体 Hellopackage mainimport "fmt"type Say interface { say()}type Hello struct {}func(h *Hello) say(){ //这里写指针,作为接口时必须引用 fmt.Println("hello")}func main() { var sayHello Say = &Hello{} //这里 sayHello.say()}如果 Hello.say() 方法传的指.原创 2021-09-09 17:20:57 · 1425 阅读 · 0 评论 -
Go defer
go专家编程2.1约定把defer的内容,叫做延迟函数golang官方总结了defer三个规则1. 延迟函数的参数在defer语句出现时就确定了func a() { i := 0 defer fmt.Println(i) i++ return}//打印0如果defer参数是地址,可能会改变func main() { a := 1 p := &a defer func(p *int) { fmt.Println(*p) }(p) a =原创 2021-09-07 21:15:37 · 83 阅读 · 0 评论 -
golang 多协程错误处理
Go多协程并发环境下的错误处理两个协程A、B如果A发生panic,B会挂掉!(程序整体会panic)A协程的panic,只有A可以recoverfunc main() { go func() { for { fmt.Println("goroutine A is ok") time.Sleep(500 * time.Millisecond) } }() go func() { time.Sleep(1200 * time.Millisecond) panic(原创 2021-09-06 14:40:22 · 777 阅读 · 0 评论 -
Go group
WaitGroupsync.WaitGroup会阻塞在检查点,直到所有goroutine完成func main(){ var wg sync.WaitGroup for i := 0; i < 10; i++ { wg.Add(1) go func(i int) { defer wg.Done() time.Sleep(time.Second) fmt.Println(i) }(i) } wg.Wait() //等待}errgrouperrgrou原创 2021-09-05 22:06:44 · 720 阅读 · 0 评论 -
Go 时间
formattime.Now().Format("2006-01-02T03:04:05Z")time.Now().Format("2006-01-02T03:04:05+08:00") //东八区time.Now().Format("2006-01-02T03:04:05 08:00") //空格和+一样//RFC 3339标准–>Z指的是UTC+0,世界协调时间(经度=0°)GMT是格林尼治时间,是一个时区时间,恰巧基本和UTC一样时区time.Now()得到的是当地时区时间原创 2021-09-03 16:34:28 · 325 阅读 · 0 评论 -
7days golang cache 笔记
学习7days golang分布式缓存部分:referencelfu (least frequently used): 按访问次数淘汰 lru(least recently used): 按时间淘汰 实现:队列,每次访问都把节点放到队首,淘汰队尾 lru-k:2q实现 访问k次才进入缓存队列,否则按fifo进入临时队列、淘汰 缓存队列按照lru淘汰 接口型函数 ref价值:函数实现了接口(通过在接口方法中调用自己),可以和实现了该接口的结构体一样,当做参数传递。(是g..原创 2021-08-20 17:23:25 · 372 阅读 · 0 评论