{"id":305292,"date":"2021-01-14T08:26:48","date_gmt":"2021-01-14T00:26:48","guid":{"rendered":"http:\/\/4563.org\/?p=305292"},"modified":"2021-01-14T08:26:48","modified_gmt":"2021-01-14T00:26:48","slug":"golang-%e7%9a%84%e6%8c%87%e9%92%88%e5%9c%b0%e5%9d%80%e9%97%ae%e9%a2%98","status":"publish","type":"post","link":"http:\/\/4563.org\/?p=305292","title":{"rendered":"golang \u7684\u6307\u9488\u5730\u5740\u95ee\u9898"},"content":{"rendered":"<div>\n<div>\n<div>\n<h1>                  golang \u7684\u6307\u9488\u5730\u5740\u95ee\u9898               <\/h1>\n<p> <\/p>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : yellowmarlboro <\/span>  <span><i><\/i> 2<\/span> <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<\/p><\/div>\n<div isfirst=\"1\"> <\/p>\n<pre><code> s0 := \"something\"  s1 := \"something\"  s2 := \"something\"[7:]  fmt.Println(&amp;s0, &amp;s1, &amp;s2)  fmt.Printf(\"%d n\", (*reflect.StringHeader)(unsafe.Pointer(&amp;s0)).Data)  fmt.Printf(\"%d n\", (*reflect.StringHeader)(unsafe.Pointer(&amp;s1)).Data)  fmt.Printf(\"%d n\", (*reflect.StringHeader)(unsafe.Pointer(&amp;s2)).Data) <\/code><\/pre>\n<p>\u7ed3\u679c\u662f<\/p>\n<pre><code>0xc00010a040 0xc00010a050 0xc00010a060 4974445  4974445  4974452 <\/code><\/pre>\n<ul>\n<li>\u4e3a\u4ec0\u4e48 &amp; \u51fa\u6765\u7684\u603b\u5dee 16 \uff1f unsafe.Pointer \u662f\u4e00\u6837\u7684\uff1f\uff08\u8bf7\u5ffd\u7565\u5207\u7247\u7684\uff09<\/li>\n<\/ul><\/div>\n<div> <b>\u5927\u4f6c\u6709\u8a71\u8aaa<\/b> (<span>11<\/span>)        <\/div>\n<div> <\/div>\n<\/p><\/div>\n<\/p><\/div>\n<ul>\n<li data-pid=\"5143560\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u4e3b<\/span> <span>\u8cc7\u6df1\u5927\u4f6c : yellowmarlboro <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u5df2\u7ecf\u4e86\u89e3\uff01<br \/>End                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143561\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : iQXQZX <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u4e3a\u4ec0\u4e48\u4e3a\u4ec0\u4e48\u4e3a\u4ec0\u4e48\uff1f\u63d2\u773c                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143562\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : iamzuoxinyu <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u5206\u6e05\u6808\u4e0a\u53d8\u91cf\u548c\u5b57\u7b26\u4e32\u5e38\u91cf\u3002                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143563\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : koujyungenn <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @yellowmarlboro \u8c1c\u8bed\u4eba\uff1f                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143564\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : kakach <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u8e72\u4e00\u4e2a\u5927\u4f6c\u7684\u56de\u7b54                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143565\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : kiddingU <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u4f60\u81ea\u5df1\u7528\u6cd5\u59ff\u52bf\u4e0d\u5bf9\uff0c\u6b63\u786e\u7684\u5e94\u8be5\u662f\u8fd9\u6837\u5427\uff1aunsafe.Pointer((*reflect.StringHeader)(unsafe.Pointer(&amp;s0)))                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143566\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : yuguorui96 <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u6ca1\u7ffb\u6e90\u7801\uff0c\u82b1\u4e86\u51e0\u5206\u949f\u770b\u4e86\u4e0b\u6c47\u7f16\u3002<\/p>\n<p>s0, s1, s2 \u4e4b\u95f4\u7684\u5730\u5740\u603b\u5dee 16 \u662f\u56e0\u4e3a String \u5728\u6808\u4e0a\u7684\u7ed3\u6784\u662f\uff1a<br \/>struct String {<br \/> char *data;<br \/> int length;<br \/>};<br \/>sizeof(\u4e00\u4e2a\u6307\u9488)+sizeof(\u4e00\u4e2a int)\u6b63\u597d\u662f 16 \u5b57\u8282\uff08 64 \u4f4d\u73af\u5883\u4e0b\uff09\u3002<\/p>\n<p>\u53c8\u56e0\u4e3a\u6808\u4e0a\u53d8\u91cf\u90fd\u662f\u7f16\u8bd1\u5668\u6309\u5e8f\u5206\u914d\u7684\uff0c\u6240\u4ee5\u6709\u4e86\u4e3b\u770b\u5230\u7684\u7ed3\u679c\u3002<\/p>\n<p>\u81f3\u4e8e\u4e3a\u5565 unsafe.Pointer \u663e\u793a\u7684\u7ed3\u679c\u662f\u4e00\u81f4\u7684\uff0c\u6211\u4e2a\u4eba\u731c\u6d4b\u662f\u56e0\u4e3a\u5b57\u7b26\u4e32\u5e38\u91cf\u6c60\uff08\u8fd9\u4e2a\u5f97\u53bb\u7ffb Golang \u7684\u7f16\u8bd1\u5668\uff0c\u4e00\u4f1a\u513f\u65e9\u4e0a\u6709\u4f1a\u5c31\u4e0d\u6df1\u6316\u4e86\uff09\uff0c\u5373\u76f8\u540c\u7684\u5b57\u7b26\u4e32\u4e0d\u4f1a\u5728\u5185\u5b58\u4e2d\u5b58\u5728\u4e24\u6b21\uff0c\u6709\u591a\u6b21\u5f15\u7528\u5c31\u628a\u4e0a\u9762 data \u7684\u6307\u9488\u6307\u5411\u5b9e\u9645\u5b58\u50a8\u6570\u636e\u7684 backing store \u3002\u8fd9\u662f\u4e00\u4e2a\u5e38\u89c1\u4f18\u5316\uff0cPython \u4e2d\u4e5f\u5b58\u5728\u3002                                                            <\/p><\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143567\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : Dganzh <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             \u5b57\u7b26\u4e32\u5b9e\u9645\u662f\u4e00\u4e2a**stuct<br \/>struct string {<br \/> byte* str;<br \/> intgo len;<br \/>}<\/p>\n<p>\u5927\u5c0f\u5c31\u662f 16<br \/>unsafe.Sizeof(s0) == 16                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143568\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : kiddingU <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             import (<br \/> &#8220;github.com\/davecgh\/go-spew\/spew&#8221;<br \/> &#8220;reflect&#8221;<br \/> &#8220;unsafe&#8221;<br \/>)<\/p>\n<p>func main() {<br \/> s0 := &#8220;something&#8221;<br \/> s1 := &#8220;something&#8221;<br \/> spew.Dump(&amp;s0)<br \/> spew.Dump(&amp;s1)<br \/> spew.Dump((*reflect.StringHeader)(unsafe.Pointer(&amp;s0)))<br \/> spew.Dump((*reflect.StringHeader)(unsafe.Pointer(&amp;s1)))<br \/>}<\/p>\n<p>&#8212;&#8212;&#8212;&#8212;&#8211;<br \/>(*string)(0xc0001042b0)((len=9) &#8220;something&#8221;)<br \/>(*string)(0xc0001042c0)((len=9) &#8220;something&#8221;)<br \/>(*reflect.StringHeader)(0xc0001042b0)({<br \/> Data: (uintptr) 0x1101229,<br \/> Len: (int) 9<br \/>})<br \/>(*reflect.StringHeader)(0xc0001042c0)({<br \/> Data: (uintptr) 0x1101229,<br \/> Len: (int) 9<br \/>})                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143569\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : kiddingU <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @yuguorui96 \u7f16\u8bd1\u4e00\u4e0b\uff0c\u53ef\u4ee5\u770b\u5230\uff0cgolang \u5bf9\u4e8e\u76f8\u540c\u7684\u5b57\u7b26\u4e32\u786e\u5b9e\u662f\u505a\u4e86\u4f18\u5316\u5904\u7406\uff0c\u53ea\u5b58\u4e00\u4efd\u7684                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li data-pid=\"5143570\" data-uid=\"2\">\n<div>\n<div>\n<div> <span>\u8cc7\u6df1\u5927\u4f6c : iQXQZX <\/span>  <\/div>\n<div> <i title=\"\u5f15\u7528\"><\/i>  <span>          <\/span> <\/div>\n<\/p><\/div>\n<div>                                                             @kiddingU \u5b66\u5230\u4e86                                                            <\/div>\n<\/p><\/div>\n<\/li>\n<li>\n","protected":false},"excerpt":{"rendered":"<p>golang \u7684\u6307\u9488\u5730\u5740\u95ee\u9898 \u8cc7\u6df1&hellip;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/305292"}],"collection":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=305292"}],"version-history":[{"count":0,"href":"http:\/\/4563.org\/index.php?rest_route=\/wp\/v2\/posts\/305292\/revisions"}],"wp:attachment":[{"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=305292"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=305292"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/4563.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=305292"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}