{"id":10006474,"date":"2022-09-14T11:27:36","date_gmt":"2022-09-14T03:27:36","guid":{"rendered":"https:\/\/ityet.com\/?p=10006474"},"modified":"2022-09-14T11:27:36","modified_gmt":"2022-09-14T03:27:36","slug":"%e9%87%8c%e7%a8%8b%e7%a2%91%ef%bc%81%e7%94%a8%e8%87%aa%e5%b7%b1%e7%9a%84%e7%bc%96%e7%a8%8b%e8%af%ad%e8%a8%80%e5%ae%9e%e7%8e%b0%e4%ba%86%e4%b8%80%e4%b8%aa%e7%bd%91%e7%ab%99","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10006474","title":{"rendered":"\u91cc\u7a0b\u7891\uff01\u7528\u81ea\u5df1\u7684\u7f16\u7a0b\u8bed\u8a00\u5b9e\u73b0\u4e86\u4e00\u4e2a\u7f51\u7ad9"},"content":{"rendered":"<h2>\u524d\u8a00<\/h2>\n<p>\u5728\u4e0a\u4e00\u7bc7<a href=\"https:\/\/link.segmentfault.com\/?enc=hYTzA%2BbVvkWgnUnbjIfm0w%3D%3D.ZultBhiQYN9Z8kpYP6D2tJ8Agl6iy%2F3c8OdiUyH3JAwjU2Rd4rE%2Fhbr2nyrqmPSXF%2BsNAIA0hSVPkhOce5p9WQ%3D%3D\" rel=\"nofollow\">\u300a\u7ec8\u4e8e\u5b9e\u73b0\u4e86\u4e00\u95e8\u5c5e\u4e8e\u81ea\u5df1\u7684\u7f16\u7a0b\u8bed\u8a00\u300b<\/a> \u4ecb\u7ecd\u4e86\u81ea\u5df1\u5199\u7684\u7f16\u7a0b\u8bed\u8a00 <a href=\"https:\/\/link.segmentfault.com\/?enc=FR8oKncV3y0LFzTqPjwtXQ%3D%3D.9pJ6rwFNVZHoRxsynB5f9Yc4bRb4xzSoRPH95Pr4Wex8guRzgY%2FjvFubDsiSp27x\" rel=\"nofollow\">GScript<\/a> \uff0c\u5728\u6587\u4e2d\u63d0\u5230\u5e0c\u671b\u6700\u7ec8\u53ef\u4ee5\u4f7f\u7528 <code>GScript<\/code> \u5f00\u53d1\u4e00\u4e2a\u7f51\u7ad9\u3002<\/p>\n<p>\u5230\u76ee\u524d\u4e3a\u6b62\u786e\u5b9e\u662f\u505a\u5230\u4e86\uff0c\u9996\u9875\u5730\u5740\uff1a<\/p>\n<p><a href=\"https:\/\/link.segmentfault.com\/?enc=pcHUlcxWwA5eYoOvEEcReA%3D%3D.yVLdyKx4MpjAuTD4OMTIIPwA1Pa05%2FwJ2A3D4llH8sXBrq3KIk5Nhn4REMzdO6EP\" rel=\"nofollow\">https:\/\/gscript.crossoverjie.top\/index<\/a><\/p>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000042473465\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u8981\u79f0\u4e3a\u4e00\u4e2a\u7f51\u7ad9\u786e\u5b9e\u6709\u70b9\u52c9\u5f3a\uff0c\u4e0d\u8fc7\u4e5f\u662f\u4e00\u4e2a\u52a8\u6001\u7f51\u9875\uff0c\u56e0\u4e3a\u8fd4\u56de\u7684\u662f <code>HTML<\/code>\uff0c\u6240\u4ee5\u5728\u5f53\u524d\u9636\u6bb5\u53ea\u8981\u4e0d\u5acc\u9ebb\u70e6\u5176\u5b9e\u4e5f\u80fd\u5199\u4e00\u4e2a\u201c\u5408\u683c\u201d\u7684\u7f51\u7ad9\uff0c\u6709\u70b9\u50cf\u4ee5\u524d\u6211\u4eec\u5b66\u4e60 <code>Java<\/code> \u65f6\u7684 <code>servlet<\/code>\u3002<\/p>\n<p>\u8be5\u9875\u9762\u7684\u6e90\u7801\u5730\u5740\u5728\u8fd9\u91cc\uff1a<br \/><a href=\"https:\/\/link.segmentfault.com\/?enc=xF5zy%2FYMD4cWiGhsQ%2B89Iw%3D%3D.0fBb7Yk95rF%2FQW75UKOSFVav6HISjNeYrGURl%2F2vDBPL8Rm4z2%2BozI0hi1EhiubJiF8xseDS6qWOQH98VhugHw%3D%3D\" rel=\"nofollow\">https:\/\/github.com\/crossoverjie\/gscript-homepage<\/a><\/p>\n<p>\u5176\u5b9e\u603b\u5171\u4e5f\u5c3140\u6765\u884c\u4ee3\u7801\uff1a<\/p>\n<pre><code class=\"js\">class GScript{\n    string author;\n    string[] features;\n    string since;\n\n    GScript(string a, string[] f, string s){\n        author = a;\n        features = f;\n        since = s;\n    }\n}\n\nfunc (HttpContext) index(HttpContext ctx){\n    string[] features = {&quot;statically&quot;, &quot;strongly&quot;};\n    GScript gs = GScript(&quot;crossoverJie&quot;,features, &quot;2022&quot;);\n    string j = JSON(gs);\n    println(j);\n    string local = getCurrentTime(&quot;Asia\/Shanghai&quot;,&quot;2006-01-02 15:04:05&quot;);\n    println(&quot;local=&quot; + local);\n    string html = ^\n        &lt;html&gt;\n            &lt;title&gt;GScript&lt;\/title&gt;\n            &lt;pre&gt;\n                 _     _   \n ___ ___ ___ ___|_|___| |_ \n| . |_ -|  _|  _| | . |  _|\n|_  |___|___|_| |_|  _|_|  \n|___|             |_|   v0.0.7   \n\n^+ j +^\n            &lt;\/pre&gt;\n            &lt;h1&gt;current ^+ local +^&lt;\/h1&gt;\n            &lt;p&gt;&lt;a href=&quot;https:\/\/github.com\/crossoverjie\/gscript-homepage&quot;&gt;GScript-homepace source code&lt;\/a&gt;&lt;\/p&gt;\n        &lt;\/html&gt;\n    ^;\n    ctx.HTML(200, html);\n}\n\nhttpHandle(&quot;GET&quot;, &quot;\/index&quot;, index);\nstring[] args = getOSArgs();\nif (len(args) ==3){\n    httpRun(&quot;:&quot; + args[2]);\n}else {\n    httpRun(&quot;:8000&quot;);\n}<\/code><\/pre>\n<p>\u5168\u662f\u5229\u7528 <code>GScript<\/code> \u6240\u63d0\u4f9b\u7684\u6807\u51c6\u5e93\u5b9e\u73b0\u7684\uff0c\u540e\u6587\u4f1a\u8be6\u7ec6\u804a\u804a\u5185\u7f6e HTTP \u5305\u3002<\/p>\n<h2>\u66f4\u65b0\u5185\u5bb9<\/h2>\n<p>\u4e0b\u9762\u91cd\u70b9\u6765\u770b\u770b <code>v0.0.8<\/code> \u8fd9\u4e2a\u7248\u672c\u76f8\u8f83\u4e8e\u4e0a\u4e00\u4e2a\u66f4\u65b0\u4e86\u54ea\u4e9b\u5730\u65b9\u3002<\/p>\n<p>\u56e0\u4e3a\u6211\u662f\u628a\u81ea\u5df1\u5f53\u505a\u4e00\u4e2a\u5f00\u53d1\u8005\u7684\u89d2\u5ea6\u53bb\u5b9e\u73b0\u4e86\u4e00\u4e2a http \u670d\u52a1\uff0c\u540c\u65f6\u8fd8\u7528 <code>GScript<\/code> \u5237\u4e86\u4e24\u9053\u7b80\u5355\u7684 LeetCode\uff1b\u4e3a\u4e86\u8ba9\u8fd9\u4e2a\u8fc7\u7a0b\u66f4\u6d41\u7545\uff0c\u66f4\u7b26\u5408\u4e00\u4e2a\u73b0\u4ee3\u8bed\u8a00\u7684\u4f7f\u7528\u65b9\u5f0f\uff0c\u6240\u4ee5\u672c\u6b21\u771f\u7684\u66f4\u65b0\u4e0d\u5c11\u4e1c\u897f\u3002<\/p>\n<blockquote><p>\u5237\u9898\u6e90\u7801\uff1a<a href=\"https:\/\/link.segmentfault.com\/?enc=06FcjkRCYNZdEghTrXHnTw%3D%3D.kqXfkKM3AK2O92owm4RNF5C1vNWNUnXlmuX5mWMmNR3gD1jumCZ%2BtmBVTJNSjUQaEgIoMCmUlDVa0HHAen6%2BND3keq02UpIprOIoUX7HfOA%3D\" rel=\"nofollow\">https:\/\/github.com\/crossoverJie\/gscript\/tree\/main\/example\/leetcode<\/a><\/p><\/blockquote>\n<p>\u5927\u6982\u5982\u4e0b\uff1a<\/p>\n<ul>\n<li><code>any<\/code> \u7c7b\u578b\u7684\u652f\u6301\uff0c\u7b80\u5316\u6807\u51c6\u5e93\u7684\u5b9e\u73b0\u3002<\/li>\n<li>\u53ef\u4ee5\u7528 <code>^^<\/code> \u6765\u58f0\u660e\u591a\u884c\u5b57\u7b26\u4e32\uff0c\u65b9\u4fbf\u58f0\u660e\u590d\u6742\u5b57\u7b26\u4e32\u3002<\/li>\n<li>\u66f4\u5b8c\u5584\u7684\u7c7b\u578b\u63a8\u5bfc\uff0c\u4fee\u590d\u4e86\u4e0a\u4e2a\u7248\u672c\u4e2d\u67d0\u4e9b\u60c5\u51b5\u63a8\u5bfc\u4e0d\u51fa\u7c7b\u578b\u7684bug\u3002<\/li>\n<li>\u652f\u6301\u8fd0\u7b97\u7b26\u91cd\u8f7d\u3002<\/li>\n<li>\u57fa\u672c\u7684 http \u5305\uff0c\u53ef\u4ee5\u5f00\u53d1\u51fa http \u670d\u52a1\uff0c\u76ee\u524d\u80fd\u54cd\u5e94 <code>JSON<\/code> \u4ee5\u53ca <code>HTML<\/code>\u3002<\/li>\n<li>\u65b0\u589e\u5185\u7f6e\u51fd\u6570\uff1a\u6839\u636e\u65f6\u533a\u83b7\u53d6\u5f53\u524d\u65f6\u95f4\u3001\u83b7\u53d6\u5e94\u7528\u542f\u52a8\u53c2\u6570\u7b49\u3002<\/li>\n<li><code>JSON<\/code> \u7684\u5e8f\u5217\u8868\u4ee5\u53ca\u67e5\u8be2\uff0c\u8bed\u6cd5\u7ea7\u9002\u914d\u4e86 <a href=\"https:\/\/link.segmentfault.com\/?enc=O1LAX1mt8bfDqsqAARLTrg%3D%3D.doLRjhTvSszkaMG9BplPtMnXt%2BKnnO5XUZ1yIKQjAVZh%2BghLED%2FmzOGRZjny6oFT\" rel=\"nofollow\">XJSON<\/a>\u3002<\/li>\n<li>\u4fee\u590d\u4e86\u5728\u591a\u4e2a <code>block<\/code> \u5d4c\u5957\u60c5\u51b5\u4e0b\u4e0d\u80fd\u6b63\u786e <code>return<\/code> \u7684 bug\u3002<\/li>\n<\/ul>\n<p>\u5176\u5b9e\u4ece\u8fd9\u4e9b\u66f4\u65b0\u4e2d\u4e5f\u80fd\u770b\u51fa\uff0c\u4e0a\u4e2a\u7248\u672c\u53ea\u662f\u4e00\u4e2a\u7b80\u5355\u80fd\u7528\u7684\u72b6\u6001\uff0c\u800c\u73b0\u5728\u8fd9\u4e2a\u7248\u672c\u5df2\u7ecf\u53ef\u4ee5\u62ff\u6765\u5199\u590d\u6742\u903b\u8f91\u4e86\uff0c\u5f53\u7136\u76ee\u524d\u8fd8\u7f3a\u4e4f\u4e00\u4e9b\u66f4\u53cb\u597d\u7684\u7f16\u8bd1\u63d0\u793a\u4ee5\u53ca\u8fd0\u884c\u65f6\u9519\u8bef\u3002<\/p>\n<p>\u4e0b\u9762\u4ed4\u7ec6\u804a\u804a\u4e00\u4e9b\u66f4\u65b0\u5185\u5bb9\u3002<\/p>\n<h3>any \u7c7b\u578b<\/h3>\n<p>\u9996\u5148\u662f <code>any<\/code> \u901a\u7528\u7c7b\u578b\uff0c\u8fd9\u4e2a\u7c7b\u4f3c\u4e8e Java \u4e2d\u7684 <code>Object<\/code> \u548c Go \u4e2d\u7684 <code>interface{}<\/code>,\u6781\u5927\u7684\u65b9\u4fbf\u4e86\u6211\u4eec\u7f16\u5199\u4e00\u4e9b\u6807\u51c6\u5e93\u3002<\/p>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000042473466\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<p>\u4ee5\u4e4b\u524d\u5185\u7f6e\u7684 hash \u548c len \u51fd\u6570\u4e3a\u4f8b\uff0c\u9700\u8981\u5bf9\u6bcf\u79cd\u7c7b\u578b\u90fd\u5b9e\u73b0\u4e00\u904d\uff0c\u975e\u5e38\u9ebb\u70e6\u800c\u4e14\u6beb\u65e0\u5fc5\u8981\uff1b\u73b0\u5728\u53ea\u9700\u8981\u5b9a\u4e49\u4e00\u6b21\u5373\u53ef\uff0c\u4ee3\u7801\u91cf\u76f4\u63a5\u7701\u51e0\u500d\u3002<\/p>\n<p><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000042473467\" alt=\"\" title=\"\" loading=\"lazy\"><br \/>\u540c\u7406\uff0c\u4e4b\u524d\u5b9e\u73b0\u7684 Map \u53ea\u652f\u6301\u5b58\u653e string \u7c7b\u578b\uff0c\u73b0\u5728\u4fbf\u80fd\u5b58\u653e\u4efb\u4f55\u7c7b\u578b\u7684\u6570\u636e\u3002<\/p>\n<blockquote><p>\u5bf9 any \u7684\u5b9e\u73b0\u8fc7\u7a0b\u611f\u5174\u8da3\u7684\u670b\u53cb\uff0c\u4eca\u540e\u53ef\u4ee5\u5355\u72ec\u5206\u4eab\u4e00\u4e0b\u3002<\/p><\/blockquote>\n<h3>\u8fd0\u7b97\u7b26\u91cd\u8f7d<\/h3>\n<p>\u5199 go \u6216\u8005\u662f Java \u7684\u670b\u53cb\u5e94\u8be5\u77e5\u9053\uff0c\u8fd9\u4e24\u95e8\u8bed\u8a00\u90fd\u65e0\u6cd5\u5bf9\u4e24\u4e2a\u5bf9\u8c61\u8fdb\u884c\u8fd0\u7b97\uff0c\u7f16\u8bd1\u5668\u4f1a\u76f4\u63a5\u62a5\u9519\u3002<\/p>\n<p>\u4f46\u5728\u4e00\u4e9b\u7279\u6b8a\u573a\u666f\u4e0b\u8fd8\u662f\u86ee\u597d\u7528\u7684\uff0c\u4e8e\u662f\u6211\u53c2\u8003\u4e86 <code>C#<\/code> \u7684\u8bed\u6cd5\u5728 <code>GScript<\/code> \u4e2d\u4e5f\u5b9e\u73b0\u4e86\u3002<\/p>\n<pre><code class=\"js\">class Person{\n    int age;\n    Person(int a){\n        age = a;\n    }\n}\nPerson operator + (Person p1, Person p2){\n    Person pp = Person(p1.age+p2.age);\n    return pp;\n}\nPerson operator - (Person p1, Person p2){\n    Person pp = Person(p1.age-p2.age);\n    return pp;\n}\nPerson p1 = Person(10);\nPerson p2 = Person(20);\nPerson p3 = p1+p2;\nprintln(&quot;p3.age=&quot;+p3.age);\nassertEqual(p3.age, 30);<\/code><\/pre>\n<p>\u58f0\u660e\u7684\u51fd\u6570\u540d\u79f0\u5fc5\u987b\u4e3a <code>operator<\/code>\uff0c\u4e4b\u540e\u8ddf\u4e0a\u8fd0\u7b97\u7b26\u4fbf\u5b9e\u73b0\u4e86\u91cd\u8f7d\u3002<\/p>\n<p>\u652f\u6301\u7684\u8fd0\u7b97\u7b26\u6709\uff1a<code>+-*\/ &lt; &gt;= &lt;= &gt; ==<\/code>\u3002<\/p>\n<h3>JSON\u652f\u6301<\/h3>\n<p>\u5f53\u524d\u7248\u672c\u4e2d\u652f\u6301\u5c06\u5bf9\u8c61\u3001\u57fa\u672c\u7c7b\u578b\u8fdb\u884c\u5e8f\u5217\u5316\uff0c\u6682\u4e0d\u652f\u6301\u53cd\u5e8f\u5217\u5316\u4e3a\u5bf9\u8c61\uff0c\u4f46\u53ef\u4ee5\u6839\u636e <code>JSON<\/code> \u5b57\u7b26\u4e32\u901a\u8fc7\u4e00\u5b9a\u7684\u8bed\u6cd5\u67e5\u8be2\u6570\u636e\u3002<\/p>\n<p>\u5185\u7f6e\u4e86\u4e24\u4e2a JSON \u76f8\u5173\u51fd\u6570\uff1a<\/p>\n<pre><code class=\"js\">\/\/ return JSON string\nstring JSON(any a){}\n\/\/ JSON query with path\nany JSONGet(string json, string path){}<\/code><\/pre>\n<pre><code class=\"js\">class Person{\n    int age;\n    string name;\n    float weight;\n    bool man;\n    Person(string n, int a, float w, bool m){\n        name = n;\n        age = a;\n        weight = w;\n        man =m;\n    }\n}\nPerson p1 = Person(&quot;abc&quot;,10,99.99,true);\nPerson p2 = Person(&quot;a&quot;,11,999.99,false);\nstring json = JSON(p1);\nprintln(json);\n\/\/ output:{&quot;age&quot;:10,&quot;man&quot;:true,&quot;name&quot;:&quot;abc&quot;,&quot;weight&quot;:99.99}<\/code><\/pre>\n<p>\u4ee5\u8fd9\u6bb5\u4ee3\u7801\u4e3a\u4f8b\uff0c\u8c03\u7528 <code>JSON<\/code> \u51fd\u6570\u53ef\u4ee5\u5c06\u5bf9\u8c61\u5e8f\u5217\u5316\u4e3a <code>JSON<\/code> \u5b57\u7b26\u4e32\u3002<\/p>\n<hr>\n<pre><code class=\"js\">class Person{\n    int age;\n    string name;\n    float weight;\n    bool man;\n    Person(string n, int a, float w, bool m){\n        name = n;\n        age = a;\n        weight = w;\n        man =m;\n    }\n}\nPerson p1 = Person(&quot;abc&quot;,10,99.99,true);\nstring json = JSON(p1);\nprintln(json);\n\nint age = JSONGet(json, &quot;age&quot;);\nprintln(age);\nassertEqual(age,10);<\/code><\/pre>\n<p>\u4f7f\u7528 <code>JSONGet<\/code> \u51fd\u6570\u53ef\u4ee5\u5728\u4e00\u4e2a JSON \u5b57\u7b26\u4e32\u4e2d\u67e5\u8be2\u4efb\u610f\u7684\u6570\u636e\uff0c\u8fd9\u4e2a\u529f\u80fd\u662f\u901a\u8fc7\u9002\u914d <a href=\"https:\/\/link.segmentfault.com\/?enc=W9hbeW3gnrUXBsf8Zv6bQQ%3D%3D.y%2FXlYrt6PE0vjjUlD7jVWCmEDeb0C46S9FF3kKYiiSnoM8fx1ePK03r31IPFiDmI\" rel=\"nofollow\">XJSON<\/a> \u5b9e\u73b0\u7684\uff0c\u6240\u4ee5 <code>XJSON<\/code> \u652f\u6301\u7684\u67e5\u8be2\u8bed\u6cd5\u90fd\u80fd\u5b9e\u73b0\u3002<\/p>\n<pre><code class=\"js\">string j=^{&quot;age&quot;:10, &quot;abc&quot;:{&quot;def&quot;:&quot;def&quot;},&quot;list&quot;:[1,2,3]}^;\nString def = JSONGet(j, &quot;abc.def&quot;);\nprintln(def);\nassertEqual(def,&quot;def&quot;);\nint l1 = JSONGet(j, &quot;list[0]&quot;);\nprintln(l1);\nassertEqual(l1,1);\n\nstring str=^\n{\n    &quot;name&quot;: &quot;bob&quot;,\n    &quot;age&quot;: 20,\n    &quot;skill&quot;: {\n        &quot;lang&quot;: [\n            {\n                &quot;go&quot;: {\n                    &quot;feature&quot;: [\n                        &quot;goroutine&quot;,\n                        &quot;channel&quot;,\n                        &quot;simple&quot;,\n                        true\n                    ]\n                }\n            }\n        ]\n    }\n}\n^;\nString g = JSONGet(str, &quot;skill.lang[0].go.feature[0]&quot;);\nprintln(g);\nassertEqual(g,&quot;goroutine&quot;);<\/code><\/pre>\n<p>\u6bd4\u5982\u8fd9\u6837\u590d\u6742\u7684\u5d4c\u5957 <code>JSON<\/code>\uff0c\u4e5f\u80fd\u901a\u8fc7\u67e5\u8be2\u8bed\u6cd5\u83b7\u53d6\u6570\u636e\u3002<\/p>\n<h3>HTTP \u5305<\/h3>\n<p>HTTP \u5305\u662f\u672c\u6b21\u5347\u7ea7\u7684\u91cd\u70b9\uff0c\u6807\u51c6\u5e93\u4e2d\u63d0\u4f9b\u4e86\u4ee5\u4e0b\u51fd\u6570\u548c\u7c7b\uff1a<\/p>\n<pre><code class=\"js\">\/\/ http lib\n\/\/ Response json\nFprintfJSON(int code, string path, string json){}\n\/\/ Resonse html\nFprintfHTML(int code, string path, string html){}\n\n\/\/ path (relative paths may omit leading slash)\nstring QueryPath(string path){}\n\nstring FormValue(string path, string key){}\nclass HttpContext{\n    string path;\n    JSON(int code, any v){\n        string json = JSON(v);\n        FprintfJSON(code, path, json);\n    }\n    HTML(int code, any v) {\n        string html = v;\n        FprintfHTML(code, path, html);\n    }\n    string queryPath() {\n        string p = QueryPath(path);\n        return p;\n    }\n\n    string formValue(string key){\n        string v = FormValue(path, key);\n        return v;\n    }\n}\n\/\/ Bind route\nhttpHandle(string method, string path, func (HttpContext) handle){\n    \/\/ println(&quot;path=&quot;+path);\n    HttpContext ctx = HttpContext();\n    handle(ctx);\n}\n\/\/ Run http server.\nhttpRun(string addr){}<\/code><\/pre>\n<p>\u5177\u4f53\u7684\u4f7f\u7528\u6d41\u7a0b\uff1a<\/p>\n<ol>\n<li>\u901a\u8fc7\u5b9a\u4e49\u4e00\u4e2a\u51fd\u6570\u53d8\u91cf\u5b9e\u73b0\u81ea\u5df1\u7684\u4e1a\u52a1\u903b\u8f91\u3002<\/li>\n<li>\u6ce8\u518c\u8def\u7531\u3002<\/li>\n<li>\u542f\u52a8 HTTP \u670d\u52a1\u3002<\/li>\n<\/ol>\n<p>\u5728\u81ea\u5df1\u7684 <code>handle<\/code> \u4e2d\u53ef\u4ee5\u901a\u8fc7 <code>HttpContext<\/code> \u5bf9\u8c61\u62ff\u5230\u8bf7\u6c42\u4e0a\u4e0b\u6587\uff0c\u53ef\u4ee5\u83b7\u53d6\u8bf7\u6c42\u53c2\u6570\u4ee5\u53ca\u54cd\u5e94\u6570\u636e\u3002<br \/>\u5177\u4f53\u4f7f\u7528\u793a\u4f8b\u53ef\u4ee5\u53c2\u8003\u8fd9\u4efd\u4ee3\u7801\u3002<br \/><img decoding=\"async\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000042473468\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u672c\u6b21\u66f4\u65b0\u6bd4\u6211\u9884\u671f\u7684\u8981\u987a\u5229\u4e00\u4e9b\uff0c\u56e0\u4e3a\u8bed\u6cd5\u6811\u548c\u7f16\u8bd1\u5668\u5df2\u7ecf\u57fa\u672c\u5b9e\u73b0\u5b8c\u6bd5\uff0c\u4e0d\u4f1a\u600e\u4e48\u6539\u4e86\uff0c\u73b0\u5728\u65b0\u589e\u7684\u7279\u6027\u65e0\u975e\u5c31\u662f\u8fd0\u884c\u65f6\u5b9e\u73b0\u4e00\u4e9b\u8bed\u6cd5\u7cd6\uff0c\u5927\u90e8\u5206\u90fd\u662f\u4f53\u529b\u52b3\u52a8\uff1b\u53ef\u80fd\u662f\u65b0\u9c9c\u611f\u5e26\u6765\u7684\u5174\u594b\u5242\u6548\u679c\uff0c\u5927\u90e8\u5206\u65f6\u95f4\u90fd\u662f\u75db\u5e76\u5feb\u4e50\u7740\u3002<\/p>\n<p>\u6bd4\u5982\u8fd9\u4e24\u5929\u4e3b\u8981\u5c31\u662f\u5728\u4fee\u590d\u591a\u5c42 <code>block<\/code> \u5d4c\u5957\u65f6\u9047\u5230 <code>return<\/code> \u8bed\u53e5\u65e0\u6cd5\u6b63\u786e\u8fd4\u56de\u7684 bug\uff0c\u6b7b\u6d3b\u6298\u817e\u4e86\u4e24\u591c\uff1b\u7ec8\u4e8e\u5728\u65e0\u6570\u6b21\u5206\u6790 AST \u627e\u5230\u4e86\u89e3\u51b3\u65b9\u6848\uff0c\u73b0\u5728\u60f3\u60f3\u786e\u5b9e\u8fd8\u662f\u76f8\u5173\u7ecf\u9a8c\u592a\u5c11\u3002<\/p>\n<blockquote><p>\u5bf9\u8fd9\u4e2a Bug \u611f\u5174\u8da3\u7684\u670b\u53cb\u53ef\u4ee5\u70b9\u4e2a\u8d5e\uff0c\u540e\u9762\u53ef\u4ee5\u5206\u4eab\u4e00\u4e0b\u3002<\/p><\/blockquote>\n<p>\u4e0b\u4e00\u9636\u6bb5\u91cd\u70b9\u5c31\u662f\u5c06\u7f16\u8bd1\u4fe1\u606f\u597d\u597d\u6574\u7406\uff0c\u8ba9\u5f00\u53d1\u4f53\u9a8c\u66f4\u597d\u3002\u4e4b\u540e\u62bd\u7a7a\u518d\u628a <code>SQL<\/code> \u6807\u51c6\u5e93\u5b9e\u73b0\u4e86\uff0c\u8fd9\u6837\u5c31\u80fd\u6109\u5feb\u7684 <code>CURD<\/code>\u4e86\u3002<\/p>\n<p>\u6700\u540e\u5e0c\u671b\u5bf9\u8be5\u9879\u76ee\u6216\u8005\u662f\u7f16\u8bd1\u539f\u7406\u611f\u5174\u8da3\u7684\u670b\u53cb\u53ef\u4ee5\u4e0b\u8f7d\u4f7f\u7528\uff0c\u63d0\u51fa\u5b9d\u8d35\u610f\u89c1\uff0c\u6b22\u8fce\u52a0\u6211\u5fae\u4fe1\u4ea4\u6d41\u3002<\/p>\n<p>v0.0.8 \u4e0b\u8f7d\u5730\u5740\uff1a<br \/><a href=\"https:\/\/link.segmentfault.com\/?enc=W8hOIbHs%2BPDRpKSq0ROmqw%3D%3D.poUwrG6%2BiK9%2B5Bk476Ozkq4A4UHw9ozygnnnY7qgU2B3XqJPw59woDKKW1BYwBEQU7ut0lroRQpPnp6h7L86KA%3D%3D\" rel=\"nofollow\">https:\/\/github.com\/crossoverJie\/gscript\/releases\/tag\/v0.0.8<\/a><\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000042473463\">https:\/\/segmentfault.com\/a\/1190000042473463<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u8a00 \u5728\u4e0a\u4e00\u7bc7\u300a\u7ec8\u4e8e\u5b9e\u73b0\u4e86\u4e00\u95e8\u5c5e\u4e8e\u81ea\u5df1\u7684\u7f16\u7a0b\u8bed\u8a00\u300b \u4ecb\u7ecd\u4e86\u81ea\u5df1\u5199\u7684\u7f16\u7a0b\u8bed\u8a00 GScript \uff0c\u5728\u6587\u4e2d\u63d0\u5230\u5e0c\u671b\u6700 [&hellip;]<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[],"tags":[],"class_list":["post-10006474","post","type-post","status-publish","format-standard","hentry"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10006474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10006474"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10006474\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10006474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10006474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10006474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}