{"id":1137,"date":"2025-07-09T17:56:07","date_gmt":"2025-07-09T09:56:07","guid":{"rendered":"https:\/\/beijian99.top\/?p=1137"},"modified":"2025-07-14T15:34:44","modified_gmt":"2025-07-14T07:34:44","slug":"cgo%ef%bc%9ago-%e4%b8%8e-c-c-%e7%9a%84%e6%97%a0%e7%bc%9d%e9%9b%86%e6%88%90","status":"publish","type":"post","link":"https:\/\/beijian99.top\/?p=1137","title":{"rendered":"CGO\uff1aGo \u4e0e C\/C++ \u7684\u65e0\u7f1d\u96c6\u6210"},"content":{"rendered":"\n<p>CGO \u662f Go \u8bed\u8a00\u4e2d\u4e00\u9879\u5f3a\u5927\u7684\u529f\u80fd\uff0c\u5b83\u5141\u8bb8 Go \u7a0b\u5e8f\u76f4\u63a5\u8c03\u7528 C \u548c C++ \u7684\u4ee3\u7801\u3002\u672c\u6587\u5c06\u5168\u9762\u4ecb\u7ecd CGO \u7684\u6838\u5fc3\u6982\u5ff5\u3001\u6700\u4f73\u5b9e\u8df5\u4ee5\u53ca\u5e38\u89c1\u95ee\u9898\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u5e76\u901a\u8fc7\u4e00\u4e2a\u5b8c\u6574\u7684 Dijkstra \u7b97\u6cd5\u5b9e\u73b0\u6848\u4f8b\u5c55\u793a\u5176\u5b9e\u9645\u5e94\u7528\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. CGO \u57fa\u7840\u5165\u95e8<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 \u57fa\u672c\u8bed\u6cd5\u7ed3\u6784<\/h3>\n\n\n\n<p>\u5728 Go \u6587\u4ef6\u4e2d\u4f7f\u7528 CGO \u7684\u57fa\u672c\u683c\u5f0f\u5982\u4e0b\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n\/*\n\/\/ C \u6216 C++ \u4ee3\u7801\n#include &lt;stdio.h&gt;\n*\/\nimport &quot;C&quot;\n\nfunc main() {\n    C.puts(C.CString(&quot;Hello from CGO!&quot;))\n}\n<\/pre><\/div>\n\n\n<p>\u5173\u952e\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6ce8\u91ca\u5757\u4e2d\u7684\u4ee3\u7801\u7531 CGO \u5904\u7406<\/li>\n\n\n\n<li><code>import \"C\"<\/code> \u5fc5\u987b\u7d27\u8ddf\u5728\u6ce8\u91ca\u5757\u540e<\/li>\n\n\n\n<li>\u901a\u8fc7 <code>C.<\/code> \u524d\u7f00\u8bbf\u95ee C \u51fd\u6570\u548c\u7c7b\u578b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 \u7c7b\u578b\u7cfb\u7edf\u6620\u5c04<\/h3>\n\n\n\n<p>Go \u4e0e C \u7684\u7c7b\u578b\u5bf9\u5e94\u5173\u7cfb\uff1a<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Go \u7c7b\u578b<\/th><th>C \u7c7b\u578b<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td><code>C.char<\/code><\/td><td><code>char<\/code><\/td><td>\u5b57\u7b26\u7c7b\u578b<\/td><\/tr><tr><td><code>C.int<\/code><\/td><td>int<\/td><td>\u6574\u578b<\/td><\/tr><tr><td><code>C.float<\/code><\/td><td><code>float<\/code><\/td><td>\u5355\u7cbe\u5ea6\u6d6e\u70b9<\/td><\/tr><tr><td><code>*C.char<\/code><\/td><td><code>char*<\/code><\/td><td>C \u5b57\u7b26\u4e32<\/td><\/tr><tr><td><code>unsafe.Pointer<\/code><\/td><td><code>void*<\/code><\/td><td>\u901a\u7528\u6307\u9488<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">2. \u9ad8\u7ea7\u96c6\u6210\u6280\u672f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 \u8c03\u7528 C++ \u4ee3\u7801<\/h3>\n\n\n\n<p>\u8981\u8c03\u7528 C++ \u4ee3\u7801\uff0c\u9700\u8981\u7279\u522b\u6ce8\u610f\u540d\u79f0\u4fee\u9970\u548c\u5f02\u5e38\u5904\u7406\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n\/\/ mylib.h\n#ifdef __cplusplus\nextern &quot;C&quot; {\n#endif\n\nvoid cppFunction();\n\n#ifdef __cplusplus\n}\n#endif\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n\/*\n#cgo CXXFLAGS: -std=c++11\n#cgo LDFLAGS: -L. -lmylib\n#include &quot;mylib.h&quot;\n*\/\nimport &quot;C&quot;\n\nfunc main() {\n    C.cppFunction()\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">2.2 \u5185\u5b58\u7ba1\u7406\u6700\u4f73\u5b9e\u8df5<\/h3>\n\n\n\n<p>\u8de8\u8bed\u8a00\u5185\u5b58\u7ba1\u7406\u539f\u5219\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8c01\u5206\u914d\u8c01\u91ca\u653e<\/li>\n\n\n\n<li>\u4f7f\u7528 defer \u786e\u4fdd\u8d44\u6e90\u91ca\u653e<\/li>\n\n\n\n<li>\u907f\u514d\u8de8\u8bed\u8a00\u4f20\u9012\u590d\u6742\u5bf9\u8c61<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n\/*\n#include &lt;stdlib.h&gt;\n*\/\nimport &quot;C&quot;\nimport &quot;unsafe&quot;\n\nfunc main() {\n    cstr := C.CString(&quot;Hello&quot;)\n    defer C.free(unsafe.Pointer(cstr)) \/\/ \u786e\u4fdd\u91ca\u653e\n    \n    C.puts(cstr)\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">3. \u5b9e\u6218\u6848\u4f8b\uff1aDijkstra \u7b97\u6cd5\uff08\u5355\u6e90\u6700\u77ed\u8def\uff09\u96c6\u6210<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 C++ \u5b9e\u73b0<\/h3>\n\n\n\n<p>\u200b<strong>\u200bdijkstra.h\u200b<\/strong>\u200b:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n#ifndef DIJKSTRA_H\n#define DIJKSTRA_H\n\n#ifdef __cplusplus\nextern &quot;C&quot; {\n#endif\n\ntypedef struct {\n    int* path;\n    int length;\n    int total_cost;\n} PathResult;\n\nvoid free_path_result(PathResult* result);\nPathResult* dijkstra(int graph&#x5B;], int vertices, int start, int end);\n\n#ifdef __cplusplus\n}\n#endif\n\n#endif\n<\/pre><\/div>\n\n\n<p>\u200b<strong>\u200bdijkstra.cpp\u200b<\/strong>\u200b:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n#include &quot;dijkstra.h&quot;\n#include &lt;vector&gt;\n#include &lt;queue&gt;\n#include &lt;climits&gt;\n#include &lt;iostream&gt;\n#include &lt;algorithm&gt; \n\nusing namespace std;\n\n\/\/ \u4f18\u5148\u961f\u5217\u8282\u70b9\nstruct Node {\n    int vertex;\n    int distance;\n    bool operator&lt;(const Node&amp; other) const {\n        return distance &gt; other.distance; \/\/ \u6700\u5c0f\u5806\n    }\n};\n\nPathResult* dijkstra(int graph&#x5B;], int vertices, int start, int end) {\n    \/\/ \u521d\u59cb\u5316\u8ddd\u79bb\u548c\u524d\u9a71\u8282\u70b9\n    vector&lt;int&gt; dist(vertices, INT_MAX);\n    vector&lt;int&gt; prev(vertices, -1);\n    vector&lt;bool&gt; visited(vertices, false);\n\n    \/\/ \u4f7f\u7528\u90bb\u63a5\u77e9\u9635 (\u5047\u8bbegraph\u662fvertices\u00d7vertices\u7684\u4e00\u7ef4\u6570\u7ec4)\n    auto get_weight = &#x5B;&amp;](int u, int v) {\n        return graph&#x5B;u * vertices + v];\n    };\n\n    \/\/ \u4f18\u5148\u961f\u5217\n    priority_queue&lt;Node&gt; pq;\n    pq.push({start, 0});\n    dist&#x5B;start] = 0;\n\n    \/\/ Dijkstra\u7b97\u6cd5\u6838\u5fc3\n    while (!pq.empty()) {\n        Node current = pq.top();\n        pq.pop();\n\n        if (visited&#x5B;current.vertex]) continue;\n        visited&#x5B;current.vertex] = true;\n\n        for (int v = 0; v &lt; vertices; ++v) {\n            int weight = get_weight(current.vertex, v);\n            if (weight &gt; 0) { \/\/ \u6709\u8fb9\u5b58\u5728\n                int new_dist = dist&#x5B;current.vertex] + weight;\n                if (new_dist &lt; dist&#x5B;v]) {\n                    dist&#x5B;v] = new_dist;\n                    prev&#x5B;v] = current.vertex;\n                    pq.push({v, new_dist});\n                }\n            }\n        }\n    }\n\n    \/\/ \u6784\u5efa\u8fd4\u56de\u7ed3\u679c\n    PathResult* result = new PathResult();\n    result-&gt;total_cost = dist&#x5B;end];\n\n    \/\/ \u56de\u6eaf\u8def\u5f84\n    vector&lt;int&gt; path;\n    for (int at = end; at != -1; at = prev&#x5B;at]) {\n        path.push_back(at);\n    }\n    reverse(path.begin(), path.end());\n\n    \/\/ \u8f6c\u6362\u4e3aC\u6570\u7ec4\n    result-&gt;length = path.size();\n    result-&gt;path = new int&#x5B;path.size()];\n    copy(path.begin(), path.end(), result-&gt;path);\n\n    return result;\n}\n\nvoid free_path_result(PathResult* result) {\n    if (result) {\n        delete&#x5B;] result-&gt;path;\n        delete result;\n    }\n}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">3.2 Go \u8c03\u7528\u4ee3\u7801<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\npackage main\n\n\/*\n#cgo CXXFLAGS: -std=c++11\n#cgo LDFLAGS: -L. -ldijkstra\n#include &quot;dijkstra.h&quot;\n*\/\nimport &quot;C&quot;\nimport (\n\t&quot;fmt&quot;\n\t&quot;unsafe&quot;\n)\n\nfunc main() {\n\t\/\/ \u793a\u4f8b\u56fe (\u90bb\u63a5\u77e9\u9635)\n\tgraph := &#x5B;]int32{ \/\/ \u4f7f\u7528 int32 \u786e\u4fdd\u4e0e C.int \u5927\u5c0f\u4e00\u81f4\n\t\t0, 10, 0, 30, 100,\n\t\t0, 0, 50, 0, 0,\n\t\t0, 0, 0, 0, 10,\n\t\t0, 0, 20, 0, 60,\n\t\t0, 0, 0, 0, 0,\n\t}\n\n\t\/\/ \u8f6c\u6362\u4e3a C \u517c\u5bb9\u7c7b\u578b\n\tcGraph := (*C.int)(unsafe.Pointer(&amp;graph&#x5B;0]))\n\tvertices := C.int(5)\n\tstart := C.int(0)\n\tend := C.int(4)\n\n\t\/\/ \u8c03\u7528 Dijkstra\n\tresult := C.dijkstra(cGraph, vertices, start, end)\n\tdefer C.free_path_result(result)\n\n\t\/\/ \u5904\u7406\u7ed3\u679c\n\tpath := (*&#x5B;1 &lt;&lt; 30]C.int)(unsafe.Pointer(result.path))&#x5B;:result.length:result.length]\n\tgoPath := make(&#x5B;]int, result.length)\n\tfor i := range goPath {\n\t\tgoPath&#x5B;i] = int(path&#x5B;i])\n\t}\n\n\tfmt.Printf(&quot;Shortest path from %d to %d:\\n&quot;, start, end)\n\tfmt.Println(&quot;Path:&quot;, goPath)\n\tfmt.Println(&quot;Total cost:&quot;, result.total_cost)\n}\n\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">4. \u8de8\u5e73\u53f0\u7f16\u8bd1\u6307\u5357<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Windows \u7cfb\u7edf<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"337\" height=\"319\" src=\"https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-11.png\" alt=\"\" class=\"wp-image-1144\" srcset=\"https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-11.png 337w, https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-11-300x284.png 300w\" sizes=\"auto, (max-width: 337px) 100vw, 337px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"161\" src=\"https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-9-1024x161.png\" alt=\"\" class=\"wp-image-1142\" srcset=\"https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-9-1024x161.png 1024w, https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-9-300x47.png 300w, https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-9-768x121.png 768w, https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-9.png 1111w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# \u7f16\u8bd1 DLL\ng++ -std=c++11 -shared dijkstra.cpp -o dijkstra.dll -Wl,--out-implib,libdijkstra.a\n\n# \u7f16\u8bd1 Go\nset CGO_CXXFLAGS=-std=c++11\ngo build\n\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">4.2 Linux\/macOS \u7cfb\u7edf<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n# \u7f16\u8bd1 SO\ng++ -std=c++11 -fPIC -shared dijkstra.cpp -o libdijkstra.so\n\n# \u7f16\u8bd1 Go\nCGO_CXXFLAGS=&quot;-std=c++11&quot; go build\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">5. \u6027\u80fd\u4f18\u5316\u6280\u5de7<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u200b<strong>\u200b\u51cf\u5c11\u8de8\u8bed\u8a00\u8c03\u7528\u200b<\/strong>\u200b\uff1a\u6279\u91cf\u5904\u7406\u6570\u636e<\/li>\n\n\n\n<li>\u200b<strong>\u200b\u5185\u5b58\u6c60\u6280\u672f\u200b<\/strong>\u200b\uff1a\u91cd\u7528\u5df2\u5206\u914d\u5185\u5b58<\/li>\n\n\n\n<li>\u200b<strong>\u200b\u5e76\u884c\u5904\u7406\u200b<\/strong>\u200b\uff1a\u7ed3\u5408 Go \u7684 goroutine<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n\/*\nstatic inline int fastAdd(int a, int b) {\n    return a + b;\n}\n*\/\nimport &quot;C&quot;\n\nfunc batchAdd(a, b &#x5B;]int32) &#x5B;]int32 {\n    result := make(&#x5B;]int32, len(a))\n    for i := range a {\n        result&#x5B;i] = int32(C.fastAdd(C.int(a&#x5B;i]), C.int(b&#x5B;i])))\n    }\n    return result\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">6. \u5e38\u89c1\u95ee\u9898\u89e3\u51b3\u65b9\u6848<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u95ee\u98981\uff1a\u7c7b\u578b\u8f6c\u6362\u9519\u8bef<\/h3>\n\n\n\n<p>\u200b<strong>\u200b\u9519\u8bef\u4fe1\u606f\u200b<\/strong>\u200b\uff1a<code>cannot convert &amp;graph[0] (value of type *int) to type *_Ctype_int<\/code><\/p>\n\n\n\n<p>\u200b<strong>\u200b\u89e3\u51b3\u65b9\u6848\u200b<\/strong>\u200b\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/\/ \u4f7f\u7528 int32 \u786e\u4fdd\u5e73\u53f0\u4e00\u81f4\u6027\ngraph := &#x5B;]int32{...} \ncGraph := (*C.int)(unsafe.Pointer(&amp;amp;graph&#x5B;0]))\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u95ee\u98982\uff1aC++ \u6807\u51c6\u5e93\u7f3a\u5931<\/h3>\n\n\n\n<p>\u200b<strong>\u200b\u9519\u8bef\u4fe1\u606f\u200b<\/strong>\u200b\uff1a<code>fatal error: vector: No such file or directory<\/code><\/p>\n\n\n\n<p>\u200b<strong>\u200b\u89e3\u51b3\u65b9\u6848\u200b<\/strong>\u200b\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/*\n#cgo CXXFLAGS: -std=c++11\n*\/\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u95ee\u98983\uff1a\u94fe\u63a5\u9519\u8bef<\/h3>\n\n\n\n<p>\u200b<strong>\u200b\u9519\u8bef\u4fe1\u606f\u200b<\/strong>\u200b\uff1a<code>undefined reference to 'dijkstra'<\/code><\/p>\n\n\n\n<p>\u200b<strong>\u200b\u89e3\u51b3\u65b9\u6848\u200b<\/strong>\u200b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u68c0\u67e5\u51fd\u6570\u662f\u5426\u6b63\u786e\u5b9a\u4e49\u4e3a <code>extern \"C\"<\/code><\/li>\n\n\n\n<li>\u786e\u4fdd\u7f16\u8bd1\u65f6\u94fe\u63a5\u4e86\u6b63\u786e\u7684\u5e93\u6587\u4ef6<\/li>\n\n\n\n<li>\u9a8c\u8bc1\u51fd\u6570\u7b7e\u540d\u662f\u5426\u4e00\u81f4<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">7. \u5b89\u5168\u6ce8\u610f\u4e8b\u9879<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u200b<strong>\u200b\u6307\u9488\u5b89\u5168\u200b<\/strong>\u200b\uff1a\u4f7f\u7528 <code>unsafe.Pointer<\/code> \u65f6\u8981\u7279\u522b\u5c0f\u5fc3<\/li>\n\n\n\n<li>\u200b<strong>\u200b\u8fb9\u754c\u68c0\u67e5\u200b<\/strong>\u200b\uff1a\u786e\u4fdd\u6570\u7ec4\u8bbf\u95ee\u4e0d\u8d8a\u754c<\/li>\n\n\n\n<li>\u200b<strong>\u200b\u9519\u8bef\u5904\u7406\u200b<\/strong>\u200b\uff1a\u68c0\u67e5 C \u51fd\u6570\u8fd4\u56de\u503c<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: go; title: ; notranslate\" title=\"\">\n\/*\n#include &lt;errno.h&gt;\n*\/\nimport &quot;C&quot;\nimport &quot;syscall&quot;\n\nfunc safeCall() error {\n    if C.some_function() == -1 {\n        return syscall.Errno(C.errno)\n    }\n    return nil\n}\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">\u7ed3\u8bed<\/h2>\n\n\n\n<p>CGO \u4e3a Go \u7a0b\u5e8f\u63d0\u4f9b\u4e86\u5f3a\u5927\u7684\u6269\u5c55\u80fd\u529b\uff0c\u4f7f\u5176\u80fd\u591f\u5229\u7528\u73b0\u6709\u7684 C\/C++ \u751f\u6001\u3002<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"612\" height=\"346\" src=\"https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-12.png\" alt=\"\" class=\"wp-image-1146\" srcset=\"https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-12.png 612w, https:\/\/beijian99.top\/wp-content\/uploads\/2025\/07\/image-12-300x170.png 300w\" sizes=\"auto, (max-width: 612px) 100vw, 612px\" \/><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>CGO \u662f Go \u8bed\u8a00\u4e2d\u4e00\u9879\u5f3a\u5927\u7684\u529f\u80fd\uff0c\u5b83\u5141\u8bb8 Go \u7a0b\u5e8f\u76f4\u63a5\u8c03\u7528 C \u548c C++ \u7684\u4ee3\u7801\u3002\u672c\u6587\u5c06\u5168\u9762\u4ecb\u7ecd C [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1146,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[153,121],"tags":[161],"class_list":["post-1137","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cpp","category-golang","tag-cgo"],"_links":{"self":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/1137","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1137"}],"version-history":[{"count":7,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/1137\/revisions"}],"predecessor-version":[{"id":1150,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/1137\/revisions\/1150"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/media\/1146"}],"wp:attachment":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1137"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1137"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1137"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}