随笔分类 - Go
Go语言开发中经常遇到的一些技术
摘要:Go函数类型的使用 type myfunc func() string // 声明函数变量 func main() { fn := func() string { return "bbb" } // 声明map myMap := make(map[string]myfunc) // map赋值 myMap["fn"] = fn fmt.Printl...
阅读全文
摘要:import "sync" var ( myMap = make(map[int]int, 10) lock sync.Mutex //声明一个全局的互斥锁 //sync 包 同步 // Mutex:是互斥 ) func test(n int){ res := 1 for i:=1;i<=n;i++{ res *=1 ...
阅读全文
摘要:Go序列化和反序列化 package main import ( "bufio" "encoding/json" "fmt" "os" ) type Monster struct { Name string Age int Skill string } func (m *Monster) Store(path string) { b, ...
阅读全文
摘要:https://blog.csdn.net/zzhongcy/article/details/97243826来自为知笔记(Wiz)
阅读全文
摘要:package main import ( "fmt" "html/template" "net/http" ) type User struct { UserName string Age int } func info(w http.ResponseWriter, r *http.Request) { t, err := temp...
阅读全文
摘要:channel的基本介绍 channel的本质是一个数据结构队列 数据是先进先出 FIFO 线程安全,多goroutine访问时,不需要加锁,就是说channel本身是线程安全的 channel是由类型的,一个string的channel只能存放string类型数据 无缓冲的channel关闭后,再往外读数据读到的是该管道数据类型的初始值 有缓冲的channel的channel关闭后,如果管道...
阅读全文
摘要:ARP与RARP详细解析 原创zlnnjit 发布于2016-04-03 15:12:15 阅读数 9544 收藏 展开 地址解析协议 ARP和逆地址解析协议RARP 1.基本关系: 2.地址解析协议 ARP的实现过程: 不管网络层使用的是什么协议,在实际网络的链路上传送数据帧时,最终还是必须使用硬件地址。 ‚每一个主机都设有一个 ARP高速缓存(AR...
阅读全文
摘要:package main import ( "errors" "fmt" "reflect" ) type Student struct { Name string `json:"name"` Age int `json:"age"` } type Teacher struct { name string } func (Studen...
阅读全文
摘要:Go 系列教程 —— 31. 自定义错误 使用 New 函数创建自定义错误 创建自定义错误最简单的方法是使用 errors 包中的 New 函数。 在使用 New 函数 创建自定义错误之前,我们先来看看 New 是如何实现的。如下所示,是 errors 包 中的 New 函数的实现。 // Package errors implements functions to manipulate ...
阅读全文
摘要:GO语言变量逃逸分析 空格键_11aa · 2019-07-09 21:32:41 · 274 次点击 · 预计阅读时间 1 分钟 · 大约1分钟之前 开始浏览 这是一个创建于 2019-07-09 21:32:41 的文章,其中的信息可能已经有所发展或是发生改变。 引言 内存管理的灵活性是让C/C++程序猿们又爱又恨的东西,比如malloc或new一块内存我可以整个进程使用...
阅读全文
摘要:字符串常用函数 package main import ( "fmt" "strings" ) func main() { str := "I love my work and i love my family too" ret := strings.Split(str, " ") fmt.Println(ret) ...
阅读全文
摘要:package main import ( "fmt" "unsafe" ) type W struct { a byte b int32 c int32 } func main() { var w = W{b: 32, c: 64} t := unsafe.Pointer(&w) ...
阅读全文
摘要:jsoniter高性能json库 非常快,支持java和go marshal使用的一些坑 package main import ( "encoding/json" "fmt" ) type User struct { Id int `json:"id,string"` //加了这个序列化到json中int类型会被转换成string类型 Name st...
阅读全文
摘要:package main import ( "log" "net/http" "os" "os/signal" ) type webhandler struct { } type web2handler struct { } func (webhandler) ServeHTTP(writer http.ResponseWriter, request *htt...
阅读全文
摘要:使用Fprintln追加字符串到文件末尾 package main import ( "fmt" "os" ) func main() { f,err := os.Create("test.txt") defer f.Close() if err != nil{ return } if err!=nil{ ...
阅读全文
摘要:package main import ( "fmt" "os" ) func main() { f, err := os.Open("/test.txt") if err, ok := err.(*os.PathError); ok { fmt.Println("File at path", err.Path, "failed to open"...
阅读全文
摘要:互斥锁 package main import ( "fmt" "sync" "time" ) var mux sync.Mutex func Printer(s string) { mux.Lock() for _, v := range s { fmt.Printf("%c", v) time.Sleep(300 ...
阅读全文
摘要:数组 如果元素支持==和!=操作符,那么数组也支持此操作 a := [...]int{1, 2, 3} b := [...]int{4, 5, 6} println(a == b) // false println(a != b) // true //下面的代码会抛出异常,因为map类型不支持==和!=运算 c := [...]map[int]str...
阅读全文
摘要:这种方式是Go所推荐的,优点就是安全,尽管这种操作会发生内存拷贝,导致性能上会有所损耗,这在处理一般业务时这种损耗是可以忽略的。但如果是拷贝频繁的情况下,想要进行性能优化时,就需要引入unsafe.Pointer了: func main() { var s = []byte("我永远喜欢藤原千花.jpg") Res := *(*string)(unsafe.Pointer(&s...
阅读全文
摘要:package main import ( "fmt" "unsafe" ) type TestStructTobytes struct { data int64 s int8 } type SliceMock struct { addr uintptr len int cap int } func main() { ...
阅读全文

浙公网安备 33010602011771号