深入Go的底层,带你走近一群有追求的人 |
您所在的位置:网站首页 › 2840*2160分辨率 › 深入Go的底层,带你走近一群有追求的人 |
ä¸å¨å æä¸ï¼æåå äºâGoå¤è¯»âæ´»å¨ï¼è¿æ主è¦è®²Goæ±ç¼è¯è¨ï¼ç±æ»´æ»´æ¹æ¥æ大ç¥ä¸»è®²ãæ´»å¨ç»æåï¼ææè§æéäºä»»ç£äºèãæ´»å¨ä»æä¸9ç¹å°æ·±å¤11ç¹å¤ï¼å ¨ç¨æ·±åº¦åä¸ï¼å¤§å¼è¿ç¾ï¼ä»¥è³äºæ´»å¨ç»æä¹åï¼ä¹ ä¹ ä¸è½å¹³éã å¯ä»¥è¯´ç解äºGoæ±ç¼è¯è¨ï¼å°±å¯ä»¥è®©æ们对Goçç解ä¸ä¸ä¸ªå°é¶ï¼å¾å¤ä»¥å模棱çä¸è¥¿ï¼å¨æ±ç¼è¯è¨é¢åé½æ æéå½¢äºãæå¨æ´»å¨ä¸æ¶è·äºå¾å¤ï¼ä»å¤©ææ¥ä½ä¸ä¸ªæ»ç»ï¼å¸æç»å¤§å®¶å¸¦æ¥å¯åï¼ ä¸ºäºæ´å¥½çé 读ä½éªï¼æå¨è´´ä¸æç« ç®å½ï¼ å å¨åæåäºä¸ç¯å ³äºdeferçæç« ï¼ãGolangä¹å¦ä½è½»æ¾å解deferç温æé·é±ããè¿ç¯æç« ååºåä¸ä¹ 就被GoCNçæ¯æ¥æ°é»æ¶å½äºï¼ç¶å就被Goå¤è¯»ç¾¤ç大佬æ¨æçå°äºï¼ä¹å被é请å»å¤è¯»æ´»å¨å享ã æ£å¼å享åï¼æå主é¢é 读äºå¾å¤æç« ï¼ä»¥æ±ædeferè®²æ¸ æ¥ãé 读è¿ç¨ä¸ï¼æåç°ä½å¡æ·±å ¥ä¸ç¹çæç« ï¼é½ä¼æåºGoæ±ç¼è¯è¨ãäºæ¯å°±å»æç´¢èµæï¼æ å¥ç¸å ³çèµæ太å°ï¼çå¾äºéé¾éï¼æåå°äºçæ£è¦å享çæ¶åä¹æ²¡æå®å ¨å¼æ¸ æ¥ã å¤è¯»æ´»å¨ç»æä¹åï¼æ¨å¤§åå¸äºç±æ¥æ大ç¥å¸¦æ¥çå¤è¯»å享é¢åï¼ãplan9 æ±ç¼å ¥é¨ï¼å¸¦ä½ æéåºç¨ååºå±ããæå¾ç¥è¿ä¸ªæ¶æ¯åï¼é常æ¿å¨ï¼ç»äºæç人å¯ä»¥è®²è®²Goæ±ç¼è¯è¨äºï¼å¬å®ä¹å估计ä¼æå¾å¤§æåï¼ä¹è½æædeferçåºå±åçäºï¼ æ¥çï¼æåç°ï¼æ¥æ大ç¥ç«ç¶åæå¨åä¸ä¸ªå ¬å¸ï¼æå¨å ¬å¸å ç½ä¸æå°äºä»åçplan9æ±ç¼ç¸å ³æç« ï¼åå¸å°Goå¤è¯»çgithubä¸ãææåè±æ¶é´é¢ä¹ å®äºæç« ï¼æ´çåºäºéå°çé®é¢ã å¨å æä¸9ç¹åæ¶å¼è®²ï¼æ¹å¤§çåå¤å¾å åï¼åæ¥1个å°æ¶çæ¶é´è¢«æé¿å°äº2个å¤å°æ¶ï¼èæ¹å¤§ç²¾ååååºä¸ç´å¾è¿ éï¼é®çé®é¢å¾å¿«å°±è½å¾å°åçãæå ¨ç¨åæ¹å¤§ç´æ¥å¯¹è¯ï¼æè§ç®ç´ä¸è¦å¤ªç½ï¼ è¿ç¯æç« æ¢æ¯å¯¹è¿æ¬¡å¤è¯»çæ»ç»ï¼ä¹æ¯ä¸ºäºå®£ä¼ ä¸ä¸Goå¤è¯»æ´»å¨ãé£éæ¯ä¸ç¾¤æ追æ±ç人ï¼ä»ä»¬æ¯å¨é½ä¼èå¨ä¸èµ·ï¼éè¿ç½ç»ï¼æ¢è®¨Goè¯è¨çæ¹æ¹é¢é¢ãæç¸ä¿¡ï¼åä¸ç人é½ä¼æå¾å¤ä¸åçæ¶è·ã æç´æ¥åä¸çGoå¤è¯»æ´»å¨æä¸æï¼ä¸æå享ï¼ä¸¤æå¬è®²ï¼æ¯æ¬¡é½æå¾å¤çæ¶è·ã èªæä»ç»çæå·§å¾å¤äººé½ä¸ç¥éæä¹å好ä¸ä¸ªèªæä»ç»ï¼è¦ä¹å«ç³å ¶è¾ï¼ä»ç»å®å¤§å®¶é½ä¸ç¥éä½ è®²äºä»ä¹ï¼è¦ä¹è¯´äºå天æ æçä¿¡æ¯ï¼å¤§å®¶å¹¶ä¸å ³å¿çäºæ ï¼æå¾å¾å°´å°¬ã å ¶å®èªæä»ç»æ²¡é£ä¹é¾ï¼ææ¡å¥è·¯åï¼æ¯å¯ä»¥åå¾å¾å¥½çï¼ æå¨ä¸ä¸æGoå¤è¯»å享çæ¶åï¼ç¨ä¸å¼ PPTå®æäºèªæä»ç»ãå å«äºå个æ¹é¢ï¼ä¸ªäººåºæ¬ä¿¡æ¯ãåºç°å¨æ¤æ¶æ¤å°çåå ãæè½å¸¦æ¥ç帮å©ãæå¸æå¾å°ç帮å©ã 个人åºæ¬ä¿¡æ¯å æ¬ä½ å«ä»ä¹ååï¼æ¯åªé人ï¼å¨ä»ä¹å°æ¹å·¥ä½ï¼æ¯ä¸äºåªä¸ªå¦æ ¡ï¼æä»ä¹å ´è¶£ç±å¥½â¦â¦è¿äºåºæ¬çå±æ§ãè¿äºä¿¡æ¯å¯ä»¥è®©å¤§å®¶å¿«éå½¢æå¯¹ä½ çç´è§è®¤è¯ã åºç°å¨æ¤æ¶æ¤å°çåå ï¼å¯ä»¥è®²è§£ä½ çæ äºãä½ å¨ä»ä¹å°æ¹éè¿ä»ä¹äººç¥éäºè¿ä¸ªæ´»å¨ï¼ç¶åå 为ä»ä¹æå¨ä½ æ¥åå â¦â¦éè¿æ äºå¯ä»¥è¿ éæè¿ä¸ç°åºå ¶ä»åä¸è çè·ç¦»ã æè½å¸¦æ¥ç帮å©ï¼åå æ´»å¨ç人é½æ¯æ³è·åä¸äºä¸è¥¿çï¼ç¥è¯ãç»éªãè§é»ççãä½æ¯ï¼æ们ä¸è½åªç´¢åï¼ä¸ä»åºãå æ¤ï¼å¯ä»¥è®²è®²ä½ å¯ä»¥æä¾ç帮å©ãæ¯å¦æå¯ä»¥èç³»åºå°ï¼æä¼åå®£ä¼ æç« ççï¼ä½ å¯ä»¥è®²åºä½ ç¬ç¹çä»·å¼ã æå¸æå¾å°ç帮å©ãæ¯ä¸ªåä¸ç人é½å¸æä»æ´»å¨ä¸è·å¾èªå·±æ³è¦çä¸è¥¿ï¼æ£æ¯å 为æ¤ï¼è¿ä¸ªæ´»å¨å¯¹äºåä¸è æææä¹ï¼ä¹æä¼æç»ä¸å»çå¨åã è¿å个æ¹é¢ï¼å¯ä»¥ç»æä¸ä¸ªé常精彩çèªæä»ç»ãå®ææ©æ¯æå¨å¬ç½èçãç½è¾æç»´ãå¬å°çï¼ææå®åè¿äºæç人çç®æ³éï¼ä»å¤©æ¨èç»å¤§å®¶ãå¸æ大家以åå¨éè¦èªæä»ç»çåºåæè¯å¯è¯´ï¼èä¸è½è¯´ç精彩ã æ们ç¥éï¼CPUæ¯åªè®¤äºè¿å¶æ令çï¼ä¹å°±æ¯ä¸ä¸²ç0101ï¼äººç±»æ æ³è®°ä½è¿äºäºè¿å¶ç ï¼äºæ¯åæäºæ±ç¼è¯è¨ãæ±ç¼è¯è¨å®é ä¸æ¯äºè¿å¶æ令çææ¬å½¢å¼ï¼å®ä¸æ令å¯ä»¥ä¸ä¸å¯¹åºã æ¯ä¸ç§CPUæ令é½æ¯ä¸ä¸æ ·çï¼å æ¤å¯¹åºçæ±ç¼è¯è¨ä¹å°±ä¸ä¸æ ·ã人类åå®æ±ç¼è¯è¨åï¼æå®è½¬æ¢æäºè¿å¶ç ï¼å°±å¯ä»¥è¢«æºå¨æ§è¡äºã转æ¢çå¨ä½ç±ç¼è¯å¨å®æã Goè¯è¨çç¼è¯å¨åæ±ç¼å¨é½å¸¦äºä¸ä¸ª-Såæ°ï¼å¯ä»¥æ¥ççæçæç»ç®æ 代ç ãéè¿å¯¹æ¯ç®æ 代ç ååå§çGoè¯è¨æGoæ±ç¼è¯è¨ä»£ç çå·®å¼å¯ä»¥å 深对åºå±å®ç°çç解ã Goæ±ç¼è¯è¨å®é ä¸æ¥æºäºplan9æ±ç¼è¯è¨ï¼èplan9æ±ç¼è¯è¨æåæ¥æºäºGoè¯è¨ä½è ä¹ä¸çKen Thompson为plan9ç³»ç»æåçCè¯è¨ç¼è¯å¨è¾åºçæ±ç¼ä¼ªä»£ç ãè¿é强çæ¨èä¸ä¸æ¥æ大ç¥çæ°ä¹¦ãGoè¯è¨é«çº§ç¼ç¨ãï¼å³å°ä¸å¸ï¼çµåççç¹å»é 读åæå¯ä»¥çå°å°åï¼ä¹¦ä¸æä¸æ´ä¸ªç« è讲Goçæ±ç¼è¯è¨ï¼éå¸¸ç²¾å½©ï¼ ç解Goçæ±ç¼è¯è¨ï¼åªæåªæ¯ä¸ç¹ç¹ï¼é½è½å¯¹Goçè¿è¡æºå¶ææ´æ·±å ¥çç解ãæ¯å¦æ们以å讲çdeferï¼å¦æä»Goæºç ç¼è¯åçæ±ç¼ä»£ç æ¥çï¼å°±è½æ·±å»å°ææ¡å®çåºå±åçãåæ¯å¦ï¼å¾å¤æç« é½ä¼åæGoçå½æ°åæ°ä¼ éé½æ¯å¼ä¼ éï¼å¦æææ±ç¼ä»£ç ç§åºæ¥ï¼å¾å®¹æå°±è½å¾åºç»è®ºã æ±ç¼è§åº¦çå½æ°è°ç¨åè¿åè¿ç¨å设æ们æä¸ä¸ªè¿æ ·å¹´å¹¼æ ç¥çä¾åï¼æ±ä¸¤ä¸ªintçåï¼Goæºç å¦ä¸ï¼ package mainfunc main() { _ = add(3,5)}func add(a, b int) int { return a+b} 使ç¨å¦ä¸å½ä»¤å¾å°æ±ç¼ä»£ç ï¼ go tool compile -S main.go go tool compileå½ä»¤ç¨äºè°ç¨Goè¯è¨æä¾çåºå±å½ä»¤å·¥å ·ï¼å ¶ä¸-Såæ°è¡¨ç¤ºè¾åºæ±ç¼æ ¼å¼ã æ们ç°å¨åªå ³å¿addå½æ°çæ±ç¼ä»£ç ï¼ "".add STEXT nosplit size=19 args=0x18 locals=0x0 0x0000 00000 (main.go:7) TEXT "".add(SB), NOSPLIT, $0-24 0x0000 00000 (main.go:7) FUNCDATA $0, gclocals·54241e171da8af6ae173d69da0236748(SB) 0x0000 00000 (main.go:7) FUNCDATA $1, gclocals·33cdeccccebe80329f1fdbee7f5874cb(SB) 0x0000 00000 (main.go:7) MOVQ "".b+16(SP), AX 0x0005 00005 (main.go:7) MOVQ "".a+8(SP), CX 0x000a 00010 (main.go:8) ADDQ CX, AX 0x000d 00013 (main.go:8) MOVQ AX, "".~r2+24(SP) 0x0012 00018 (main.go:8) RET çä¸ææ²¡å ³ç³»ï¼æç®åä¹ä¸æ¯å ¨é¨é½æï¼ä½æ¯å¯¹äºç解ä¸ä¸ªå½æ°è°ç¨çæ´ä½è¿ç¨èè¨ï¼è¶³å¤äºã è¿ä¸è¡è¡¨ç¤ºå®ä¹addè¿ä¸ªå½æ°ï¼æåçæ°å$0-24ï¼å ¶ä¸0表示å½æ°æ 帧大å°ä¸º0ï¼24表示åæ°åè¿åå¼ç大å°ï¼åæ°æ¯2个intååéï¼è¿åå¼æ¯1个intååéï¼å ±24åèã åçä¸é´è¿åè¡ï¼ 代ç ç段ä¸ç第1è¡ï¼å°ç¬¬2个åæ°bæ¬å°AXå¯åå¨ï¼ç¬¬2è¡å°1个åæ°aæ¬å°å¯åå¨CXï¼ç¬¬3è¡å°aåbç¸å ï¼ç¸å çç»ææ¬å°AXï¼æåä¸è¡ï¼å°ç»ææ¬å°è¿ååæ°çå°åï¼è¿æ®µæ±ç¼ä»£ç é常ç®åï¼æ¥çä¸ä¸å½æ°è°ç¨è å被è°è çæ 帧å¾ï¼ (SP)ææ 顶ï¼b+16(SP)表示裸éª1çä½ç½®ï¼ä»SPå¾ä¸å¢å 16个åèï¼æ³¨æï¼åé¢çbä» è¡¨ç¤ºä¸ä¸ªæ å·ï¼åæ ·ï¼a+8(SP)表示å®å0ï¼~r2+24(SP)å表示è¿åå¼çä½ç½®ã å ·ä½å¯ä»¥çä¸é¢çå¾ï¼ ä¸é¢addå½æ°çæ 帧大å°ä¸º0ï¼å ¶å®æ´ä¸è¬çè°ç¨è ä¸è¢«è°ç¨è çæ 帧示æå¾å¦ä¸ï¼ æåï¼æ§è¡RETæ令ãè¿ä¸æ¥æ被è°ç¨å½æ°addæ å¸§æ¸ é¶,æ¥çï¼å¼¹åºæ 顶çè¿åå°åï¼æå®èµç»æ令å¯åå¨ripï¼èè¿åå°åå°±æ¯mainå½æ°éè°ç¨addå½æ°çä¸ä¸è¡ã äºæ¯ï¼ååå°äºmainå½æ°çæ§è¡ç¯å¢ï¼addå½æ°çæ 帧ä¹è¢«éæ¯äºãä½æ¯æ³¨æï¼è¿åå åæ¯æ²¡æè¢«æ¸ é¶çï¼æ¸ é¶å¨ä½æ¯ä¹åå次ç³è¯·è¿åå åçæ¶åè¦åçäºãæ¯å¦ï¼å£°æäºä¸ä¸ªintååéï¼å®çé»è®¤å¼æ¯0ï¼æ¸ é¶çå¨ä½æ¯å¨è¿éå®æçã è¿æ ·ï¼mainå½æ°å®æäºå½æ°è°ç¨ï¼ä¹æ¿å°äºè¿åå¼ï¼å®ç¾ã æ±ç¼è§åº¦çsliceåæ¥çä¸ä¸ªä¾åï¼æ们æ¥ççsliceçåºå±å°åºæ¯ä»ä¹ã package mainfunc main() { s := make([]int, 3, 10) _ = f(s)}func f(s []int) int { return s[1]} ç¨ä¸é¢åæ ·çå½ä»¤å¾å°æ±ç¼ä»£ç ï¼æ们åªå ³æ³¨få½æ°çæ±ç¼ä»£ç ï¼ 0x0000 00000 (main.go:7) TEXT "".add(SB), NOSPLIT, $0-24 0x0000 00000 (main.go:7) MOVQ "".b+16(SP), AX 0x0005 00005 (main.go:7) MOVQ "".a+8(SP), CX 0x000a 00010 (main.go:8) ADDQ CX, AX 0x000d 00013 (main.go:8) MOVQ AX, "".~r2+24(SP) "".f STEXT nosplit size=53 args=0x20 locals=0x8 // æ 帧大å°ä¸º8åèï¼åæ°åè¿åå¼ä¸º32åè 0x0000 00000 (main.go:8) TEXT "".f(SB), NOSPLIT, $8-32 // SPæ 顶æéä¸ç§»8åè 0x0000 00000 (main.go:8) SUBQ $8, SP // å°BPå¯åå¨çå¼å ¥æ 0x0004 00004 (main.go:8) MOVQ BP, (SP) // å°æ°çæ 顶å°åä¿åå°BPå¯åå¨ 0x0008 00008 (main.go:8) LEAQ (SP), BP 0x000c 00012 (main.go:8) FUNCDATA $0, gclocals·4032f753396f2012ad1784f398b170f4(SB) 0x000c 00012 (main.go:8) FUNCDATA $1, gclocals·69c1753bd5f81501d95132d08af04464(SB) // ååºsliceçé¿åº¦len 0x000c 00012 (main.go:8) MOVQ "".s+24(SP), AX // æ¯è¾ç´¢å¼1æ¯å¦è¶ è¿len 0x0011 00017 (main.go:9) CMPQ AX, $1 // å¦æè¶ è¿lenï¼è¶çäºã跳转å°46 0x0015 00021 (main.go:9) JLS 46 // å°sliceçæ°æ®é¦å°åå è½½å°AXå¯åå¨ 0x0017 00023 (main.go:9) MOVQ "".s+16(SP), AX // å°ç¬¬8byteå°åçå ç´ ä¿åå°AXå¯åå¨ï¼ä¹å°±æ¯salaries[1] 0x001c 00028 (main.go:9) MOVQ 8(AX), AX // å°ç»ææ·è´å°è¿ååæ°çä½ç½®ï¼yï¼ 0x0020 00032 (main.go:9) MOVQ AX, "".~r1+40(SP) // æ¢å¤BPçå¼ 0x0025 00037 (main.go:9) MOVQ (SP), BP // SPåä¸ç§»å¨8个åè 0x0029 00041 (main.go:9) ADDQ $8, SP // è¿å 0x002d 00045 (main.go:9) RET 0x002e 00046 (main.go:9) PCDATA $0, $1 // è¶çï¼panic 0x002e 00046 (main.go:9) CALL runtime.panicindex(SB) 0x0033 00051 (main.go:9) UNDEF 0x0000 48 83 ec 08 48 89 2c 24 48 8d 2c 24 48 8b 44 24 H...H.,$H.,$H.D$ 0x0010 18 48 83 f8 01 76 17 48 8b 44 24 10 48 8b 40 08 .H...v.H.D$.H.@. 0x0020 48 89 44 24 28 48 8b 2c 24 48 83 c4 08 c3 e8 00 H.D$(H.,$H...... 0x0030 00 00 00 0f 0b ..... rel 47+4 t=8 runtime.panicindex+0 rel 47+4 t=8 runtime.panicindex+0â éè¿ä¸é¢çæ±ç¼ä»£ç ï¼æ们ç»åºå½æ°è°ç¨çæ 帧å¾ï¼ æ们å¯ä»¥æ¸ æ°å°çå°ï¼ä¸ä¸ªsliceæ¬è´¨ä¸æ¯ç¨ä¸ä¸ªæ°æ®é¦å°åï¼ä¸ä¸ªé¿åº¦Lenï¼ä¸ä¸ªå®¹éCapãæ以å¨åæ°æ¯sliceçå½æ°éï¼å¯¹sliceçæä½ä¼å½±åå°å®åçsliceã æ£ç¡®åä¸Goå¤è¯»æ´»å¨çæ¹å¼æåå说ä¸ä¸Goå¤è¯»æ´»å¨çæ¹å¼åç®æ ãå¼èªGoå¤è¯»çgithub说ææä»¶ï¼ ç±ä¸ä¸ªä¸»è®²äººå¸¦ç大家ä¸èµ·å»é 读 Go æºä»£ç ï¼ä¸èµ·å»åé£äºé¾åçç®æ³ãå¦ä¹ 代ç éé¢çå¥æ·«æå·§ï¼éå°é®é¢æè æçæäºï¼æ们å¯ä»¥ä¸èµ·å»æ£ç´¢ï¼è§£çè¿äºé®é¢ãæ们å¯ä»¥ä¸èµ·å¦ä¹ ï¼å ±åæé¿ã æ们å¸æå¯ä»¥æ¨è¿å¤§å®¶æ·±å ¥äºè§£ Go ï¼å¿«éæé¿ä¸ºèµæ·±ç Gopher ãæ们å¸ææ¯æ¬¡æ¥äºç人å没æ¥ç人é½è½å¤ææ¶è·ï¼æé¿ã åé¢æ说Goå¤è¯»æ´»å¨çå°ä¼ä¼´æ¯ä¸ç¾¤æ追æ±ç人ï¼è¿éæä¹æåºä¸äºé®é¢å§ãå°±æåä¸çä¸ææ¥çï¼è½ç¶zoomæ¥å ¥äººæ°å¾å¤ï¼é«å³°æ50+人ï¼ä½æ¯å ¨è¿ç¨å¤§å®¶äº¤æµæ¯è¾å°ï¼åºæ¬ä¸æ¯ä¸»è®²äººä¸ä¸ªäººå¨é£èªå¨ãæ¥æ大ç¥è®²çé£æï¼åªææå ¨ç¨æé®ãæè§åæ¯æ们两个人å¨å¯¹è¯ï¼æçé®é¢å¼æ¸ æ¥äºï¼åªæ¯ä¸ç¥éå ¶ä»çåä¸åå¦å¦ä½ï¼ æåç»å享è ååä¸è æä¸äºå»ºè®®å§ï¼ 对äºå享è ï¼äºå å好å 足çåå¤ï¼å¯ä»¥å¨æç« éååºä¸»è¦çç¹ï¼æ¾å¨githubéï¼åèæ¥æ大ç¥çplan9æ±ç¼è®²ä¹ï¼æéè¦çä¸ç¹ï¼å享åç»å¤§å®¶æä¾ä¸ä»½é¢ä¹ èµæã 对äºåä¸è ï¼è½è·å¾æå¤æ¶è·çæ¹å¼å°±æ¯ä¼åé¢ä¹ ï¼ä¼ä¸ç§¯ææé®ï¼ä¼åå¤ä¹ æ»ç»åæ£ãå¦å¤ï¼å¼ºç建议åä¸è ä¼åè¦åå¤è³å°ä¸ä¸ªé®é¢ï¼æé对æ§å°å¬ï¼æä¼ææ¶è·ãä¼ä¸ä¹è¦ç§¯ææé®ï¼è¿ä¹æ¯å¯¹ä¸»è®²è çåé¦ï¼ä¸è³äºä¸»è®²è è§å¾åªæèªå·±å¨å¯¹ççµè讲ã æåï¼æ¬¢è¿æ¯ä¸ä¸ªå¦ä¹ Goè¯è¨çåå¦é½è½æ¥Goå¤è¯»ççï¼ç¹å»é 读åæå¯ä»¥çå°æç« éæå°çææèµæï¼å æ¬ä¸ææ¹å¤§plan9æ±ç¼çè§é¢åæ¾ï¼ä¸å®¹éè¿ï¼ |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |