分享
  1. 首页
  2. 文章

一周 Go World 新鲜事

mob604756f0bbf4 · · 1106 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

01

大道至简—GO语言最佳实践

2007年,受够了C++煎熬的Google首席软件工程师Rob Pike纠集Robert Griesemer和Ken Thompson两位牛人,决定创造一种新语言来取代C++, 这就是Golang。出现在21世纪的GO语言,虽然不能如愿对C++取而代之,但是其近C的执行性能和近解析型语言的开发效率以及近乎于完美的编译速度,已经风靡全球。特别是在云项目中,大部分都使用了Golang来开发,不得不说,Golang早已深入人心。而对于一个没有历史负担的新项目,Golang或许就是个不二的选择。

出自GoCN每日新闻(2018年06月08日)

原文链接:https://mp.weixin.qq.com/s/hE7ecSywWY8SxoQV0OwBQg

原文二维码

一周 Go World 新鲜事

02

一周 Go World 新鲜事

在并发编程时,CPU 处理器数量是重要的决定性参数。它决定了我们应该采取什么样的并行策略,甚至会影响架构设计。也因为如此,我们要知道相关函数(runtime.NumCPU)返回的是物理核数量,还是包含超线程(Hyper-Threading)的结果。

超线程技术是利用特殊指令,在单个物理核内虚拟多个逻辑处理器。这有点像多线程,将等待时间挖掘出来执行其他任务,以提升整体性能。可问题在于,多个逻辑处理器毕竟共享某些资源,某些时候可能适得其反拖累执行效率,比如缓存刷新等等。

程序员应该对硬件体系,以及操作系统有些基本认识。

出自GoCN每日新闻(2018年06月09日)

原文链接:https://mp.weixin.qq.com/s/_PbNrKkL3Wr3TEiPjX-X6g

原文二维码

一周 Go World 新鲜事

03

GO语言学习笔记-缓冲区Channels和线程池

前讨论的所有channel都是不带缓冲区的,因此读取和写入都会被阻塞。创建一个带缓冲区的channel也是可能的,这种channel只有在缓冲区满后再写入或者读取一个空的channel时才会被阻塞。

创建一个带缓冲区的channel需要一个额外的参数容量来表明缓冲区大小:

ch := make(chan type, capacity)
上面代码中的 capacity 需要大于0,如果等于0的话则是之前学习的无缓冲区channel。

出自GoCN每日新闻(2018年06月09日)

原文链接:https://juejin.im/entry/5b1a239de51d45067a72955e

原文二维码

一周 Go World 新鲜事

04

Golang之sync.Map源码分析

众所周知,go普通的map是不支持并发的,换而言之,不是线程(goroutine)安全的。博主是从golang 1.4开始使用的,那时候map的并发读是没有支持,但是并发写会出现脏数据。golang 1.6之后,并发地读写会直接panic:

fatal error: concurrent map read and map write
package mainfunc main() {
 m := make(map[int]int) go func() { for {
 _ = m[1]
 }
 }() go func() { for {
 m[2] = 2
 }
 }() select {}
}

出自GoCN每日新闻(2018年06月10日)

原文链接:https://juejin.im/post/5b1b3d785188257d45297d0a

原文二维码

一周 Go World 新鲜事

05

Gobox中的simplecache和levelcache

今天来说下gobox中的simplecache和levelcache

simplecache

simplecache提供了一个简单的内存kv

用法示例

package mainimport (
 "github.com/goinbox/crypto"
 "github.com/goinbox/simplecache"
 "fmt"
 "time"
 "strconv")func main() {
 sc := simplecache.NewSimpleCache()
 for i := 0; i < 10000; i++ {
 key := crypto.Md5String([]byte(strconv.Itoa(i)))
 sc.Set(key, i, 3*time.Second)
 v, ok := sc.Get(key)
 if !ok || v != i { fmt.Println(v, ok)
 }
 }
 time.Sleep(4 * time.Second)
 allKeysExpires := true
 for i := 0; i < 10000; i++ {
 key := crypto.Md5String([]byte(strconv.Itoa(i)))
 v, ok := sc.Get(key)
 if ok || v == i {
 fmt.Println(v, ok)
 allKeysExpires = false
 }
 }
 if allKeysExpires {
 fmt.Println("all keys have expired")
 }}

有疑问加站长微信联系(非本文作者)

本文来自:51CTO博客

感谢作者:mob604756f0bbf4

查看原文:一周 Go World 新鲜事

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
1106 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏