随笔分类 - Go
Go语言开发中经常遇到的一些技术
摘要:json.Unmarshal不区分json字段 的大小写,只要字母一样即可,不区分大小写 可以看到sEx也被解析了,agde没有被解析,所以大小写不影响反序列化,但是结构体序列化成json的时候大小写必须和tag一致 来自为知笔记(Wiz)
阅读全文
摘要:go定时任务三方包,这个直接拉的版本和文档里的版本是不一样的,要去github看文档,每个版本的使用方法是不一样的,我们这里使用下面的命令去拉取3.0.0版本的查看 go get github.com/robfig/cron/v3@v3.0.0 package Jobs import ( "encoding/json" "log" "sz1/AppInit" "s...
阅读全文
摘要:等待一组协程结束,用sync.WaitGroup操作 package main import ( "fmt" "sync" "time" ) func main() { wg := sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go calc(&wg, i) } wg...
阅读全文
摘要:Go语言之unsafe包介绍及使用 unsafe内容介绍 type ArbitraryType int type Pointer *ArbitraryType func Sizeof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Alignof(x ArbitraryType) uintptr uns...
阅读全文
摘要:server package main import ( "fmt" "net" ) func main() { listener, err := net.ListenUDP("udp", &net.UDPAddr{ IP: net.IPv4(0, 0, 0, 0), Port: 30000, }) if err !...
阅读全文
摘要:server package main import ( "fmt" "net" ) //单独处理连接的函数 func process(conn net.Conn) { var buf = make([]byte, 1024) n, err := conn.Read(buf) // 返回读取到的字节数和错误信息 if err != nil { ...
阅读全文
摘要:struct和byte类型转换 import ( "fmt" "unsafe" ) type TestStructTobytes struct { data int64 } type SliceMock struct { addr uintptr len int cap int } func main() { var testStruct = &TestStruc...
阅读全文
摘要:type T struct { f string `one:"1" two:"2"blank:""` } func main() { t := reflect.TypeOf(T{}) f, _ := t.FieldByName("f") fmt.Println(f.Tag) // one:"1" two:"2"blank:"" v, ok := f.Tag....
阅读全文
摘要:package main import "fmt" func tryRecover() int { defer func() { r := recover() if err, ok := r.(error); ok { fmt.Println("Error occurred", err) } else { ...
阅读全文
摘要:panic的参数是一个空接口类型 interface{},所以任意类型的变量都可以传递给panic recover只有在defer后面的函数体里直接调用才能捕获panic终止异常,否则返回nil异常继续向外传递 defer recover() //这种写法捕捉失败 defer fmt.Println(recover()) //这种写法捕捉失败 defer func(){ func(){ ...
阅读全文
摘要:三次握手 主动发起请求端,发送SYN(SYN表示建立连接) 被动建立连接请求端,会去应答ACK同时发送SYN 主动发起请求端,发送应答ACK (ACK表示响应) 四次挥手 1主动关闭连接请求端,发送FIN (FIN表示关闭连接) 2被动关闭连接请求端,应答ACK 半关闭完成 3被动关闭连接请求端,发送FIN 4主动关闭连接请求端,应答ACK 因...
阅读全文
摘要:字典被设置成not addressble,所以不可以直接修改value成员(结构体或数组) 正确做法是返回整个value,待修改后再设置字典键值,或直接用指针类型 如果返回的是指针,可以透过指针直接修改目标对象 在创建时预先准备足够空间有助于提升性能,减少扩张时的内存分配和重新哈希操作来自为知笔记(Wiz)
阅读全文
摘要:itoa可以套公式,下面的依旧会按照公式运算 package main import "fmt" func main() { const ( b = 1 << (10 * iota) kb mb tb pb ) fmt.Println(b, kb, mb, tb, pb) //1 1024...
阅读全文
摘要:io包 type Reader interface{ Read(p []byte)(n int,err error) } type Writer interface{ Write(p []byte)(n int,err err) } for循环中一次读出文件 n := -1 for { n, err = file.Read(bs) if n== 0 || e...
阅读全文
摘要:go启动一个简单的httpserver package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", sayhelloName) //设置访问的路由 err := http.ListenAndServe(":8080", nil) //设置监听的端口 i...
阅读全文
摘要:Go语言runtime.Gosched()函数浅析 这个函数的作用是让当前goroutine让出CPU,好让其它的goroutine获得执行的机会。同时,当前的goroutine也会在未来的某个时间点继续运行。 请看下面这个例子(show.go): package main import ( "fmt" ) func showNumber (i int) { fmt.Pr...
阅读全文
摘要:package main import ( "fmt" "runtime" ) func main() { n := runtime.NumCPU() fmt.Print(n) runtime.GOMAXPROCS(n - 1) //设置cpu运行的数目 } 来自为知笔记(Wiz)
阅读全文
摘要:go奉行通过通信来共享内存,不像c和c++通过共享内存来通信 协程是轻量级的线程,编译器做优化** 有独立的栈空间 共享程序堆空间 调度由用户控制 协程是轻量级的线程 并行:多个cpu共同执行 并发 多个程序在cpu上不停的切换 go协程也是抢占式的 情景:在多线程情况下如果多个线程去下载同一个视频,这样多个线程可能会同时被io阻塞 这段时间所有线程都阻塞了,线程轮询所有线程都...
阅读全文
摘要:sync.Cond代表条件变量,需要配置锁才能有用 package main import ( "fmt" "runtime" "sync" "time" ) func main() { runtime.GOMAXPROCS(4) testCond() } func testCond() { c := sync.NewCond(...
阅读全文
摘要:判断io读取是否结束,尽量用if n==0这种方式,因为可以判断很多种情况 package main import ( "fmt" "io" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello")) fmt.Println(r....
阅读全文

浙公网安备 33010602011771号