Rob Pike's 5 Rules of Programming
Rule 1: You can't tell where a program is going to spend its time. Bottlenecks occur in surprising places, so don't try to second guess and put in a speed hack until you've proven that's where the bottleneck is.
自己做一下benchmark
func NamedFunc() string {
return getCurrentTime()
}
func AnonymousFunc() string {
var f = func() string {
return time.Now().Format("2006-01-06 15:04:05")
}
return f()
}
func getCurrentTime() string {
return time.Now().Format("2006-01-06 15:04:05")
}
var str = ""
func BenchmarkNamedFunc(b *testing.B) {
for i := 0; i < b.N; i++ {
str = NamedFunc()
}
}
func BenchmarkAnonymousdFunc(b *testing.B) {
for i := 0; i < b.N; i++ {
str = AnonymousFunc()
}
}
我做的結(jié)果:
goos: linux
goarch: amd64
BenchmarkNamedFunc-8 5000000 248 ns/op
BenchmarkAnonymousdFunc-8 5000000 248 ns/op
PASS
ok _/home/singlethread/test/src/definedfunc 3.020s
在使用golang進(jìn)行開發(fā)中,數(shù)據(jù)并發(fā)安全是經(jīng)常要考慮到的因素,開發(fā)框架中并不會(huì)處理用戶數(shù)據(jù)的并發(fā)安全。從1.9.2版本開始golang也提供了sync.Map并發(fā)安全的封裝類型,此外也可以參考gf框架的并發(fā)安全容器:http://gf.johng.cn/494392
慕課網(wǎng)視頻哈哈 mac是 option + command + v
我在網(wǎng)上找到一個(gè)用反射來做的select。感覺還不錯(cuò),就是不知道效率如何
兩個(gè)思路:
A.不斷請求狀態(tài)接口,如果返回 {"status":true} 則播放 error.mp3 或者發(fā)一封報(bào)警郵件,web 打開后就開始輪訓(xùn)接口,每個(gè)幾秒鐘請求一次。此種方法實(shí)現(xiàn)簡單,但是不夠優(yōu)雅。
B.通過 websocket,web 客戶端與服務(wù)端保持長連接,服務(wù)端發(fā)現(xiàn)為 true 主動(dòng)推送到前端,前端收到后播放Mp3。
B方案成本比較高,你需要看下 websocket,如果說你只是做一個(gè)小工具,我認(rèn)為 A方案 已經(jīng)可以滿足需求了,上手也簡單,你用 python 的 flask 框架或者 django 框架一會(huì)兒功夫就搞定了。
不懂go 但是看一下defer 函數(shù)
難道不是這樣執(zhí)行的
fun f6() int {
var i int = 0
i = 1
i++
// 本質(zhì)原因是return xxx語句并不是一條原子指令
// defer被插入到了賦值 與 RET之前,因此可能有機(jī)會(huì)改變最終的返回值。
r = i
func(a int) {
fmt.Println("i f6:", a)
i = i+5
}(i)
return
}
所以
return i 是單指令多操作 就是
在return i這句代碼 改為 r = i; return,
但是defer 函數(shù) 會(huì)被到 了 賦值 和 返回之間,你這個(gè)函數(shù)也沒影響 外作用域 i 的數(shù)值
所以返回肯定是2,不是 0 啊
肯定不是提前 把 i變?yōu)閞,那樣也不符合邏輯
case <-ch:
fmt.Println("receive:", <-ch)
你這里連續(xù)取了兩次值. 所以只需要五次循環(huán) ch 就已經(jīng)空了, 后面五次自然都是 timeout 了.
改成:
select {
case c := <-ch: // 只取一次
fmt.Println("receive:", c)
case <-timeout:
fmt.Println("timeout")
}可以寫成 handler的形式,參考http.TimeoutHandler的實(shí)現(xiàn)方式,你可以寫一個(gè) CorsHandler,
然后包一下你的articleController.Show 或者 articleController.Edit
source ~/.bash_profile
首先你先確定你是否更改了默認(rèn)的SHELL,比如有很多人使用了zsh,拿配置文件就又不一樣了!
算了我都直接說了吧?。?br>如果你使用的是ZSH
需要你在cat /etc/shells 修改默認(rèn)SHELL,完后去更改.zshrc
main 函數(shù)應(yīng)該這樣的
func main() {
go func() {
for n := range merge(ch1, ch2) {
fmt.Println(n)
}
}()
fo()
}
無緩沖的channel是阻塞的
當(dāng)在向一個(gè)無緩沖的channel發(fā)送數(shù)據(jù)時(shí),代碼會(huì)阻塞直到有另一個(gè)goroutine接收這個(gè)channel
所以改進(jìn)方法就是,先開啟一個(gè)goroutine來接收
fmt打印有內(nèi)容的話,resp絕不會(huì)為空,是否req url弄錯(cuò)了.
Access-Control-Allow-Origin 添加這個(gè)響應(yīng)頭就可以了,
Option第一次請求的時(shí)候,發(fā)現(xiàn)存在這個(gè)頭,并且這個(gè)頭的設(shè)置允許你的域名就可以返回200 ,然后客戶端再次發(fā)起真正的請求
可以使用aggregate實(shí)現(xiàn).
比如:
> db.user.aggregate(
{'$group':{
'_id': {'IP': '$IP'},
'uniqueIds': {'$addToSet': '$_id'},
'count' : {'$sum': 1}
}},
{'$match': {
'count': {'$gt': 1}
}}
)
詳細(xì)用法參考mongodb doc: aggregate.
經(jīng)過嘗試,使用 python 可以實(shí)現(xiàn)。
前面的做法 filter 返回的是 python 的list,并不能直接作為數(shù)組使用,需要將其轉(zhuǎn)化為字符串,再返回就 OK 了。
原因:對 python 的數(shù)據(jù)結(jié)構(gòu)理解不夠
實(shí)現(xiàn)如下:
def to_join_http_port(nodes, hostvars, ansible_default_netname, port):
"""
INPUT:
nodes: groups.group_name
hostsvars: ansible Built-in vars
ansible_default_netname: ethernet name
port: program server port
RETURN:
string like '"http://10.32.254.7:8081","http://10.32.254.8:8081","http://10.32.254.11:8081"'
"""
ips = []
for node in nodes:
ips.append(hostvars[node][ansible_default_netname]["ipv4"]["address"])
return ",".join([ '"http://%s:%s"' % (ip, port) for ip in ips ])
class FilterModule(object):
def filters(self):
return {
'http_port_join': to_join_http_port
}一般來說是沒有必要的
但是如果你的依賴包有特定的要求,或者墻外世界太多
就會(huì)出現(xiàn)以下解決方案
vendor
YII2)而在公司私有庫開發(fā)的話,挺多都會(huì)上傳vendor,為了便捷
如圖,其實(shí)我就是想問,應(yīng)用服務(wù)器如何把消息放到隊(duì)列中的,是應(yīng)當(dāng)放到本地還是通過websocket發(fā)送到其他服務(wù)器在放到隊(duì)列呢?
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。