{"@attributes":{"version":"2.0"},"channel":{"title":"\u683c\u7269","link":"https:\/\/shockerli.net\/","description":"Recent content on \u683c\u7269","generator":"Hugo -- gohugo.io","language":"en","copyright":"Jioby\n<br>\nPowered by \n<a href=\"https:\/\/gohugo.io\">Hugo<\/a>\n","lastBuildDate":"Tue, 27 Jun 2023 00:00:00 +0000","item":[{"title":"MySQL \u6e90\u7801\u9605\u8bfb \u2014\u2014 \u95ee\u9898 CMake\uff1aSSL version must be at least 1.1.1","link":"https:\/\/shockerli.net\/post\/mysql-source-cmake-openssl-version\/","pubDate":"Tue, 27 Jun 2023 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/mysql-source-cmake-openssl-version\/","description":"<h2 id=\"\u95ee\u9898\u63cf\u8ff0\">\u95ee\u9898\u63cf\u8ff0<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/Users\/jioby\/Applications\/CLion.app\/Contents\/bin\/cmake\/mac\/aarch64\/bin\/cmake -DCMAKE_BUILD_TYPE<span class=\"o\">=<\/span>Debug -DCMAKE_MAKE_PROGRAM<span class=\"o\">=<\/span>\/Users\/jioby\/Applications\/CLion.app\/Contents\/bin\/ninja\/mac\/aarch64\/ninja -DWITH_DEBUG<span class=\"o\">=<\/span><span class=\"m\">1<\/span> -DDOWNLOAD_BOOST<span class=\"o\">=<\/span><span class=\"m\">1<\/span> -DWITH_BOOST<span class=\"o\">=<\/span>boost -DDOWNLOAD_BOOST_TIMEOUT<span class=\"o\">=<\/span><span class=\"m\">60000<\/span> -DCMAKE_INSTALL_PREFIX<span class=\"o\">=<\/span>build_out -DMYSQL_DATADIR<span class=\"o\">=<\/span>build_out\/data -DSYSCONFDIR<span class=\"o\">=<\/span>build_out\/etc -DMYSQL_TCP_PORT<span class=\"o\">=<\/span><span class=\"m\">3307<\/span> -DMYSQL_UNIX_ADDR<span class=\"o\">=<\/span>mysql-debug.sock -G Ninja -S \/Users\/jioby\/code\/mysql-annotated-5.7.35 -B \/Users\/jioby\/code\/mysql-annotated-5.7.35\/cmake-build-debug\n<\/span><\/span><span class=\"line\"><span class=\"cl\">CMake Deprecation Warning at CMakeLists.txt:30 <span class=\"o\">(<\/span>CMAKE_MINIMUM_REQUIRED<span class=\"o\">)<\/span>:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Compatibility with CMake &lt; 3.5 will be removed from a future version of\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  CMake.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u00b7\u00b7\u00b7\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- suffixes &lt;.a<span class=\"p\">;<\/span>.so<span class=\"p\">;<\/span>.dylib<span class=\"p\">;<\/span>.tbd&gt;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- <span class=\"nv\">OPENSSL_INCLUDE_DIR<\/span> <span class=\"o\">=<\/span> \/opt\/homebrew\/include\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- <span class=\"nv\">OPENSSL_LIBRARY<\/span> <span class=\"o\">=<\/span> \/opt\/homebrew\/lib\/libssl.a\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- <span class=\"nv\">CRYPTO_LIBRARY<\/span> <span class=\"o\">=<\/span> \/opt\/homebrew\/lib\/libcrypto.a\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- <span class=\"nv\">OPENSSL_MAJOR_VERSION<\/span> <span class=\"o\">=<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- <span class=\"nv\">OPENSSL_MINOR_VERSION<\/span> <span class=\"o\">=<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- <span class=\"nv\">OPENSSL_FIX_VERSION<\/span> <span class=\"o\">=<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\">CMake Error at cmake\/ssl.cmake:247 <span class=\"o\">(<\/span>MESSAGE<span class=\"o\">)<\/span>:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  SSL version must be at least 1.1.1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Call Stack <span class=\"o\">(<\/span>most recent call first<span class=\"o\">)<\/span>:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  CMakeLists.txt:568 <span class=\"o\">(<\/span>MYSQL_CHECK_SSL<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- Configuring incomplete, errors occurred!\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u89e3\u51b3\u65b9\u6848\">\u89e3\u51b3\u65b9\u6848<\/h2>\n<p>\u672c\u673a\u540c\u65f6\u5b89\u88c5\u6709 <code>openssl@1.1<\/code> \u548c <code>openssl@3<\/code>\uff0c\u9ed8\u8ba4\u662f <code>openssl@3<\/code>\u3002\u800c\u9ed8\u8ba4\u914d\u7f6e\u662f <code>-DWITH_SSL=system<\/code>\uff0c\u5373\u7cfb\u7edf\u9ed8\u8ba4\u7684 SSL\u3002<\/p>\n<p>CMake \u9009\u9879\u624b\u52a8\u6307\u5b9a <code>WITH_SSL<\/code> \u5e76\u6307\u5b9a\u8def\u5f84\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">-DWITH_SSL=\/opt\/homebrew\/Cellar\/openssl@1.1\/1.1.1w\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5982\u679c\u672c\u673a\u5e76\u672a\u5b89\u88c5\u6709 <code>openssl@1.1.1<\/code>\uff0c\u90a3\u4e48\u4f7f\u7528 Brew \u5b89\u88c5\u4e00\u4e2a\u5373\u53ef\uff0c\u8fd9\u6837\u53ef\u4ee5\u4fdd\u8bc1\u591a\u7248\u672c\u5171\u5b58\u4e14\u4e0d\u5f71\u54cd\u5176\u4ed6\u8f6f\u4ef6\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install openssl@1.1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/source-ssl-library-configuration.html\">MySQL 5.7 Reference Manual :: 2.8.6 Configuring SSL Library Support<\/a><\/li>\n<\/ul>"},{"title":"Homebrew \u5b89\u88c5\u6307\u5b9a\u7248\u672c\u7684\u4e09\u79cd\u65b9\u5f0f","link":"https:\/\/shockerli.net\/post\/homebrew-install-formula-specific-version\/","pubDate":"Tue, 11 Oct 2022 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/homebrew-install-formula-specific-version\/","description":"<h2 id=\"\u65b9\u5f0f\u4e00\u5b98\u65b9\u591a\u7248\u672c-formula\">\u65b9\u5f0f\u4e00\uff1a\u5b98\u65b9\u591a\u7248\u672c formula<\/h2>\n<p>\u4ee5 MySQL \u4e3a\u4f8b<\/p>\n<p>\u5148\u641c\u7d22\u8f6f\u4ef6<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew search mysql\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\">```<\/span>shell\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"sb\">```<\/span><span class=\"nv\">shell<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Formulae\n<\/span><\/span><span class=\"line\"><span class=\"cl\">automysqlbackup          mysql-client             mysql-sandbox            mysql@5.7 \u2714\n<\/span><\/span><span class=\"line\"><span class=\"cl\">mysql                    mysql-client@5.7         mysql-search-replace     mysqltuner\n<\/span><\/span><span class=\"line\"><span class=\"cl\">mysql++                  mysql-connector-c++      mysql@5.6                qt-mysql\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Casks\n<\/span><\/span><span class=\"line\"><span class=\"cl\">mysql-connector-python            mysqlworkbench                    sqlpro-for-mysql\n<\/span><\/span><span class=\"line\"><span class=\"cl\">mysql-shell                       navicat-for-mysql\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u53d1\u73b0\u53ef\u7528\u7684\u7248\u672c\u6709 <code>mysql<\/code>\u3001<code>mysql@5.7<\/code>\u3001<code>mysql@5.6<\/code>\uff0c\u90a3\u4e48\u6211\u4eec\u53ef\u4ee5\u5b89\u88c5\u7684\u5c31\u662f\u8fd9\u51e0\u4e2a\u5927\u7248\u672c\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install mysql@5.7\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7f3a\u70b9\uff1a\u591a\u6570\u8f6f\u4ef6\u662f\u6ca1\u6709\u63d0\u4f9b\u5386\u53f2\u7248\u672c\u4e13\u5c5e formula\uff0c\u4e14\u6bcf\u4e2a\u90fd\u662f\u5927\u7248\u672c\u3001\u65e0\u6cd5\u5177\u4f53\u7248\u672c\u53f7\u3002<\/p>\n<h2 id=\"\u65b9\u5f0f\u4e8cformula-git-\u5386\u53f2\u7248\u672c\">\u65b9\u5f0f\u4e8c\uff1aFormula Git \u5386\u53f2\u7248\u672c<\/h2>\n<p>\u4ee5 <code>hugo<\/code> \u4e3a\u4f8b\u3002<\/p>\n<p>\u67e5\u770b\u8f6f\u4ef6\u7684\u4fe1\u606f\uff0c\u83b7\u5f97\u5176\u5728 <code>homebrew\/core<\/code> \u4ed3\u5e93\u7684\u6587\u4ef6\u8def\u5f84\uff1a<code>Formula\/hugo.rb<\/code><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\u279c brew info htop\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; htop: stable 3.2.1 <span class=\"o\">(<\/span>bottled<span class=\"o\">)<\/span>, HEAD\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Improved top <span class=\"o\">(<\/span>interactive process viewer<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">https:\/\/htop.dev\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/opt\/homebrew\/Cellar\/htop\/3.2.1 <span class=\"o\">(<\/span><span class=\"m\">12<\/span> files, 347KB<span class=\"o\">)<\/span> *\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Poured from bottle on 2022-07-30 at 10:33:22\n<\/span><\/span><span class=\"line\"><span class=\"cl\">From: https:\/\/mirrors.tuna.tsinghua.edu.cn\/git\/homebrew\/homebrew-core.git\/Formula\/htop.rb\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u67e5\u770b <code>homebrew\/core<\/code> \u7684\u4ed3\u5e93\u8def\u5f84\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\u279c brew tap-info homebrew\/core                                                    \n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">homebrew\/core: <span class=\"m\">3<\/span> commands, <span class=\"m\">6331<\/span> formulae\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/opt\/homebrew\/Library\/Taps\/homebrew\/homebrew-core <span class=\"o\">(<\/span>7,031 files, 514.4MB<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">From: https:\/\/mirrors.tuna.tsinghua.edu.cn\/git\/homebrew\/homebrew-core.git\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5207\u6362\u5230 <code>homebrew\/core<\/code> \u7684\u4ed3\u5e93\u8def\u5f84\u4e0b\u3002<\/p>\n<p>\u627e\u5230\u4f60\u9700\u8981 Checkout \u81f3\u7684 Commit\u3002\u600e\u4e48\u627e Commit \u5462\uff1f\u8fd9\u4ecb\u7ecd\u4e00\u79cd\u901a\u8fc7\u641c\u7d22 Git log \u7684\u65b9\u5f0f\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\u279c git:<span class=\"o\">(<\/span>master<span class=\"o\">)<\/span> git log -p -- Formula\/hugo.rb <span class=\"p\">|<\/span> grep -e ^commit -e <span class=\"s1\">&#39;url &#34;http&#39;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">commit 9e99a2778112fca08dad62b916cdbf3b2117135e\n<\/span><\/span><span class=\"line\"><span class=\"cl\">commit e2ba0778070f8c5fc5dc8f81c20923e7c45fc634\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-  url <span class=\"s2\">&#34;https:\/\/github.com\/gohugoio\/hugo\/archive\/v0.104.2.tar.gz&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">+  url <span class=\"s2\">&#34;https:\/\/github.com\/gohugoio\/hugo\/archive\/v0.104.3.tar.gz&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">commit 366f6fc756ce9ee434fb2af5fdc4c33697f8b24b\n<\/span><\/span><span class=\"line\"><span class=\"cl\">commit 0f7d523aff3152de4d64a17010bc17d10f9935cc\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-  url <span class=\"s2\">&#34;https:\/\/github.com\/gohugoio\/hugo\/archive\/v0.104.1.tar.gz&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">+  url <span class=\"s2\">&#34;https:\/\/github.com\/gohugoio\/hugo\/archive\/v0.104.2.tar.gz&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6bd4\u5982\u60f3\u5b89\u88c5 <code>hugo v0.104.2<\/code>\uff0c\u90a3\u4e48\u5207\u6362\u5230\u6307\u5b9a Commit \u5373\u53ef\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">git checkout 366f6f\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5f00\u59cb\u5b89\u88c5\u6307\u5b9a\u7248\u672c\u7684\u8f6f\u4ef6\uff1a<\/p>\n<blockquote>\n<p><code>HOMEBREW_NO_AUTO_UPDATE=1<\/code> \u73af\u5883\u53d8\u91cf\u662f\u4e3a\u4e86\u5173\u95ed <code>brew update<\/code> \u88ab\u6267\u884c<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">HOMEBREW_NO_AUTO_UPDATE<\/span><span class=\"o\">=<\/span><span class=\"m\">1<\/span> brew install hugo\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Downloading https:\/\/mirrors.tuna.tsinghua.edu.cn\/homebrew-bottles\/hugo-0.104.2.arm64_monterey.bo\n<\/span><\/span><span class=\"line\"><span class=\"cl\">curl: <span class=\"o\">(<\/span>22<span class=\"o\">)<\/span> The requested URL returned error: <span class=\"m\">404<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Warning: Bottle missing, falling back to the default domain...\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Downloading https:\/\/ghcr.io\/v2\/homebrew\/core\/hugo\/manifests\/0.104.2\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">######################################################################## 100.0%<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Downloading https:\/\/ghcr.io\/v2\/homebrew\/core\/hugo\/blobs\/sha256:fb7f6d0b49f7c7248c820665cfed5b0b9\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Downloading from https:\/\/pkg-containers.githubusercontent.com\/ghcr1\/blobs\/sha256:fb7f6d0b49f7c72\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">######################################################################## 100.0%<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Pouring hugo--0.104.2.arm64_monterey.bottle.tar.gz\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Caveats\n<\/span><\/span><span class=\"line\"><span class=\"cl\">zsh completions have been installed to:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \/opt\/homebrew\/share\/zsh\/site-functions\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Summary\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\ud83c\udf7a  \/opt\/homebrew\/Cellar\/hugo\/0.104.2: <span class=\"m\">48<\/span> files, 55.8MB\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Running <span class=\"sb\">`<\/span>brew cleanup hugo<span class=\"sb\">`<\/span>...\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Hide these hints with HOMEBREW_NO_ENV_HINTS <span class=\"o\">(<\/span>see <span class=\"sb\">`<\/span>man brew<span class=\"sb\">`<\/span><span class=\"o\">)<\/span>.\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7136\u540e\uff0c\u522b\u5fd8\u4e86\u5207\u56de Git \u5230\u6700\u65b0\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\u279c git:<span class=\"o\">(<\/span>366f6fc756c<span class=\"o\">)<\/span> git checkout master\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">Previous HEAD position was 366f6fc756c hugo: update 0.104.2 bottle.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Switched to branch <span class=\"s1\">&#39;master&#39;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u65b9\u5f0f\u4e09\u81ea\u5b9a\u4e49\u672c\u5730-formula\">\u65b9\u5f0f\u4e09\uff1a\u81ea\u5b9a\u4e49\u672c\u5730 Formula<\/h2>\n<p>\u521b\u5efa\u672c\u5730 Tap\uff08\u5982\u5df2\u521b\u5efa\u8fc7\uff0c\u53ef\u8df3\u8fc7\uff09\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\u279c brew tap-new <span class=\"nv\">$USER<\/span>\/local-tap\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">Initialized empty Git repository in \/opt\/homebrew\/Library\/Taps\/jioby\/homebrew-local-tap\/.git\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>main <span class=\"o\">(<\/span>root-commit<span class=\"o\">)<\/span> d4dac7f<span class=\"o\">]<\/span> Create jioby\/local-tap tap\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"m\">3<\/span> files changed, <span class=\"m\">90<\/span> insertions<span class=\"o\">(<\/span>+<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> create mode <span class=\"m\">100644<\/span> .github\/workflows\/publish.yml\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> create mode <span class=\"m\">100644<\/span> .github\/workflows\/tests.yml\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> create mode <span class=\"m\">100644<\/span> README.md\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Created jioby\/local-tap\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/opt\/homebrew\/Library\/Taps\/jioby\/homebrew-local-tap\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">When a pull request making changes to a formula <span class=\"o\">(<\/span>or formulae<span class=\"o\">)<\/span> becomes green\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">(<\/span>all checks passed<span class=\"o\">)<\/span>, <span class=\"k\">then<\/span> you can publish the built bottles.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">To <span class=\"k\">do<\/span> so, label your PR as <span class=\"sb\">`<\/span>pr-pull<span class=\"sb\">`<\/span> and the workflow will be triggered.\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5728 <code>\/usr\/local\/Homebrew\/Library\/Taps\/<\/code> \u4e0b\u751f\u6210\u4e00\u4e2a Tap \u6a21\u677f <code>jioby\/homebrew-local-tap<\/code>\u3002<\/p>\n<p>\u57fa\u4e8e\u8f6f\u4ef6\u7684\u7279\u5b9a\u7248\u672c\u521b\u5efa Formula \u526f\u672c\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\u279c brew extract --version<span class=\"o\">=<\/span>0.104.2 hugo <span class=\"nv\">$USER<\/span>\/local-tap\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Searching repository <span class=\"nb\">history<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Writing formula <span class=\"k\">for<\/span> hugo from revision 366f6fc to:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/opt\/homebrew\/Library\/Taps\/jioby\/homebrew-local-tap\/Formula\/hugo@0.104.2.rb\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u641c\u7d22 <code>hugo<\/code><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\u279c brew search hugo\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Formulae\n<\/span><\/span><span class=\"line\"><span class=\"cl\">hugo                                               jioby\/local-tap\/hugo@0.104.2\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5b89\u88c5 <code>hugo@0.104.2<\/code><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">HOMEBREW_NO_AUTO_UPDATE<\/span><span class=\"o\">=<\/span><span class=\"m\">1<\/span> brew install jioby\/local-tap\/hugo@0.104.2\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4e0d\u60f3\u518d\u8981\u8fd9\u4e2a\u4e34\u65f6 Formula\uff0c\u53ef\u624b\u52a8\u5220\u9664\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/opt\/homebrew\/Library\/Taps\/jioby\/homebrew-local-tap\/Formula\/hugo@0.104.2.rb\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5982\u679c Homebrew \u4e2d\u6ca1\u6709\u60f3\u8981\u7684\u5177\u4f53\u7248\u672c\uff0c\u53ef\u4ee5\u521b\u5efa Formula \u526f\u672c\u540e\uff0c\u81ea\u884c\u7528\u6587\u672c\u7f16\u8f91\u5668\u6253\u5f00 <code>.rb<\/code> \u6587\u4ef6\uff08\u6216\u4f7f\u7528 <code>brew edit jioby\/local-tap\/hugo@0.104.2<\/code>\uff0c\u4fee\u6539\u5176\u4e2d\u7684 <code>url<\/code>\u3001<code>sha256<\/code> \u7b49\uff0c\u7136\u540e\u518d\u6267\u884c <code>brew install xxx<\/code> \u8fdb\u884c\u5b89\u88c5\u3002<\/p>"},{"title":"\u8f6c\u8f7d\u534f\u8bae","link":"https:\/\/shockerli.net\/reprint-protocol\/","pubDate":"Wed, 27 Jul 2022 00:00:00 +0000","guid":"https:\/\/shockerli.net\/reprint-protocol\/","description":"<h1 id=\"\u8f6c\u8f7d\u534f\u8bae\">\u8f6c\u8f7d\u534f\u8bae<\/h1>\n<p>\u6b22\u8fce\u5404\u4f4d\u670b\u53cb\u8f6c\u8f7d\u672c\u7ad9\u7684\u539f\u521b\u6587\u7ae0\u3002<\/p>\n<p>\u672c\u4f5c\u54c1\u91c7\u7528<a href=\"https:\/\/creativecommons.org\/licenses\/by-nc-nd\/4.0\/deed.zh\"><strong>\u77e5\u8bc6\u5171\u4eab\u7f72\u540d 4.0 \u56fd\u9645\u8bb8\u53ef\u534f\u8bae<\/strong><\/a>\u8fdb\u884c\u8bb8\u53ef\uff0c\u8f6c\u8f7d\u65f6\u8bf7<strong>\u6ce8\u660e\u539f\u6587\u94fe\u63a5<\/strong>\uff0c\u56fe\u7247\u5728\u4f7f\u7528\u65f6\u8bf7<strong>\u4fdd\u7559\u5168\u90e8\u5185\u5bb9<\/strong>\uff0c\u53ef\u9002\u5f53\u7f29\u653e\u5e76\u5728\u5f15\u7528\u5904\u9644\u4e0a\u56fe\u7247\u6240\u5728\u7684\u6587\u7ae0\u94fe\u63a5\u3002<\/p>\n<h2 id=\"\u8f6c\u8f7d\u7533\u8bf7\">\u8f6c\u8f7d\u7533\u8bf7<\/h2>\n<p><strong>\u8f6c\u8f7d\u7533\u8bf7<\/strong>\uff1a\u5728\u6587\u7ae0\u8bc4\u8bba\u533a\u6309\u683c\u5f0f\u7559\u8a00\u7533\u8bf7\u5373\u53ef\uff0c\u65e0\u9700\u7b49\u5f85\u786e\u8ba4<\/p>\n<p><strong>\u7533\u8bf7\u683c\u5f0f<\/strong>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">- \u7533\u8bf7\u4eba\uff1a\u683c\u7269\n<\/span><\/span><span class=\"line\"><span class=\"cl\">- \u539f\u6587\u7ae0\uff1amacOS Big Sur \u89e3\u51b3\u7cfb\u7edf\u6587\u4ef6\u4e0d\u53ef\u4fee\u6539\n<\/span><\/span><span class=\"line\"><span class=\"cl\">- \u539f\u94fe\u63a5\uff1ahttps:\/\/shockerli.net\/post\/macos-big-sur-mod-sys-file\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\">- \u8f6c\u8f7d\u5230\uff1ahttps:\/\/your.blog.domain\/xxx\/xxx\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"macOS Big Sur \u89e3\u51b3\u7cfb\u7edf\u6587\u4ef6\u4e0d\u53ef\u4fee\u6539","link":"https:\/\/shockerli.net\/post\/macos-big-sur-mod-sys-file\/","pubDate":"Sat, 09 Apr 2022 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/macos-big-sur-mod-sys-file\/","description":"<h2 id=\"\u8d77\u56e0\">\u8d77\u56e0<\/h2>\n<p>\u672c\u662f\u4e3a\u4e86\u5220\u9664 macOS 11.4 \u81ea\u5e26\u7684 PHP\uff0c\u7ecf\u5386\u4e86\u4e00\u4e0b\u6b65\u9aa4\uff1a<\/p>\n<ul>\n<li>\u5148\u5173\u95ed SIP<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">csrutil disable\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u518d\u5220\u9664 PHP \u76f8\u5173\u6587\u4ef6<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> \/private\/etc\/ <span class=\"o\">&amp;&amp;<\/span> sudo rm -rf php-fpm.conf.defaultphp.ini php.ini.default\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> \/usr\/bin\/ <span class=\"o\">&amp;&amp;<\/span> sudo rm -rf php php-config phpdoc phpize\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> \/usr\/include <span class=\"o\">&amp;&amp;<\/span> sudo rm -rf php  \/\/ 10.14\u4e4b\u540e\u6ca1\u6709\u6b64\u76ee\u5f55\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> \/usr\/lib <span class=\"o\">&amp;&amp;<\/span> sudo rm -rf php\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> \/usr\/sbin <span class=\"o\">&amp;&amp;<\/span> sudo rm -rf php-fpm\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> \/usr\/share <span class=\"o\">&amp;&amp;<\/span> sudo rm -rf php\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> \/usr\/share\/man\/man1 <span class=\"o\">&amp;&amp;<\/span> sudo rm -rf php-config.1 php.1 phpize.1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> \/usr\/share\/man\/man8 <span class=\"o\">&amp;&amp;<\/span> sudo rm -rf php-fpm.8\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5374\u62a5\u9519\u6587\u4ef6\u53ea\u8bfb<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">rm: php: Read-only file system\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u6309\u8001\u529e\u6cd5\u6302\u8f7d\u5206\u533a<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">sudo mount -uw \/\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5374\u53c8\u62a5\u9519\u5206\u5377\u88ab\u4fdd\u62a4\uff0c\u65e0\u6cd5\u6302\u8f7d<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">mount_apfs: volume could not be mounted: Permission denied\n<\/span><\/span><span class=\"line\"><span class=\"cl\">mount: \/ failed with <span class=\"m\">66<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u73af\u5883\">\u73af\u5883<\/h2>\n<ul>\n<li>macOS Big Sur 11.4<\/li>\n<\/ul>\n<h2 id=\"\u89e3\u51b3\u65b9\u6848\">\u89e3\u51b3\u65b9\u6848<\/h2>\n<p>\u5c06\u7cfb\u7edf\u5206\u533a\u91cd\u65b0\u6302\u8f7d\u5728\u4e00\u4e2a\u6709\u8bfb\u5199\u6743\u9650\u7684\u65b0\u76ee\u5f55\u4e0b\uff0c\u5728\u8be5\u76ee\u5f55\u4e0b\u4fee\u6539\u7cfb\u7edf\u6587\u4ef6\uff0c\u751f\u6210\u5feb\u7167\u5e76\u91cd\u542f\u3002<\/p>\n<h3 id=\"\u5173\u95ed-sip\">\u5173\u95ed SIP<\/h3>\n<p>\u5173\u673a\uff0c\u518d\u5f00\u673a\uff0c\u5e76\u6309\u4f4f <code>Command+R<\/code> \u8fdb\u5165\u6062\u590d\u6a21\u5f0f\uff0c\u7136\u540e\u5728 <code>\u5b9e\u7528\u5de5\u5177 - \u7ec8\u7aef<\/code> \u4e2d\u8fd0\u884c\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">csrutil disable\n<\/span><\/span><span class=\"line\"><span class=\"cl\">csrutil authenticated-root disable\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo reboot\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u91cd\u65b0\u5f00\u673a\u540e\uff0c\u67e5\u770b\u662f\u5426\u5173\u95ed\uff0c\u663e\u793a disable \u5219\u8868\u793a\u5df2\u5173\u95ed\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># csrutil status<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">System Integrity Protection status: unknown <span class=\"o\">(<\/span>Custom Configuration<span class=\"o\">)<\/span>.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Configuration:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\tApple Internal: disabled\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\tKext Signing: disabled\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\tFilesystem Protections: disabled\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\tDebugging Restrictions: disabled\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\tDTrace Restrictions: disabled\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\tNVRAM Protections: disabled\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\tBaseSystem Verification: enabled\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">This is an unsupported configuration, likely to <span class=\"nb\">break<\/span> in the future and leave your machine in an unknown state.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># authenticated-root status<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Authenticated Root status: disabled\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u67e5\u770b\u7cfb\u7edf\u5206\u533a\">\u67e5\u770b\u7cfb\u7edf\u5206\u533a<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># mount<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/dev\/disk1s1s1 on \/ <span class=\"o\">(<\/span>apfs, sealed, local, read-only, journaled<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">devfs on \/dev <span class=\"o\">(<\/span>devfs, local, nobrowse<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/dev\/disk1s4 on \/System\/Volumes\/VM <span class=\"o\">(<\/span>apfs, local, noexec, journaled, noatime, nobrowse<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/dev\/disk1s2 on \/System\/Volumes\/Preboot <span class=\"o\">(<\/span>apfs, local, journaled, nobrowse<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/dev\/disk1s6 on \/System\/Volumes\/Update <span class=\"o\">(<\/span>apfs, local, journaled, nobrowse<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/dev\/disk1s5 on \/System\/Volumes\/Data <span class=\"o\">(<\/span>apfs, local, journaled, nobrowse<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">map auto_home on \/System\/Volumes\/Data\/home <span class=\"o\">(<\/span>autofs, automounted, nobrowse<span class=\"o\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u672c\u673a\u7684\u7cfb\u7edf\u5206\u533a\u4e3a <code>\/dev\/disk1s1<\/code>\uff0c<code>disk1s1s1<\/code> \u662f\u5176\u5feb\u7167\uff0c\u6302\u8f7d\u7684\u662f\u6839\u76ee\u5f55 <code>\/<\/code>\u3002<\/p>\n<h3 id=\"\u91cd\u65b0\u6302\u8f7d\">\u91cd\u65b0\u6302\u8f7d<\/h3>\n<p>\u5728\u7528\u6237\u76ee\u5f55\u4e0b\u521b\u5efa\u4e00\u4e2a\u65b0\u76ee\u5f55\uff0c\u5982 <code>\/Users\/jioby\/mount-data<\/code>\u3002<\/p>\n<p>\u5c06\u7cfb\u7edf\u5206\u533a\u6302\u8f7d\u5230\u8be5\u65b0\u76ee\u5f55\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">sudo mount -o nobrowse -t apfs \/dev\/disk1s1 \/Users\/jioby\/mount-data\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\uff08\u6ce8\u610f\u662f <code>disk1s1<\/code>\uff0c\u800c\u975e <code>disk1s1s1<\/code>\uff09<\/p>\n<h3 id=\"\u8bbf\u95ee\u5e76\u4fee\u6539\u6587\u4ef6\">\u8bbf\u95ee\u5e76\u4fee\u6539\u6587\u4ef6<\/h3>\n<p>\u6b64\u65f6\uff0c<code>mount-data<\/code> \u76ee\u5f55\u76f8\u5f53\u4e8e\u7cfb\u7edf\u7684\u6839\u76ee\u5f55\uff0c\u5e76\u53ef\u5bf9\u5176\u8fdb\u884c\u8bbf\u95ee\u548c\u4fee\u6539\u3002<\/p>\n<p>\u6bd4\u5982\u539f\u6765\u9700\u8981\u5220\u9664 <code>\/usr\/bin\/php<\/code> \u6587\u4ef6\uff0c\u5219\u76f4\u63a5\u5220\u9664 <code>\/Users\/jioby\/mount-data\/usr\/bin\/php<\/code> \u5373\u53ef\u3002<\/p>\n<h3 id=\"\u751f\u6210\u5feb\u7167\u5e76\u91cd\u542f\">\u751f\u6210\u5feb\u7167\u5e76\u91cd\u542f<\/h3>\n<p>\u64cd\u4f5c\u5b8c\u5bf9\u5e94\u7684\u7cfb\u7edf\u6587\u4ef6\u540e\uff0c\u751f\u6210\u5feb\u7167\u5e76\u91cd\u542f\u7cfb\u7edf\uff0c\u7136\u540e\u7cfb\u7edf\u6587\u4ef6\u5c31\u88ab\u4fee\u6539\u4e86\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">sudo bless --folder \/Users\/jioby\/mount-data\/System\/Library\/CoreServices --bootefi --create-snapshot\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo reboot\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"\u53cb\u94fe","link":"https:\/\/shockerli.net\/link\/","pubDate":"Wed, 02 Mar 2022 00:00:00 +0000","guid":"https:\/\/shockerli.net\/link\/","description":"<h1 id=\"\u670b\u53cb\u5c0f\u7ad9\">\u670b\u53cb\u5c0f\u7ad9<\/h1>\n<blockquote>\n<p>\u4ee5\u4e0b\u4e3a\u683c\u7269\u5c0f\u7ad9\u7684\u53cb\u60c5\u7ad9\u70b9\uff0c\u6309\u4e92\u94fe\u65f6\u95f4\u5148\u540e\u6392\u5e8f<\/p>\n<\/blockquote>\n<ul>\n<li><a href=\"\/\/blog.fastrun.cn\">CrazyCodes<\/a> - Mr.Zhang \u7684\u5c0f\u7ad9<\/li>\n<li><a href=\"\/\/geektutu.com\">\u6781\u5ba2\u5154\u5154<\/a> - \u81f4\u529b\u4e8e\u5206\u4eab\u6709\u8da3\u7684\u6280\u672f\u5b9e\u8df5<\/li>\n<li><a href=\"\/\/www.bigspring.cn\">\u4e00\u6811\u4e00\u6eaa<\/a> - MySQL \u6e90\u7801\u7814\u7a76<\/li>\n<\/ul>\n<h2 id=\"\u7533\u8bf7\u53cb\u94fe\">\u7533\u8bf7\u53cb\u94fe<\/h2>\n<p>\u5148\u6dfb\u52a0\u672c\u7ad9\u5230\u8d35\u7ad9\u70b9\uff0c\u518d\u6309\u4e0b\u8ff0\u683c\u5f0f\u5728\u8bc4\u8bba\u533a\u7559\u8a00\u3002<\/p>\n<p>\u62d2\u7edd\u91c7\u96c6\u3001\u8f6c\u8f7d\u7b49\u7ad9\u70b9\u3002<\/p>\n<p><strong>\u683c\u5f0f<\/strong>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\u7ad9\u70b9\u540d\u79f0: \u683c\u7269\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u7ad9\u70b9\u63cf\u8ff0: \u505a\u6709\u8fdb\u6b65\u7684\u5206\u4eab\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u7ad9\u70b9\u5730\u5740: https:\/\/shockerli.net\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u5df2\u52a0\u53cb\u94fe: https:\/\/shockerli.net\/link\/\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"Proxyman CFErrorDomainLaunchd error 9","link":"https:\/\/shockerli.net\/post\/proxyman-install-helper-tool-cferrordomainlaunchd\/","pubDate":"Fri, 18 Feb 2022 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/proxyman-install-helper-tool-cferrordomainlaunchd\/","description":"<blockquote>\n<p><a href=\"https:\/\/proxyman.io\">Proxyman<\/a> \u662f\u4e00\u6b3e\u539f\u751f\u9ad8\u6027\u80fd\u7684 HTTP\/HTTPS \u6293\u5305\u5de5\u5177\u3002<\/p>\n<\/blockquote>\n<p>Proxyman \u63d0\u793a\u5347\u7ea7 Proxy Helper Tool\uff1a<\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/proxyman-install-helper-tool-cferrordomainlaunchd\/media\/install-proxy-helper-tool.jpg\" alt=\"install-proxy-helper-tool\">\n\u4f46\u70b9\u51fb <code>Install Helper Tool<\/code> \u5374\u62a5\u9519 <code>The operation couldn\u2019t be completed. (CFErrorDomainLaunchd error 9.)<\/code>\uff1a<\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/proxyman-install-helper-tool-cferrordomainlaunchd\/media\/CFErrorDomainLaunchd-error-9.jpg\" alt=\"CFErrorDomainLaunchd-error-9\"><\/p>\n<p>\u53c2\u8003 <a href=\"https:\/\/stackoverflow.com\/questions\/32202121\/smjobbless-failed-with-cferrordomainlaunchd-code-9\">\u6b64\u6587<\/a>\uff0c\u539f\u56e0\u662f\u8be5\u5e2e\u52a9\u5de5\u5177\u5df2\u4ece\u7cfb\u7edf\u670d\u52a1\u4e2d\u88ab\u7981\u7528\u3002<\/p>\n<p>\u67e5\u770b\u5df2\u7981\u7528\u7684\u7cfb\u7edf\u670d\u52a1\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">launchctl print-disabled system\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">disabled services = {\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t&#34;com.apple.CSCSupportd&#34; =&gt; true\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t&#34;com.apple.ftpd&#34; =&gt; true\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t&#34;com.apple.mdmclient.daemon.runatboot&#34; =&gt; true\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t&#34;fans&#34; =&gt; false\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t&#34;com.proxyman.NSProxy.HelperTool&#34; =&gt; true\n<\/span><\/span><span class=\"line\"><span class=\"cl\">}\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5982\u679c\u4e3a <code>true<\/code>\uff0c\u5373\u5df2\u88ab\u7981\u7528\u3002<\/p>\n<p>\u542f\u7528\u670d\u52a1\uff08\u6ce8\u610f <code>system\/<\/code> \u524d\u7f00\uff09\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">sudo launchctl <span class=\"nb\">enable<\/span> system\/com.proxyman.NSProxy.HelperTool\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u518d\u53bb\u5b89\u88c5\u5e2e\u52a9\u5de5\u5177\uff0c\u5c31\u53ef\u4ee5\u4e86\u3002<\/p>\n<h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/ProxymanApp\/Proxyman\/issues\/716\">install proxy helper tool, The operation couldn\u2019t be completed. (CFErrorDomainLaunchd error 9.) \u00b7 Issue #716 \u00b7 ProxymanApp\/Proxyman<\/a><\/li>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/32202121\/smjobbless-failed-with-cferrordomainlaunchd-code-9\">SMJobBless failed with CFErrorDomainLaunchd Code 9 - Stack Overflow<\/a><\/li>\n<\/ul>"},{"title":"Mac \u5f00\u5149\u6307\u5357 [2023.03.01\u66f4\u65b0]","link":"https:\/\/shockerli.net\/post\/mac-initialize\/","pubDate":"Mon, 22 Nov 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/mac-initialize\/","description":"<p>\ud83d\udcbb \u4e00\u4efd\u65b0 macOS \u5feb\u901f\u98df\u7528\u65b9\u6cd5\uff0c\u666e\u9002\u65b0 Mac \u6216\u91cd\u88c5\u7cfb\u7edf\u3002<\/p>\n<blockquote>\n<p>\u672c\u6307\u5357\u57fa\u4e8e MBP 14\u5bf8 12.5 \u7cfb\u7edf\uff08<strong>\u4e3b<\/strong>\uff09\u548c MBP 13\u5bf8 11.4 \u7cfb\u7edf\u3002<\/p>\n<p>\u7cfb\u7edf\u548c\u8f6f\u4ef6\u7684\u66f4\u65b0\u9891\u7e41\uff0c\u672c\u9879\u76ee\u4e0d\u4e00\u5b9a\u53ca\u65f6\u66f4\u65b0\uff0c\u6545\u64cd\u4f5c\u754c\u9762\u6216\u6b65\u9aa4\u4f1a\u7565\u6709\u5dee\u522b\uff0c\u4f46\u5f71\u54cd\u4e0d\u5927\u3002<\/p>\n<p>\u672c\u6307\u5357\u6d89\u53ca\u5185\u5bb9\u8f83\u5e7f\uff0c\u8bf7\u9009\u62e9\u9002\u5408\u81ea\u5df1\u7684\u64cd\u4f5c\u3002<\/p>\n<p>\u8bf7\u5584\u7528 TOC \u76ee\u5f55\u5bfc\u822a\u5185\u5bb9\uff0cGitHub \u4e2d <code>README.md<\/code> \u5de6\u4fa7\u7684\u6309\u94ae\u66f4\u65b9\u4fbf\u3002<\/p>\n<p>\u672c\u6307\u5357\u9075\u5faa\u8bb8\u53ef\u534f\u8bae <a href=\"https:\/\/creativecommons.org\/licenses\/by-nc-nd\/4.0\/deed.zh\">CC BY-NC-ND 4.0<\/a>\uff08\u8bf7\u770b<a href=\"https:\/\/shockerli.net\/reprint-protocol\">\u8f6c\u8f7d\u8981\u6c42<\/a>\uff09<\/p>\n<p>\u535a\u5ba2\u539f\u6587\u5730\u5740: <a href=\"https:\/\/shockerli.net\/post\/mac-initialize\">https:\/\/shockerli.net\/post\/mac-initialize<\/a><\/p>\n<p>\u957f\u671f\u66f4\u65b0\u5730\u5740: <a href=\"https:\/\/github.com\/shockerli\/mac-initialize\">https:\/\/github.com\/shockerli\/mac-initialize<\/a><\/p>\n<p>\u6700\u540e\u66f4\u65b0\u4e8e <code>2023-11-06<\/code><\/p>\n<\/blockquote>\n<h2 id=\"\u5e94\u7528\u5b89\u88c5\">\u5e94\u7528\u5b89\u88c5<\/h2>\n<h3 id=\"\u5b89\u88c5\u8f6f\u4ef6\">\u5b89\u88c5\u8f6f\u4ef6<\/h3>\n<h3 id=\"\u8f6f\u4ef6\u4e0b\u8f7d\u9014\u5f84\">\u8f6f\u4ef6\u4e0b\u8f7d\u9014\u5f84<\/h3>\n<ul>\n<li>App Store \u641c\u7d22\u6216\u6392\u884c\u699c<\/li>\n<li>\u8f6f\u4ef6\u7684\u5b98\u7f51\uff0c\u90fd\u4f1a\u63d0\u4f9b\u4e0b\u8f7d<\/li>\n<li>\u7b2c\u4e09\u65b9\u7f51\u7ad9\uff08\u4e0d\u4e00\u5b9a\u5b89\u5168\uff0c\u9700\u81ea\u884c\u7504\u522b\uff09<\/li>\n<\/ul>\n<p>\u6709\u4e00\u4e9b\u8f6f\u4ef6\uff0c\u662f\u6ca1\u6709\u4e0a\u67b6\u5e94\u7528\u5546\u5e97\uff08\u5982\u641c\u72d7\u8f93\u5165\u6cd5\uff09\u3001\u6216\u5e94\u7528\u5546\u5e97\u91cc\u7684\u662f\u9609\u5272\u7248\u672c\uff08\u5982\u67e0\u6aac\u6e05\u7406\uff09\uff0c\u5c31\u9700\u8981\u53bb\u5b98\u7f51\u4e0b\u8f7d\u3002<\/p>\n<p>\u4e0b\u8f7d\u8f6f\u4ef6\u65f6\uff0c\u5c3d\u91cf\u9009\u62e9\u4e0e\u67b6\u6784\u5339\u914d\u7684\uff0c\u4e0d\u8981\u9009 <code>Universal<\/code>\uff0c\u56e0\u4e3a <code>Universal<\/code> \u4f1a\u540c\u65f6\u5305\u542b\u4e24\u4e2a\u67b6\u6784\u7684\u8f6f\u4ef6\u5305\uff0c\u4f53\u79ef\u66f4\u5927\u4f46\u5374\u6ca1\u5565\u7528\u3002\u4ee5\u4e0b\u56fe VSCode \u4e3a\u4f8b\uff0c\u5982\u679c\u662f M1\/M2 \u7b49\u82f9\u679c\u82af\u7247\u5219\u9009 <code>Apple Silicon<\/code>\uff0c\u53cd\u4e4b\u5219\u9009 <code>Intel Chip<\/code>\u3002<\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/select-app-platform.jpg\" alt=\"vscode-select-mac-platform\"><\/p>\n<p>\u5f53\u7136\uff0c\u76ee\u524d\u7edd\u5927\u591a\u6570\u7684\u8f6f\u4ef6\u662f\u4e0d\u652f\u6301\u8fd9\u4e48\u9009\u62e9\u7684\uff0c\u4e5f\u5c31\u662f\u53ea\u63d0\u4f9b\u4e86\u4e00\u4e2a <code>Universal<\/code> \u901a\u7528\u7248\u672c\uff0c\u90a3\u5b89\u88c5\u540e\uff0c\u7535\u8111\u91cc\u5c31\u4f1a\u591a\u4e00\u4e2a\u67b6\u6784\u7684\u8f6f\u4ef6\uff0c\u53ef\u4ee5\u4f7f\u7528<a href=\"https:\/\/lemon.qq.com\">\u67e0\u6aac\u6e05\u7406<\/a>\u8fdb\u884c\u67e5\u627e\u6e05\u7406\u6389\uff0c\u4e0d\u5f71\u54cd\u6b63\u5e38\u4f7f\u7528\u3002<\/p>\n<h3 id=\"\u684c\u9762\u4e0a\u7684\u5b89\u88c5\u5305\u56fe\u6807\u600e\u4e48\u53bb\u9664\">\u684c\u9762\u4e0a\u7684\u5b89\u88c5\u5305\u56fe\u6807\u600e\u4e48\u53bb\u9664\uff1f<\/h3>\n<ul>\n<li>\u65b9\u6cd5\u2460\uff1a\u684c\u9762\u4e0a\u53f3\u952e\u5b89\u88c5\u5305\u56fe\u6807\uff0c\u9009\u62e9\u300c\u63a8\u51fa\u201cXXX\u201d\u300d\u3002<\/li>\n<\/ul>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/remove-desktop-icon.png\" alt=\"\u79fb\u9664\u684c\u9762\u5b89\u88c5\u5305\u955c\u50cf\u56fe\u6807\"><\/p>\n<ul>\n<li>\n<p>\u65b9\u6cd5\u2461\uff1aFinder\uff08\u8bbf\u8fbe\uff09\u5de6\u680f\u7684\u300c\u4f4d\u7f6e\u300d\u5904\u4e5f\u6709\u5bf9\u5e94\u5b89\u88c5\u5305\uff0c\u70b9\u6309\u5e94\u7528\u540d\u79f0\u53f3\u4fa7\u7684\u63a8\u51fa\u56fe\u6807\u5373\u53ef\u3002<\/p>\n<\/li>\n<li>\n<p>\u65b9\u6cd5\u2462\uff1a\u91cd\u542f\u7cfb\u7edf\u540e\uff0c\u5b89\u88c5\u5305\u955c\u50cf\u4f1a\u81ea\u52a8\u53d6\u6d88\uff0c\u5bf9\u5e94\u7684\u56fe\u6807\u4e5f\u4f1a\u81ea\u52a8\u6d88\u5931\u3002<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"\u5173\u95ed\u8f6f\u4ef6\u66f4\u65b0\">\u5173\u95ed\u8f6f\u4ef6\u66f4\u65b0<\/h3>\n<p>\u4e3a\u4f55\u8981\u5173\u95ed\u8f6f\u4ef6\u66f4\u65b0\uff1f\u56e0\u4e3a\u9ed8\u8ba4\u4f1a\u81ea\u52a8\u4e0b\u8f7d\u66f4\u65b0\uff0c\u4e5f\u5c31\u4f1a\u5077\u5077\u8dd1\u6d41\u91cf\uff0c\u800c\u82f9\u679c\u7cfb\u7edf\u66f4\u65b0\u90fd\u662f\u51e0\u4e2aG\u8d77\u6b65\u3002\u4e0d\u4fe1\u770b\u770b <code>\/Library\/Updates<\/code> \u76ee\u5f55\u6709\u591a\u5927\u3002<\/p>\n<p>\u5173\u95ed\u81ea\u52a8\u66f4\u65b0\uff1a<\/p>\n<ul>\n<li><code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e \u2192 \u8f6f\u4ef6\u66f4\u65b0 \u2192 \u81ea\u52a8\u4fdd\u6301\u6211\u7684 Mac \u8fd0\u884c\u6700\u65b0\u7248\u672c\uff08\u53d6\u6d88\u52fe\u9009\uff09<\/code><\/li>\n<li><code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e \u2192 \u8f6f\u4ef6\u66f4\u65b0 \u2192 \u9ad8\u7ea7... \u2192 \u53d6\u6d88\u6240\u6709\u52fe\u9009<\/code>\uff08\u4e3b\u8981\u662f<strong>\u4e0b\u8f7d\u53ef\u7528\u7684\u66f4\u65b0<\/strong>\uff09<\/li>\n<li><code>App Store \u2192 \u504f\u597d\u8bbe\u7f6e \u2192 \u81ea\u52a8\u66f4\u65b0\uff08\u53d6\u6d88\u52fe\u9009\uff09\u3001\u81ea\u52a8\u4e0b\u8f7d\u7ad9\u5176\u4ed6\u8bbe\u5907\u4e0a\u8d2d\u4e70\u7684App\uff08\u53d6\u6d88\u52fe\u9009\uff09<\/code><\/li>\n<\/ul>\n<p>\u5220\u9664\u5df2\u4e0b\u8f7d\u7684\u6587\u4ef6\uff1a<\/p>\n<ul>\n<li>\u5173\u95ed <code>SIP<\/code>\u3001\u5220\u9664\u76ee\u5f55 <code>\/Library\/Updates<\/code> \u4e0b\u7684\u5185\u5bb9\u3001\u518d\u5f00\u542f <code>SIP<\/code>\u3002<\/li>\n<\/ul>\n<p>\u8fdb\u7a0b <code>nsurlsessiond<\/code> \u4f1a\u5077\u5077\u8dd1\u6d41\u91cf\uff0c\u6709\u51e0\u4e2a\u539f\u56e0\uff1a<\/p>\n<ul>\n<li>\u6b63\u5728\u4e0b\u8f7d\u7cfb\u7edf\u6216\u8f6f\u4ef6\u66f4\u65b0\u6587\u4ef6<\/li>\n<li>iCloud \u6b63\u5728\u540c\u6b65\u6570\u636e<\/li>\n<\/ul>\n<h2 id=\"\u952e\u76d8\u7b26\u53f7\u4e0e\u5feb\u6377\u952e\">\u952e\u76d8\u7b26\u53f7\u4e0e\u5feb\u6377\u952e<\/h2>\n<h3 id=\"\u7b26\u53f7\u6620\u5c04\">\u7b26\u53f7\u6620\u5c04<\/h3>\n<table>\n<thead>\n<tr>\n<th>\u7b26\u53f7<\/th>\n<th>\u6309\u952e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u2318<\/td>\n<td>Command<\/td>\n<\/tr>\n<tr>\n<td>\u21e7<\/td>\n<td>Shift<\/td>\n<\/tr>\n<tr>\n<td>\u21ea<\/td>\n<td>Caps Lock<\/td>\n<\/tr>\n<tr>\n<td>\u2325<\/td>\n<td>Option = Alt<\/td>\n<\/tr>\n<tr>\n<td>\u2303<\/td>\n<td>Control<\/td>\n<\/tr>\n<tr>\n<td>Fn<\/td>\n<td>\u529f\u80fd\u952e<\/td>\n<\/tr>\n<tr>\n<td>\u21a9<\/td>\n<td>Enter<\/td>\n<\/tr>\n<tr>\n<td>\u232b<\/td>\n<td>Delete<\/td>\n<\/tr>\n<tr>\n<td>\u2326<\/td>\n<td>Fn + Delete<\/td>\n<\/tr>\n<tr>\n<td>\u2191<\/td>\n<td>\u4e0a\u7bad\u5934<\/td>\n<\/tr>\n<tr>\n<td>\u2193<\/td>\n<td>\u4e0b\u7bad\u5934<\/td>\n<\/tr>\n<tr>\n<td>\u2190<\/td>\n<td>\u5de6\u7bad\u5934<\/td>\n<\/tr>\n<tr>\n<td>\u2192<\/td>\n<td>\u53f3\u7bad\u5934<\/td>\n<\/tr>\n<tr>\n<td>\u21de<\/td>\n<td>Fn + \u2191 = Page Up<\/td>\n<\/tr>\n<tr>\n<td>\u21df<\/td>\n<td>Fn + \u2193 = Page Down<\/td>\n<\/tr>\n<tr>\n<td>Home<\/td>\n<td>Fn + \u2190<\/td>\n<\/tr>\n<tr>\n<td>End<\/td>\n<td>Fn + \u2192<\/td>\n<\/tr>\n<tr>\n<td>\u21e5<\/td>\n<td>Tab = \u53f3\u5236\u8868\u7b26<\/td>\n<\/tr>\n<tr>\n<td>\u21e4<\/td>\n<td>Shift + Tab = \u5de6\u5236\u8868\u7b26<\/td>\n<\/tr>\n<tr>\n<td>\u238b<\/td>\n<td>Esc = Escape<\/td>\n<\/tr>\n<tr>\n<td>\u23cf<\/td>\n<td>\u7535\u6e90\u5f00\u5173\u952e<\/td>\n<\/tr>\n<tr>\n<td>`<\/td>\n<td>\u53cd\u5f15\u53f7\uff08ESC \u4e0b\u9762\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4e00\u5b9a\u8981\u719f\u8bb0\u524d 5 \u4e2a\u7b26\u53f7\u7684\u6309\u952e\u4f4d\u7f6e\uff01\uff01\uff01<\/p>\n<h3 id=\"\u5e38\u7528\u5feb\u6377\u952e\">\u5e38\u7528\u5feb\u6377\u952e<\/h3>\n<p>\u5927\u90e8\u5206\u60c5\u51b5\u4e0b\uff0cCommand \u952e\u7b49\u540c\u4e8e Windows \u7684 Ctrl \u952e\uff0c\u4ee5\u4e0b\u4ec5\u5217\u51fa\u90e8\u5206\u5e38\u7528\u6216\u4e0e Windows \u4e0d\u4e00\u6837\u7684\u5feb\u6377\u952e\uff0c\u66f4\u591a\u53c2\u8003\u5b98\u65b9 <a href=\"https:\/\/support.apple.com\/zh-cn\/HT201236\">Mac \u952e\u76d8\u5feb\u6377\u952e<\/a> \u4ee5\u53ca\u5bf9\u5e94\u8f6f\u4ef6\u7684\u5feb\u6377\u952e\u3002<\/p>\n<table>\n<thead>\n<tr>\n<th>\u5feb\u6377\u952e<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Command + Z<\/td>\n<td>\u64a4\u9500\uff0c<code>Shift + Command + Z<\/code>\uff1a\u91cd\u505a<\/td>\n<\/tr>\n<tr>\n<td>Command + \u9017\u53f7 (<code>,<\/code>)<\/td>\n<td>\u6253\u5f00\u5f53\u524d\u7a97\u53e3\u5e94\u7528\u7684<strong>\u504f\u597d\u8bbe\u7f6e<\/strong><\/td>\n<\/tr>\n<tr>\n<td>Control + Command + Q<\/td>\n<td>\u7acb\u5373\u9501\u5b9a\u5c4f\u5e55<\/td>\n<\/tr>\n<tr>\n<td>Command + D<\/td>\n<td>\u590d\u5236\u6240\u9009\u6587\u4ef6<\/td>\n<\/tr>\n<tr>\n<td>Option + Command + D<\/td>\n<td>\u663e\u793a\u6216\u9690\u85cf\u201c\u7a0b\u5e8f\u575e\u201d<\/td>\n<\/tr>\n<tr>\n<td>Control + Command + D<\/td>\n<td>\u663e\u793a\u6216\u9690\u85cf\u6240\u9009\u5b57\u8bcd\u7684\u5b9a\u4e49<\/td>\n<\/tr>\n<tr>\n<td>Control + A<\/td>\n<td>\u79fb\u81f3\u884c\u6216\u6bb5\u843d\u7684\u5f00\u5934<\/td>\n<\/tr>\n<tr>\n<td>Control + E<\/td>\n<td>\u79fb\u81f3\u884c\u6216\u6bb5\u843d\u7684\u672b\u5c3e<\/td>\n<\/tr>\n<tr>\n<td>Control + U<\/td>\n<td>\u7ec8\u7aef\u8f6f\u4ef6\u91cc\uff0c\u76f4\u63a5\u6e05\u9664\u884c<\/td>\n<\/tr>\n<tr>\n<td>Control + \u7a7a\u683c<\/td>\n<td>\u5207\u6362\u8f93\u5165\u6cd5<\/td>\n<\/tr>\n<tr>\n<td>Command + Q<\/td>\n<td>\u9000\u51fa\u5f53\u524d\u5e94\u7528<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul>\n<li>\u8bbf\u8fbe<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>\u5feb\u6377\u952e<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Command + \u4e0a\u7bad\u5934<\/td>\n<td>\u6253\u5f00\u5305\u542b\u5f53\u524d\u6587\u4ef6\u5939\u7684\u6587\u4ef6\u5939<\/td>\n<\/tr>\n<tr>\n<td>Command + \u5de6\u4e2d\u62ec\u53f7 (<code>[<\/code>)<\/td>\n<td>\u524d\u5f80\u4e0a\u4e00\u6587\u4ef6\u5939<\/td>\n<\/tr>\n<tr>\n<td>Command + \u53f3\u4e2d\u62ec\u53f7 (<code>]<\/code>)<\/td>\n<td>\u524d\u5f80\u4e0b\u4e00\u4e2a\u6587\u4ef6\u5939<\/td>\n<\/tr>\n<tr>\n<td>Command + Delete<\/td>\n<td>\u5c06\u6240\u9009\u9879\u79fb\u5230\u5e9f\u7eb8\u7bd3<\/td>\n<\/tr>\n<tr>\n<td>Option + Command + C<\/td>\n<td>\u590d\u5236\u5f53\u524d\u76ee\u5f55\u7684\u5168\u8def\u5f84<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul>\n<li>\u7a97\u53e3<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>\u5feb\u6377\u952e<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Command + Tab<\/td>\n<td>\u5728\u591a\u4e2a\u6253\u5f00\u7684 App \u4e4b\u95f4\u5207\u6362\u5230<strong>\u4e0b\u4e00\u4e2a<\/strong>\u6700\u8fd1\u4f7f\u7528\u7684 App<\/td>\n<\/tr>\n<tr>\n<td>Command + Shift + Tab<\/td>\n<td>\u5728\u591a\u4e2a\u6253\u5f00\u7684 App \u4e4b\u95f4\u5207\u6362\u5230<strong>\u4e0a\u4e00\u4e2a<\/strong>\u6700\u8fd1\u4f7f\u7528\u7684 App<\/td>\n<\/tr>\n<tr>\n<td>Command + `\uff08\u53cd\u5f15\u53f7\uff09<\/td>\n<td>\u540c\u4e00\u4e2a\u5e94\u7528\u7684\u4e0d\u540c\u7a97\u53e3\u95f4\u5207\u6362\uff0c\u5df2\u88ab\u6700\u5c0f\u5316\u7684\u7a97\u53e3\u65e0\u6cd5\u6062\u590d<\/td>\n<\/tr>\n<tr>\n<td>Command + M<\/td>\n<td>\u6700\u5c0f\u5316\u5f53\u524d\u7a97\u53e3\uff0c\u4f46\u65e0\u6cd5\u901a\u8fc7\u5feb\u6377\u952e\u5207\u6362\u56de\u6765\uff0c\u53ea\u80fd\u624b\u52a8\u53bb\u83dc\u5355\u680f\u6216\u7a0b\u5e8f\u575e\u91cd\u65b0\u6253\u5f00<\/td>\n<\/tr>\n<tr>\n<td>Command + H<\/td>\n<td>\u9690\u85cf\u5f53\u524d\u5e94\u7528\uff0c\u5373\u8be5\u5e94\u7528\u7684\u6240\u6709\u7a97\u53e3\uff0c\u53ef\u901a\u8fc7\u5feb\u6377\u952e\u5207\u6362\u56de\u6765<\/td>\n<\/tr>\n<tr>\n<td>Command + Option + H<\/td>\n<td>\u9690\u85cf\u5176\u4ed6\u5e94\u7528<\/td>\n<\/tr>\n<tr>\n<td>F3<\/td>\n<td>\u663e\u793a\u5f53\u524d\u684c\u9762\u7684\u6240\u6709\u5df2\u6253\u5f00\u7a97\u53e3\uff08\u4e0d\u542b\u6700\u5c0f\u5316\u6216\u5df2\u9690\u85cf\uff09<\/td>\n<\/tr>\n<tr>\n<td>Control + \u4e0a\u7bad\u5934<\/td>\n<td>\u540c\u4e0a<\/td>\n<\/tr>\n<tr>\n<td>\u89e6\u63a7\u677f\uff1a\u56db\u6307\u5411\u4e0a\u8f7b\u626b<\/td>\n<td>\u540c\u4e0a\uff08\u5982\u5df2\u8bbe\u7f6e<code>\u89e6\u63a7\u677f \u2192 \u66f4\u591a\u624b\u52bf \u2192 \u8c03\u5ea6\u4e2d\u5fc3<\/code>\uff09<\/td>\n<\/tr>\n<tr>\n<td>Control + \u4e0b\u7bad\u5934<\/td>\n<td>\u663e\u793a\u5f53\u524d\u5e94\u7528\u7684\u6240\u6709\u5df2\u6253\u5f00\u7a97\u53e3\uff08\u4e0d\u542b\u6700\u5c0f\u5316\u6216\u5df2\u9690\u85cf\uff09<\/td>\n<\/tr>\n<tr>\n<td>\u89e6\u63a7\u677f\uff1a\u56db\u6307\u5411\u4e0b\u8f7b\u626b<\/td>\n<td>\u540c\u4e0a\uff08\u5982\u5df2\u8bbe\u7f6e<code>\u89e6\u63a7\u677f \u2192 \u66f4\u591a\u624b\u52bf \u2192 App Expose<\/code>\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<ul>\n<li>\u684c\u9762<\/li>\n<\/ul>\n<table>\n<thead>\n<tr>\n<th>\u5feb\u6377\u952e<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Control + \u53f3\u7bad\u5934<\/td>\n<td>\u5411\u53f3\u5207\u6362\u684c\u9762<\/td>\n<\/tr>\n<tr>\n<td>\u89e6\u63a7\u677f\uff1a\u56db\u6307\u5411\u53f3\u8f7b\u626b<\/td>\n<td>\u540c\u4e0a<\/td>\n<\/tr>\n<tr>\n<td>Control + \u5de6\u7bad\u5934<\/td>\n<td>\u5411\u5de6\u5207\u6362\u684c\u9762<\/td>\n<\/tr>\n<tr>\n<td>\u89e6\u63a7\u677f\uff1a\u56db\u6307\u5411\u5de6\u8f7b\u626b<\/td>\n<td>\u540c\u4e0a<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u5176\u4ed6\u5feb\u6377\u952e\uff1a\u9009\u53d6\u82f9\u679c\u83dc\u5355 &gt; \u201c\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e\u201d\uff0c\u70b9\u6309\u201c\u952e\u76d8\u201d\uff0c\u7136\u540e\u70b9\u6309\u201c\u5feb\u6377\u952e\u201d\u3002<\/p>\n<h2 id=\"\u57fa\u7840\u8bbe\u7f6e\">\u57fa\u7840\u8bbe\u7f6e<\/h2>\n<h3 id=\"\u89e6\u63a7\u677f\u8bbe\u7f6e\">\u89e6\u63a7\u677f\u8bbe\u7f6e<\/h3>\n<p>\u89e6\u63a7\u677f\u7684\u8bbe\u7f6e\u53ca\u4f7f\u7528\u6559\u7a0b\uff0c\u53ef\u67e5\u770b <code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u89e6\u63a7\u677f<\/code>\u3002<\/p>\n<blockquote>\n<p>\u8ba9\u4f60\u7684\u89e6\u63a7\u677f\u53d8\u7684\u8ddf\u9f20\u6807\u4e0d\u540c\uff0c\u6cbb\u7597\u4f60\u7684\u624b\u6307\u5173\u8282\u708e\ud83d\ude04<\/p>\n<\/blockquote>\n<ul>\n<li>\n<p><code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u89e6\u63a7\u677f &gt; \u5149\u6807\u4e0e\u70b9\u6309<\/code><\/p>\n<ul>\n<li><code>\u8f7b\u70b9\u6765\u70b9\u6309\uff08\u52fe\u9009\uff09<\/code><\/li>\n<li><u>\u53ef\u5355\u6307\u8f7b\u70b9=\u9f20\u6807\u5de6\u952e\u70b9\u51fb\uff0c\u53ef\u53cc\u6307\u8f7b\u70b9=\u9f20\u6807\u53f3\u952e\u70b9\u51fb<\/u><\/li>\n<\/ul>\n<\/li>\n<li>\n<p><code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u89e6\u63a7\u677f &gt; \u5149\u6807\u4e0e\u70b9\u6309<\/code><\/p>\n<ul>\n<li><code>\u67e5\u8be2\u4e0e\u6570\u636e\u68c0\u6d4b\u5668\uff08\u52fe\u9009\uff09<\/code><\/li>\n<li><code>\u4e09\u6307\u8f7b\u70b9<\/code><\/li>\n<li><u>\u5bf9\u7740\u8bcd\u6c47\u4e09\u6307\u8f7b\u70b9\uff0c\u76f4\u63a5\u8c03\u7528Mac\u81ea\u5e26\u8bcd\u5178\u67e5\u8be2\uff0c\u4e0e\u53f3\u952e\u4e2d\u7684\u300c\u67e5\u8be2\u300d\u4e00\u6837<\/u><\/li>\n<\/ul>\n<\/li>\n<li>\n<p><code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u89e6\u63a7\u677f &gt; \u66f4\u591a\u624b\u52bf<\/code><\/p>\n<ul>\n<li><code>App Expose\uff08\u52fe\u9009\uff09<\/code><\/li>\n<li><code>\u5728\u5168\u5c4f\u5e55\u663e\u793a\u7684App\u4e4b\u95f4\u8f7b\u626b\uff08\u56db\u6307\u5de6\u53f3\u8f7b\u626b\uff09<\/code><\/li>\n<li><u>\u4ee5\u4e0a\u4e24\u4e2a\u9009\u9879\uff0c\u5c06\u4e09\u6307\u64cd\u4f5c\u6539\u4e3a\u56db\u6307\u64cd\u4f5c\uff0c\u662f\u4e3a\u4e86\u7ed9\u300c\u4e09\u6307\u62d6\u79fb\u300d\u8ba9\u8def<\/u><\/li>\n<\/ul>\n<\/li>\n<li>\n<p><code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u8f85\u52a9\u529f\u80fd &gt; \u6307\u9488\u63a7\u5236 &gt; \u9f20\u6807\u4e0e\u89e6\u63a7\u677f &gt; \u89e6\u63a7\u677f\u9009\u9879<\/code><\/p>\n<ul>\n<li><code>\u542f\u52a8\u62d6\u79fb\uff08\u52fe\u9009\uff09&gt; \u4e09\u6307\u62d6\u79fb<\/code><\/li>\n<li><u>\u4e0e\u9f20\u6807\u5de6\u952e\u6309\u4f4f\u62d6\u52a8\u4e00\u6837\uff0c\u4e09\u4e2a\u624b\u6307\u540c\u65f6\u5728\u89e6\u63a7\u677f\u6ed1\u52a8\uff0c\u53ef\u62d6\u52a8\u4efb\u4f55\u7a97\u53e3\u7684\u83dc\u5355\u680f\u8fdb\u884c\u79fb\u52a8\uff0c\u4e5f\u53ef\u4ee5\u9009\u62e9\u8303\u56f4\u5185\u5bb9<\/u><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u5b66\u4e60\u89e6\u63a7\u677f\u8bbe\u7f6e\u4e2d\u7684\u5404\u4e2a\u624b\u52bf\u64cd\u4f5c\u793a\u8303\u89c6\u9891\uff0c\u522b\u518d\u8ddf\u9f20\u6807\u4e00\u6837\u7528\u89e6\u63a7\u677f\u5566\u3002<\/p>\n<h3 id=\"\u5f00\u542f\u4efb\u4f55\u6765\u6e90\">\u5f00\u542f\u4efb\u4f55\u6765\u6e90<\/h3>\n<p>\u4e3a\u4f55\u8981\u300c\u4efb\u4f55\u6765\u6e90\u300d\u6743\u9650\uff1f\u56e0\u4e3a\u4e0d\u5f00\u542f\u5c31\u65e0\u6cd5\u5b89\u88c5 <code>App Store<\/code> \u4ee5\u5916\u7684\u8f6f\u4ef6\uff0c\u6bd4\u5982\u4ece\u7f51\u7ad9\u76f4\u63a5\u4e0b\u8f7d\u7684 dmg \u5b89\u88c5\u5305\u3002<\/p>\n<p><code>\u88ab\u8ba4\u53ef\u7684\u5f00\u53d1\u8005<\/code> \u6307\u7684\u662f\u8d2d\u4e70\u4e86\u82f9\u679c\u4f01\u4e1a\u8bc1\u4e66\u5bf9\u5e94\u7528\u8fdb\u884c\u7b7e\u540d\u3001\u4e14\u63d0\u4ea4\u7ed9\u82f9\u679c\u5ba1\u6838\u901a\u8fc7\u7684\u8f6f\u4ef6\u3002\u800c\u5927\u90e8\u5206\u514d\u8d39\u5f00\u6e90\u7684\u5e94\u7528\u662f\u4e0d\u4f1a\u53bb\u8d2d\u4e70\u6b64\u8bc1\u4e66\u7684\u3002\u53e6\u5916\uff0c\u7834\u89e3\u5e94\u7528\u56e0\u4e3a\u4f1a\u4fee\u6539\u5e94\u7528\u7684\u6587\u4ef6\u4ece\u800c\u5bfc\u81f4\u7b7e\u540d\u5931\u6548\u800c\u65e0\u6cd5\u8fd0\u884c\u3002\u6240\u4ee5\uff0c\u60f3\u5b89\u88c5\u7b2c\u4e09\u65b9\u5e94\u7528\uff0c\u9700\u8981\u5f00\u542f <code>\u4efb\u4f55\u6765\u6e90<\/code> \u8fd9\u4e2a\u6743\u9650\u3002<\/p>\n<p><code>macOS<\/code> \u9ed8\u8ba4\u9690\u85cf\u4e86 <code>\u4efb\u4f55\u6765\u6e90<\/code> \u9009\u9879\uff0c\u9700\u8981\u5728\u7ec8\u7aef\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u663e\u793a\u6b64\u9009\u9879\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">sudo spctl --master-disable\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7136\u540e\u5728 <code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u5b89\u5168\u6027\u4e0e\u9690\u79c1 &gt; \u901a\u7528 &gt; \u4efb\u4f55\u6765\u6e90<\/code> \u6253\u5f00\uff1a<\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/install-any-source-app.jpg\" alt=\"install-any-source-app\"><\/p>\n<h3 id=\"\u4fee\u6539\u4e3b\u673a\u540d\">\u4fee\u6539\u4e3b\u673a\u540d<\/h3>\n<blockquote>\n<p>\u5c31\u662f\u4e3a\u4e86\u597d\u770b\u70b9\uff0c\u9ed8\u8ba4\u7684\u592a\u4e11\uff0c\u9694\u7a7a\u6295\u9001\u7684\u663e\u793a\u540d\u5b57\u548c\u7ec8\u7aef\u90fd\u4f1a\u7528\u5230<\/p>\n<\/blockquote>\n<p>\u53c2\u8003\u6587\u7ae0: <a href=\"https:\/\/shockerli.net\/post\/macos-hostname-scutil\/\">https:\/\/shockerli.net\/post\/macos-hostname-scutil\/<\/a><\/p>\n<p>\u8bbe\u7f6e\u8def\u5f84\uff1a<code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u5171\u4eab<\/code> =&gt; \u4fee\u6539<code>\u7535\u8111\u540d\u79f0<\/code>\u3001\u7f16\u8f91<code>\u672c\u5730\u4e3b\u673a\u540d<\/code><\/p>\n<p>\u4e5f\u53ef\u901a\u8fc7\u547d\u4ee4\u4fee\u6539\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u4fee\u6539\u4e3b\u673a\u540d<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo scutil --set HostName \u81ea\u5b9a\u4e49\u4e3b\u673a\u540d\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u4fee\u6539\u7535\u8111\u540d\u79f0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo scutil --set ComputerName \u81ea\u5b9a\u4e49\u7535\u8111\u540d\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u62fc\u5199\u8f85\u52a9\">\u62fc\u5199\u8f85\u52a9<\/h3>\n<p>\u5f53\u4f60\u8f93\u5165\u82f1\u6587\u5355\u8bcd\u65f6\uff0c\u9ed8\u8ba4\u4f1a\u63d0\u793a\u4f60\u66f4\u6b63\u9996\u5b57\u6bcd\u4e3a\u5927\u5199\uff0c\u70e6\u4eba\u7684\u5f88\u3002<\/p>\n<p><code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u952e\u76d8 &gt; \u6587\u672c &gt; \u81ea\u52a8\u5927\u5199\u5b57\u8bcd\u7684\u9996\u5b57\u6bcd\uff08\u53d6\u6d88\u52fe\u9009\uff09<\/code><\/p>\n<p>\u540c\u7406\uff0c\u5982\u679c\u4e0d\u60f3\u300c\u81ea\u52a8\u7ea0\u6b63\u62fc\u5199\u300d\u6216\u5176\u4ed6\u8f93\u5165\u76f8\u5173\u7684\u529f\u80fd\uff0c\u4e5f\u53ef\u5728\u6b64\u9762\u677f\u4e00\u5e76\u8c03\u6574\u3002<\/p>\n<h3 id=\"\u7a0b\u5e8f\u575edock\">\u7a0b\u5e8f\u575e\uff08Dock\uff09<\/h3>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/mac-icon-dock.png\" alt=\"mac-icon-dock\"><\/p>\n<p><code>\u7a0b\u5e8f\u575e(Dock)<\/code> \u662f macOS \u684c\u9762\u4e0a\u65e5\u5e38 APP \u548c\u529f\u80fd\u7684\u4fbf\u5229\u7ba1\u7406\uff0c\u4e0e <code>Windows<\/code> \u4efb\u52a1\u680f\u7c7b\u4f3c\u3002<\/p>\n<p><code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u7a0b\u5e8f\u575e\u4e0e\u83dc\u5355\u680f &gt; \u7a0b\u5e8f\u575e<\/code>\n- <code>&gt; \u5c06\u7a97\u53e3\u6700\u5c0f\u5316\u81f3\u5e94\u7528\u7a0b\u5e8f\u56fe\u6807\uff08\u52fe\u9009\uff09<\/code>\n- <code>&gt; \u5728\u7a0b\u5e8f\u575e\u4e2d\u663e\u793a\u6700\u8fd1\u4f7f\u7528\u7684\u5e94\u7528\u7a0b\u5e8f\uff08\u53d6\u6d88\u52fe\u9009\uff09<\/code><\/p>\n<p>\u4ece\u7a0b\u5e8f\u575e\u4e2d\u6328\u4e2a\u79fb\u9664\u4f60\u4e0d\u884c\u8981\u7684\u5e94\u7528\u56fe\u6807\uff0c\u4ee5\u53ca\u6dfb\u52a0\u4f60\u5e0c\u671b\u5e38\u9a7b\u7684\u56fe\u6807\u3002<\/p>\n<p><strong>\u79fb\u9664<\/strong>\uff1a<code>\u53f3\u952e\u7a0b\u5e8f\u575e\u4e2d\u5e94\u7528\u56fe\u6807 &gt; \u9009\u9879 &gt; \u4ece\u7a0b\u5e8f\u575e\u4e2d\u79fb\u9664<\/code><\/p>\n<p>\u6216\u8005\u5c06\u7a0b\u5e8f\u575e\u4e2d\u7684\u56fe\u6807\u62d6\u5230\u5e9f\u7eb8\u7bd3\u4e2d\u4e5f\u80fd\u5220\u9664\u56fe\u6807\u3002<\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/remove-dock-icon.png\" alt=\"\u79fb\u9664\u7a0b\u5e8f\u575e\u56fe\u6807\"><\/p>\n<p><strong>\u6dfb\u52a0<\/strong>\uff1a\u4ece\u542f\u52a8\u53f0\uff08\u5e94\u7528\u5168\u5217\u8868\uff09\u62d6\u52a8\u56fe\u6807\u5230\u7a0b\u5e8f\u575e\u6307\u5b9a\u4f4d\u7f6e<\/p>\n<h3 id=\"\u663e\u793a\u5668\">\u663e\u793a\u5668<\/h3>\n<h4 id=\"\u591c\u89c8\">\u591c\u89c8<\/h4>\n<p>\u591c\u89c8\u4e0e <a href=\"https:\/\/justgetflux.com\">f.lux<\/a> \u529f\u80fd\u7c7b\u4f3c\uff0c\u6839\u636e\u65f6\u95f4\u6765\u81ea\u52a8\u8c03\u8282\u663e\u793a\u5668\u8272\u6e29\u7684\u62a4\u773c\u7a0b\u5e8f\u3002\u4e0d\u8fc7\u7cfb\u7edf\u81ea\u5e26\u591c\u89c8\u53ea\u652f\u6301\u5185\u7f6e\u663e\u793a\u5668\uff0c\u5916\u63a5\u663e\u793a\u5668\u4e0d\u4f1a\u751f\u6548\uff0c\u6b64\u65f6\u53ef\u5173\u95ed\u591c\u89c8\u5e76\u4f7f\u7528 <code>f.lux<\/code>\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u663e\u793a\u5668 &gt; \u591c\u89c8... &gt; \u8bbe\u5b9a\u65f6\u95f4 &gt; \u65e5\u843d\u5230\u65e5\u51fa\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u83dc\u5355\u680f\">\u83dc\u5355\u680f<\/h3>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/mac-icon-menu.png\" alt=\"mac-icon-menu\"><\/p>\n<p>\u83dc\u5355\u680f\u4e2d\u7684\u7cfb\u7edf\u56fe\u6807\u5c3d\u91cf\u5c11\u4e00\u70b9\uff0c\u591a\u7559\u7a7a\u95f4\u7ed9\u5e94\u7528\u56fe\u6807\uff0c\u5c24\u5176\u662f\u5c0f\u5c4f\u3001\u5218\u6d77\u5c4f\u3002<\/p>\n<h4 id=\"\u65f6\u949f\">\u65f6\u949f<\/h4>\n<p>\u9ed8\u8ba4\u65f6\u95f4\u683c\u5f0f\u592a\u957f\uff0c\u53bb\u9664\u4e0d\u5fc5\u8981\u7684\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u7a0b\u5e8f\u575e\u4e0e\u83dc\u5355\u680f &gt; \u65f6\u949f &gt; \u663e\u793a\u65e5\u671f\uff08\u53d6\u6d88\u52fe\u9009\uff09\u3001\u663e\u793a\u661f\u671f\uff08\u53d6\u6d88\u52fe\u9009\uff09\u3001\u5728\u65f6\u95f4\u4e2d\u663e\u793a\u79d2\u949f\uff08\u52fe\u9009\uff09\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u805a\u7126\">\u805a\u7126<\/h4>\n<p>\u4e0d\u9700\u8981\u5728\u83dc\u5355\u680f\u5c55\u793a\uff0c\u6709\u5feb\u6377\u952e <code>\u2318 + \u7a7a\u683c<\/code>\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u7a0b\u5e8f\u575e\u4e0e\u83dc\u5355\u680f &gt; \u805a\u7126 &gt; \u5728\u83dc\u5355\u680f\u4e2d\u663e\u793a\uff08\u53d6\u6d88\u52fe\u9009\uff09\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"siri\">Siri<\/h4>\n<p>\u4e0d\u9700\u8981\u5728\u83dc\u5355\u680f\u5c55\u793a\uff0c\u53ef\u914d\u7f6e\u5feb\u6377\u952e\u6216\u8bed\u97f3\u6307\u4ee4\u3002<\/p>\n<p><code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; Siri<\/code>\uff0c\u81ea\u884c\u914d\u7f6e\u300c\u542c\u53d6\u201c\u563fSiri\u201d\u300d\u3001\u5feb\u6377\u952e\u7b49\u3002<\/p>\n<h3 id=\"\u8bbf\u8fbefinder\">\u8bbf\u8fbe\uff08Finder\uff09<\/h3>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/mac-icon-finder.png\" alt=\"mac-icon-finder\"><\/p>\n<p><code>\u8bbf\u8fbe(Finder)<\/code> \u662f macOS \u4e2d\u6587\u4ef6\u53ef\u89c6\u5316\u7ba1\u7406\u7a0b\u5e8f\u3002<\/p>\n<ul>\n<li>\n<p><code>\u8bbf\u8fbe \u2192 \u504f\u597d\u8bbe\u7f6e \u2192 \u901a\u7528 \u2192 \u5f00\u542f\u65b0\u201c\u8bbf\u8fbe\u201d\u7a97\u53e3\u65f6\u6253\u5f00\uff1a\u300c\u4e0b\u8f7d\u300d<\/code><\/p>\n<p>\u8bbe\u7f6e\u4e00\u4e2a\u8bbf\u8fbe\u542f\u52a8\u65f6\u7684\u9ed8\u8ba4\u6253\u5f00\u76ee\u5f55\u3002<\/p>\n<\/li>\n<li>\n<p><code>\u8bbf\u8fbe \u2192 \u504f\u597d\u8bbe\u7f6e \u2192 \u901a\u7528 \u2192 \u5728\u6807\u7b7e\u9875\u4e2d\u6253\u5f00\u6587\u4ef6\u5939\uff08\u52fe\u9009\uff09<\/code><\/p>\n<p>\u5f00\u542f\u591a\u6807\u7b7e\u9875\u529f\u80fd\u3002\n\uff08\u65e7\u7248\u7cfb\u7edf\u4e0d\u652f\u6301\uff0c\u53ef\u81ea\u884c\u5b89\u88c5 <code>Path Finder<\/code> \u6216 <code>TotalFinder<\/code> \u4ee5\u4f7f\u7528\u8be5\u529f\u80fd\uff09<\/p>\n<\/li>\n<li>\n<p><code>\u8bbf\u8fbe \u2192 \u504f\u597d\u8bbe\u7f6e \u2192 \u9ad8\u7ea7 \u2192 \u6267\u884c\u641c\u7d22\u65f6\uff1a\u300c\u641c\u7d22\u5f53\u524d\u6587\u4ef6\u5939\u300d<\/code><\/p>\n<p>\u9ed8\u8ba4\u662f\u641c\u5168\u7535\u8111\u6587\u4ef6\uff0c\u4f46\u7edd\u5927\u591a\u6570\u6211\u4eec\u671f\u671b\u7684\u662f\u641c\u7d22\u5f53\u524d\u6587\u4ef6\u5939\u4e0b\u7684\u6587\u4ef6\u3002<\/p>\n<\/li>\n<li>\n<p>\u5f00\u542f <code>\u9000\u51fa\u8bbf\u8fbe<\/code> \u529f\u80fd<\/p>\n<p>\u4e00\u822c\u90fd\u5e94\u7528\u90fd\u80fd\u9000\u51fa\uff08<code>\u2318 + Q<\/code>\uff09\uff0c\u4f46\u8bbf\u8fbe\u9ed8\u8ba4\u662f\u4e0d\u884c\u7684\uff0c\u9700\u624b\u52a8\u5f00\u542f\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">defaults write com.apple.finder QuitMenuItem -bool <span class=\"nb\">true<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">killall Finder\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><\/li>\n<li>\n<p>\u663e\u793a\u76ee\u5f55\u5168\u8def\u5f84<\/p>\n<p><code>Finder<\/code> \u9876\u680f\u9ed8\u8ba4\u663e\u793a\u7684\u662f\u5f53\u524d\u76ee\u5f55\u7684\u540d\u79f0\uff0c\u5982\u9700\u8ddf Windows \u4e00\u6837\u663e\u793a\u5168\u8def\u5f84\uff0c\u9700\u624b\u52a8\u5f00\u542f\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">defaults write com.apple.finder _FXShowPosixPathInTitle -bool <span class=\"nb\">true<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">killall Finder\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><\/li>\n<\/ul>\n<h3 id=\"\u670d\u52a1\">\u670d\u52a1<\/h3>\n<p><code>\u670d\u52a1<\/code> \u662f macOS \u4e2d\u670d\u52a1\u63d0\u4f9b\u8005\u7a0b\u5e8f\u4e3a\u670d\u52a1\u8bf7\u6c42\u8005\u7a0b\u5e8f\u63d0\u4f9b\u7684\u4fbf\u6377\u670d\u52a1\uff08\u4fbf\u6377\u5165\u53e3\u3001\u4e14\u652f\u6301\u8bbe\u7f6e\u5feb\u6377\u952e\uff09\u3002<\/p>\n<p>\u4f8b\u5982\uff0c<code>iTerm<\/code> \u5c31\u5728 <code>Finder<\/code><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e \u2192 \u952e\u76d8 \u2192 \u5feb\u6377\u952e \u2192 \u670d\u52a1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u53ef\u5f00\u542f\u6240\u9700\u670d\u52a1\uff0c\u53ca\u8bbe\u7f6e\u5176\u5feb\u6377\u952e\u3002<\/p>\n<h3 id=\"\u5bc6\u7801\u957f\u5ea6\u9650\u5236\">\u5bc6\u7801\u957f\u5ea6\u9650\u5236<\/h3>\n<p>macOS 10.14 \u540e\u4e0d\u5141\u8bb8\u8bbe\u7f6e 4 \u4f4d\u6570\u4ee5\u4e0b\u7684\u5bc6\u7801\u3002\u4e0b\u9762\u7684\u547d\u4ee4\u53ef\u5173\u95ed\u8fd9\u4e2a\u7b56\u7565\u7684\u9650\u5236\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">pwpolicy -clearaccountpolicies\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5f00\u673a\u81ea\u542f\u7ba1\u7406\">\u5f00\u673a\u81ea\u542f\u7ba1\u7406<\/h3>\n<p>\u7528\u6237\u7ea7\u522b\u7684\u5f00\u673a\u81ea\u542f\u5e94\u7528\u7ba1\u7406\uff0c\u53ef\u5728 <code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e \u2192 \u7528\u6237\u4e0e\u7fa4\u7ec4 \u2192 \u767b\u5f55\u9879<\/code> \u5217\u8868\u4e2d\u67e5\u770b\u548c\u5f00\u5173\u3002<\/p>\n<p>\u7cfb\u7edf\u7ea7\u522b\u7684\uff0c\u6bd4\u5982 <code>Docker<\/code>\uff0c\u53ef\u7528 <code>\u67e0\u6aac\u6e05\u7406<\/code> \u7b49\u7cfb\u7edf\u5de5\u5177\u8fdb\u884c\u7ba1\u7406\u3002<\/p>\n<p>\u5982\u679c\u662f\u901a\u8fc7 <code>Homebrew<\/code> \u5b89\u88c5\u7684\u670d\u52a1\uff0c\u90a3\u53ef\u7528 <code>brew services<\/code> \u547d\u4ee4\u7ba1\u7406\u3002<\/p>\n<p>\u4e5f\u53ef\u4ee5\u901a\u8fc7\u547d\u4ee4 <code>launchctl<\/code> \u8fdb\u884c\u7ba1\u7406\u3002<\/p>\n<h3 id=\"\u5173\u95ed\u8f93\u5165\u6cd5\u5207\u6362\u65f6\u7684\u63d0\u793a\u56fe\u6807\">\u5173\u95ed\u8f93\u5165\u6cd5\u5207\u6362\u65f6\u7684\u63d0\u793a\u56fe\u6807<\/h3>\n<blockquote>\n<p>\u81ea macOS 14 Sonoma \u5f00\u59cb\uff0c\u9ed8\u8ba4\u4f1a\u5728\u5207\u6362\u8f93\u5165\u6cd5\u65f6\uff0c\u5149\u6807\u5904\u6709\u4e2a\u63d0\u793a\u56fe\u6807\u3002<\/p>\n<p>\u5728\u7ec8\u7aef\u7c7b\u8f6f\u4ef6\u4e2d\uff0c\u6267\u884c\u4ee5\u4e0b\u6307\u4ee4\uff0c\u5e76\u6309\u63d0\u793a\u8f93\u5165\u7535\u8111\u5bc6\u7801\uff0c\u7136\u540e\u91cd\u542f\u7535\u8111\u540e\u5173\u95ed\u8be5\u63d0\u793a\u3002<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">sudo defaults write \/Library\/Preferences\/FeatureFlags\/Domain\/UIKit.plist redesigned_text_cursor -dict-add Enabled -bool NO\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5173\u4e8e-sip\">\u5173\u4e8e SIP<\/h3>\n<p>SIP\uff08<code>System Integrity Protection<\/code>\uff0c\u7cfb\u7edf\u5b8c\u6574\u6027\u4fdd\u62a4\uff09\u662f macOS \u6240\u91c7\u7528\u7684\u4e00\u9879\u5b89\u5168\u6280\u672f\uff0c\u80fd\u591f\u5e2e\u52a9\u9632\u6b62\u6f5c\u5728\u6076\u610f\u8f6f\u4ef6\u4fee\u6539 macOS \u4e0a\u53d7\u4fdd\u62a4\u7684\u6587\u4ef6\u548c\u6587\u4ef6\u5939\u3002\u7cfb\u7edf\u5b8c\u6574\u6027\u4fdd\u62a4\u53ef\u4ee5\u9650\u5236 <code>root<\/code> \u7528\u6237\u5e10\u6237\uff0c\u4ee5\u53ca <code>root<\/code> \u7528\u6237\u80fd\u591f\u5728 macOS \u7684\u53d7\u4fdd\u62a4\u90e8\u5206\u5b8c\u6210\u7684\u64cd\u4f5c\u3002<\/p>\n<p>\u4e3a\u4e86\u5b89\u5168\uff0c<strong>\u5f3a\u70c8\u4e0d\u5efa\u8bae<\/strong>\u5173\u95ed <code>SIP<\/code> \u4fdd\u62a4\u3002<\/p>\n<p>\u5982\u679c\u4e00\u4e2a\u5e94\u7528\u9700\u8981\u5173\u95ed SIP \u624d\u53ef\u8fd0\u884c\uff0c\u8fd9\u610f\u5473\u7740\u6b64\u5e94\u7528\u672c\u8eab\u4e5f\u4e0d\u5b89\u5168\uff0c\u53ef\u76f4\u63a5\u653e\u5f03\u3002<\/p>\n<p>\u5982\u679c\u662f\u4e34\u65f6\u6027\u7684\u9700\u8981\uff08\u5982\u4e0a\u6587\u63d0\u5230\u7684\u5220\u9664\u7cfb\u7edf\u66f4\u65b0\u6587\u4ef6\uff09\uff0c\u53ef\u4ee5\u5148\u5173\u95ed\u3001\u64cd\u4f5c\u5b8c\u540e\u518d\u7acb\u5373\u5f00\u542f\u3002<\/p>\n<h2 id=\"\u57fa\u7840\u8bbe\u65bd\">\u57fa\u7840\u8bbe\u65bd<\/h2>\n<h3 id=\"xcode-command-line-tools\">Xcode Command Line Tools<\/h3>\n<blockquote>\n<p>macOS \u7cfb\u7edf\u5f88\u591a\u8f6f\u4ef6\u90fd\u9700\u8981\u7528\u5230\u7684\u4f9d\u8d56\u5de5\u5177\uff0c\u4e0d\u5b89\u88c5\u7684\u8bdd\u8fde Git \u90fd\u6ca1\u6cd5\u7528\ud83d\ude44<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">xcode-select --install\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u540c\u610f\u534f\u8bae\u540e\u4f1a\u5168\u7a0b\u81ea\u52a8\u4e0b\u8f7d\u5b89\u88c5\uff0c\u6587\u4ef6\u6bd4\u8f83\u5927\uff0c\u9700\u8981\u7b49\u5f85\u4e00\u4f1a\u3002<\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/install-xcode-select.png\" alt=\"install-xcode-select\"><\/p>\n<h3 id=\"homebrew\">Homebrew<\/h3>\n<p>\u5f00\u6e90\u514d\u8d39\u3001\u5f3a\u5927\u6613\u7528\u7684\u8f6f\u4ef6\u5b89\u88c5\u7ba1\u7406\u5668\u3002<\/p>\n<p>\u5b98\u7f51: <a href=\"https:\/\/brew.sh\">https:\/\/brew.sh<\/a><\/p>\n<p>GitHub: <a href=\"https:\/\/github.com\/Homebrew\/brew\">https:\/\/github.com\/Homebrew\/brew<\/a><\/p>\n<p>\u56e0\u56fd\u5185\u8bbf\u95ee GitHub \u4e0d\u7a33\u5b9a\uff0c\u53ef\u4ee5\u76f4\u63a5\u53c2\u8003\u6e05\u534e\u5927\u5b66\u955c\u50cf\u7ad9\u7684\u5b89\u88c5\u6559\u7a0b\uff0c\u7b80\u5355\u5feb\u901f\u3001\u6b64\u5904\u4e0d\u505a\u590d\u8ff0\u3002<\/p>\n<p>\u6e05\u534e\u5927\u5b66\u5f00\u6e90\u8f6f\u4ef6\u955c\u50cf\u7ad9\u53ca\u5b89\u88c5\u3001\u955c\u50cf\u6559\u7a0b: <a href=\"https:\/\/mirrors.tuna.tsinghua.edu.cn\/help\/homebrew\/\">https:\/\/mirrors.tuna.tsinghua.edu.cn\/help\/homebrew\/<\/a><\/p>\n<h3 id=\"iterm2\">iTerm2<\/h3>\n<p>\u5f00\u6e90\u514d\u8d39\u3001\u7f8e\u89c2\u9ad8\u6548\u7684\u6700\u5f3a\u7ec8\u7aef\u5de5\u5177\u3002<\/p>\n<p>\u5b98\u7f51\u4e0b\u8f7d: <a href=\"https:\/\/www.iterm2.com\">https:\/\/www.iterm2.com<\/a><\/p>\n<p>\u6216 <code>brew install --cask iterm2<\/code><\/p>\n<h4 id=\"\u989c\u8272\u914d\u7f6e\">\u989c\u8272\u914d\u7f6e<\/h4>\n<p>\u989c\u8272\u5217\u8868: <a href=\"https:\/\/iterm2colorschemes.com\">https:\/\/iterm2colorschemes.com<\/a><\/p>\n<p>\u989c\u8272\u9009\u62e9: <code>Profiles -&gt; Colors -&gt; Color Presets<\/code> \u9009\u62e9 <code>Solarized Dark<\/code><\/p>\n<h4 id=\"\u80cc\u666f\u56fe\">\u80cc\u666f\u56fe<\/h4>\n<p><code>Profiles \u2192 Default \u2192 Window \u2192 Background Image \u2192 Enabled\uff08\u52fe\u9009\uff0c\u4f1a\u5f39\u7a97\u8ba9\u9009\u62e9\u56fe\u7247<\/code><\/p>\n<p>\u8fd8\u53ef\u8c03\u8282\u900f\u660e\u5ea6\u3001\u7f29\u653e\u6a21\u5f0f\u3002<\/p>\n<h4 id=\"profiles-command\">Profiles Command<\/h4>\n<p><code>Profiles<\/code> \u7528\u4e8e\u914d\u7f6e\u65b0\u5efa Tab \u7684\u9ed8\u8ba4\u884c\u4e3a\uff0c\u800c <code>Profiles<\/code> \u4e2d\u7684 Command \u5219\u53ef\u7528\u4e8e\u914d\u7f6e\u65b0\u5efa Tab \u65f6\u81ea\u52a8\u6267\u884c\u7684\u547d\u4ee4\uff0c\u4e00\u822c\u7528\u4e8e SSH \u8fdc\u7a0b\u8fde\u63a5\u7684\u573a\u666f\u8f83\u591a\u3002<\/p>\n<p>Profiles Command \u914d\u7f6e\uff1a<\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/iterm-profile-setting.jpg\" alt=\"iTerm2 Profiles Command \u914d\u7f6e\"><\/p>\n<p>\u6ce8\u610f\uff1a\u81ea\u5b9a\u4e49\u7684 Profile \u4f1a\u7ee7\u627f <code>Default<\/code> \u7684\u914d\u7f6e\uff0c\u6545\u81ea\u5b9a\u4e49\u7684 Profile \u65e0\u9700\u91cd\u590d\u53bb\u914d\u7f6e\u989c\u8272\u3001\u4e3b\u9898\u3001\u5feb\u6377\u952e\u7b49\u3002<\/p>\n<p>Profiles \u4f7f\u7528\u53ca\u5feb\u6377\u952e\uff1a<\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/iterm-profile-usage.jpg\" alt=\"iTerm2 Profiles \u4f7f\u7528\u53ca\u5feb\u6377\u952e\"><\/p>\n<h4 id=\"status-bar\">Status Bar<\/h4>\n<h4 id=\"\u914d\u7f6e\u5de6\u53f3\u952e\u524d\u540e\u5355\u8bcd\u8df3\u8f6c\">\u914d\u7f6e\u5de6\u53f3\u952e\u524d\u540e\u5355\u8bcd\u8df3\u8f6c<\/h4>\n<blockquote>\n<p>\u6309\u4f4f <code>option + \u2192 or \u2190<\/code> \u952e\uff0c\u5728\u547d\u4ee4\u7684\u5f00\u59cb\u548c\u7ed3\u5c3e\u8df3\u8f6c\u5207\u6362<\/p>\n<\/blockquote>\n<p><code>Profiles \u2192 Default \u2192 Keys \u2192 Key Mappings<\/code>\uff0c\u70b9\u51fb <code>+<\/code>\uff1a<\/p>\n<p><code>Keyboard shortcut<\/code>: <code>option + \u2192<\/code>\n<code>Action<\/code>: <code>Send Escape Sequence<\/code>\n<code>Esc + f<\/code><\/p>\n<p><code>Keyboard shortcut<\/code>: <code>option + \u2190<\/code>\n<code>Action<\/code>: <code>Send Escape Sequence<\/code>\n<code>Esc + b<\/code><\/p>\n<h4 id=\"iterm2-\u5feb\u901f\u9690\u85cf\u548c\u663e\u793a\">iTerm2 \u5feb\u901f\u9690\u85cf\u548c\u663e\u793a<\/h4>\n<p><code>Keys \u2192 Hotkey<\/code>\uff0c\u52fe\u9009 <code>Show\/hide all windows with a system-wide hotkey<\/code>\uff0c\u5e76\u8bbe\u7f6e\u5feb\u6377\u952e\uff0c\u6bd4\u5982 <code>\u2325 + \u2318 + .<\/code>\uff08<code>option + command + \u53e5\u70b9<\/code>\uff09\u3002<\/p>\n<h4 id=\"\u5728-finder-\u4e2d\u6253\u5f00\u5f53\u524d\u76ee\u5f55\">\u5728 Finder \u4e2d\u6253\u5f00\u5f53\u524d\u76ee\u5f55<\/h4>\n<p>\u5728\u7ec8\u7aef\u4e2d\u4f7f\u7528 <code>open<\/code> \u547d\u4ee4\u5373\u53ef\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">open .\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u7c98\u8d34\u81ea\u52a8\u8f6c\u4e49\">\u7c98\u8d34\u81ea\u52a8\u8f6c\u4e49<\/h4>\n<p>\u4ece\u526a\u5207\u677f\u7c98\u8d34 URL \u5230 iTerm2 \u65f6\u4f1a\u88ab\u8f6c\u4e49\u3002\u53c2\u8003\u5b98\u65b9 <a href=\"https:\/\/github.com\/ohmyzsh\/ohmyzsh\/wiki\/Settings#disable_magic_functions\">Wiki<\/a>\u3002\u6253\u5f00\u914d\u7f6e\u6587\u4ef6 <code>~\/.zshrc<\/code>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-ini\" data-lang=\"ini\"><span class=\"line\"><span class=\"cl\"><span class=\"na\">DISABLE_MAGIC_FUNCTIONS<\/span><span class=\"o\">=<\/span><span class=\"s\">true<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"finder-\u4e2d\u4f7f\u7528-iterm-\u6253\u5f00\u5f53\u524d\u76ee\u5f55\">Finder \u4e2d\u4f7f\u7528 iTerm \u6253\u5f00\u5f53\u524d\u76ee\u5f55<\/h4>\n<p>\u53ef\u5728 Finder \u4e2d\u5feb\u6377\u7684\u4f7f\u7528 iTerm \u6253\u5f00\u5f53\u524d\u76ee\u5f55\uff0c\u907f\u514d\u624b\u52a8\u7684\u5728 iTerm \u4e2d\u8f93\u5165\u8def\u5f84\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">Finder \u2192 \u6587\u4ef6\u53f3\u952e \u2192 \u670d\u52a1 \u2192 New iTerm2 Tab Here\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"oh-my-zsh\">Oh My Zsh<\/h3>\n<p><code>Oh My Zsh<\/code> \u8ba9 <code>zsh<\/code> \u53d8\u5f97\u66f4\u597d\u7528\u3001\u914d\u7f6e\u66f4\u7b80\u5355\u3002\uff08macOS 10.15 \u540e\u5df2\u4f7f\u7528 <code>zsh<\/code> \u4f5c\u4e3a\u9ed8\u8ba4 Shell\uff09<\/p>\n<p>GitHub: <a href=\"https:\/\/github.com\/ohmyzsh\/ohmyzsh\">https:\/\/github.com\/ohmyzsh\/ohmyzsh<\/a><\/p>\n<ul>\n<li>\u901a\u8fc7<code>curl<\/code>\u5b89\u88c5<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">sh -c <span class=\"s2\">&#34;<\/span><span class=\"k\">$(<\/span>curl -fsSL https:\/\/raw.githubusercontent.com\/ohmyzsh\/ohmyzsh\/master\/tools\/install.sh<span class=\"k\">)<\/span><span class=\"s2\">&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u8bbe\u7f6e <code>zsh<\/code> \u4e3a\u5f53\u524d\u7528\u6237\u7684\u9ed8\u8ba4 <code>Shell<\/code><\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">chsh -s \/bin\/zsh\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u914d\u7f6e\u6587\u4ef6<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">.zshenv \u4e2d\u5b58\u653e\u7684\u73af\u5883\u53d8\u91cf\u914d\u7f6e\u9879\u5728\u4efb\u4f55\u573a\u666f\u4e0b\u90fd\u80fd\u88ab\u8bfb\u53d6\uff0c\u8fd9\u91cc\u901a\u5e38\u628a<span class=\"nv\">$PATH\u7b49\u53d8\u91cf\u5199\u5728\u8fd9\u91cc<\/span>\uff0c\u8fd9\u6837\u65e0\u8bba\u662f\u5728\u4ea4\u4e92 shell\uff0c\u6216\u8005\u8fd0\u884c\u7a0b\u5e8f\u90fd\u4f1a\u8bfb\u53d6\u6b64\u6587\u4ef6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.zshrc \u4e3b\u8981\u7528\u5728\u4ea4\u4e92 shell\uff0c\u4e0a\u7bc7\u6587\u7ae0\u4e2d\u5c31\u662f\u5bf9\u8fd9\u4e2a\u6587\u4ef6\u8fdb\u884c\u4fee\u6539\u3002\u5bf9\u7ec8\u7aef\u4ea4\u4e92shell\u6709\u7528\u3002\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.zlogin \u5728 login shell \u7684\u65f6\u5019\u8bfb\u53d6\uff0c\u6bd4\u5982\u7cfb\u7edf\u542f\u52a8\u7684\u65f6\u5019\u4f1a\u8bfb\u53d6\u6b64\u6587\u4ef6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.zprofile \u662f.zlogin\u7684\u66ff\u4ee3\u54c1\uff0c\u5982\u679c\u4f7f\u7528\u4e86 .zlogin \u5c31\u4e0d\u5fc5\u518d\u5173\u5fc3\u6b64\u6587\u4ef6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.zlogout\u9000\u51fa\u7ec8\u7aef\u7684\u65f6\u5019\u8bfb\u53d6\uff0c\u7528\u4e8e\u505a\u4e00\u4e9b\u6e05\u7406\u5de5\u4f5c\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u8bfb\u53d6\u987a\u5e8f\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.zshenv \u2192 <span class=\"o\">[<\/span>.zprofile <span class=\"k\">if<\/span> login<span class=\"o\">]<\/span> \u2192 <span class=\"o\">[<\/span>.zshrc <span class=\"k\">if<\/span> interactive<span class=\"o\">]<\/span> \u2192 <span class=\"o\">[<\/span>.zlogin <span class=\"k\">if<\/span> login<span class=\"o\">]<\/span> \u2192 <span class=\"o\">[<\/span>.zlogout sometimes<span class=\"o\">]<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u914d\u7f6e\">\u914d\u7f6e<\/h4>\n<ul>\n<li>\n<p>\u7981\u7528\u81ea\u52a8\u66f4\u65b0<\/p>\n<p>\u9ed8\u8ba4\u4f1a\u6bcf\u6b21\u65b0\u5f00 Tab \u65f6\u68c0\u67e5\u66f4\u65b0\uff0c\u7f16\u8f91 <code>~\/.zshrc<\/code>\uff0c\u53d6\u6d88\u8be5\u884c\u5185\u5bb9\u7684\u6ce8\u91ca\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">zstyle <span class=\"s1\">&#39;:omz:update&#39;<\/span> mode disabled\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><\/li>\n<\/ul>\n<h4 id=\"\u63d2\u4ef6\">\u63d2\u4ef6<\/h4>\n<h5 id=\"zsh-autosuggestions\">zsh-autosuggestions<\/h5>\n<blockquote>\n<p>\u8f93\u5165\u547d\u4ee4\u65f6\u53ef\u63d0\u793a\u81ea\u52a8\u8865\u5168\uff08\u7070\u8272\u90e8\u5206\uff09\uff0c\u6309\u952e <code>\u2192<\/code> \u5373\u53ef\u8865\u5168<\/p>\n<p><a href=\"https:\/\/github.com\/zsh-users\/zsh-autosuggestions\">https:\/\/github.com\/zsh-users\/zsh-autosuggestions<\/a><\/p>\n<\/blockquote>\n<p>\u901a\u8fc7 Brew \u5b89\u88c5\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install zsh-autosuggestions\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5b89\u88c5\u5b8c\u540e\uff0c\u6839\u636e\u63d0\u793a\uff0c\u6253\u5f00 <code>~\/.zshrc<\/code> \u6dfb\u52a0\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/\/ \u4ee5\u4e0b\u5185\u5bb9\u53ef\u80fd Homebrew \u7248\u672c\u4e0d\u4e00\u6837\uff0c\u4ee5 brew \u7684\u63d0\u793a\u4e3a\u51c6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u6bd4\u5982\u4ee5\u524d\u662f \/usr\/local\/share\/xxx\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u53ef\u76f4\u63a5\u7528 brew info zsh-autosuggestions \u67e5\u770b\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">source<\/span> \/opt\/homebrew\/share\/zsh-autosuggestions\/zsh-autosuggestions.zsh\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h5 id=\"zsh-syntax-highlighting\">zsh-syntax-highlighting<\/h5>\n<blockquote>\n<p>\u65e5\u5e38\u7528\u7684\u547d\u4ee4\u4f1a\u9ad8\u4eae\u663e\u793a\uff0c\u547d\u4ee4\u9519\u8bef\u663e\u793a\u7ea2\u8272<\/p>\n<p><a href=\"https:\/\/github.com\/zsh-users\/zsh-syntax-highlighting\">https:\/\/github.com\/zsh-users\/zsh-syntax-highlighting<\/a><\/p>\n<\/blockquote>\n<p>\u901a\u8fc7 Brew \u5b89\u88c5\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install zsh-syntax-highlighting\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5b89\u88c5\u5b8c\u540e\uff0c\u6839\u636e\u63d0\u793a\uff0c\u6253\u5f00 <code>~\/.zshrc<\/code> \u6dfb\u52a0\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/\/ \u4ee5\u4e0b\u5185\u5bb9\u53ef\u80fd Homebrew \u7248\u672c\u4e0d\u4e00\u6837\uff0c\u4ee5 brew \u7684\u63d0\u793a\u4e3a\u51c6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u6bd4\u5982\u4ee5\u524d\u662f \/usr\/local\/share\/xxx\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u53ef\u76f4\u63a5\u7528 brew info zsh-syntax-highlighting \u67e5\u770b\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">source<\/span> \/opt\/homebrew\/share\/zsh-syntax-highlighting\/zsh-syntax-highlighting.zsh\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h5 id=\"autojump\">autojump<\/h5>\n<blockquote>\n<p>\u5b9e\u73b0\u76ee\u5f55\u95f4\u5feb\u901f\u8df3\u8f6c\uff0c\u60f3\u53bb\u54ea\u4e2a\u76ee\u5f55\u76f4\u63a5 <code>j + \u76ee\u5f55\u540d<\/code><\/p>\n<p><a href=\"https:\/\/github.com\/wting\/autojump\">https:\/\/github.com\/wting\/autojump<\/a><\/p>\n<\/blockquote>\n<p>\u901a\u8fc7 Brew \u5b89\u88c5\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install autojump\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5b89\u88c5\u5b8c\u540e\uff0c\u6839\u636e\u63d0\u793a\uff0c\u6253\u5f00 <code>~\/.zshrc<\/code> \u6dfb\u52a0\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span> -f \/opt\/homebrew\/etc\/profile.d\/autojump.sh <span class=\"o\">]<\/span> <span class=\"o\">&amp;&amp;<\/span> . \/opt\/homebrew\/etc\/profile.d\/autojump.sh\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u4e3b\u9898\">\u4e3b\u9898<\/h4>\n<p>\u4e3b\u9898\u5217\u8868: <a href=\"https:\/\/github.com\/ohmyzsh\/ohmyzsh\/wiki\/Themes\">https:\/\/github.com\/ohmyzsh\/ohmyzsh\/wiki\/Themes<\/a><\/p>\n<p>\u5185\u7f6e\u4e3b\u9898: <code>$ZSH\/themes<\/code>\uff08<code>$HOME\/.oh-my-zsh\/themes<\/code>\uff09<\/p>\n<p>\u4fee\u6539 <code>~\/.zshrc<\/code> \u914d\u7f6e\u6587\u4ef6\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">ZSH_THEME<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;robbyrussell&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u53ef\u5728 <code>$ZSH\/custom\/themes<\/code> \u4e0b\u81ea\u5b9a\u4e49\u4e3b\u9898\u3002<\/p>\n<h3 id=\"git\">Git<\/h3>\n<h4 id=\"github-\u914d\u7f6e-ssh\">GitHub \u914d\u7f6e SSH<\/h4>\n<p>\u7ec8\u7aef\u6267\u884c\u547d\u4ee4 <code>ssh-keygen<\/code>\uff0c\u4e00\u8def\u56de\u8f66\uff0c\u751f\u6210\u5bc6\u94a5\u3002<\/p>\n<p>\u8bfb\u53d6\u5e76\u62f7\u8d1d\u5bc6\u94a5\u6587\u672c\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">cat ~\/.ssh\/id_rsa.pub\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6253\u5f00 <a href=\"https:\/\/github.com\/settings\/ssh\/new\">GitHub<\/a> SSH key \u914d\u7f6e\u9875\u9762\uff08<code>\u4e2a\u4eba\u5934\u50cf &gt; Settings &gt; Access &gt; SSH and GPG keys &gt; New SSH Key<\/code>\uff09\uff0c\u5c06\u62f7\u8d1d\u7684 <code>ssh-rsa<\/code> \u5bc6\u94a5\u5185\u5bb9\u6dfb\u52a0\u5230 GitHub\u3002<\/p>\n<h4 id=\"git-\u914d\u7f6e-user\">Git \u914d\u7f6e user<\/h4>\n<p>\u7ec8\u7aef\u6267\u884c\u547d\u4ee4 <code>git config --global -e<\/code> \u6253\u5f00 Git \u5168\u5c40\u914d\u7f6e\u6587\u4ef6\uff0c\u4fee\u6539\u6216\u6dfb\u52a0 <code>[user]<\/code> \u5185\u5bb9\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-ini\" data-lang=\"ini\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">[user]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"na\">name<\/span> <span class=\"o\">=<\/span> <span class=\"s\">jioby\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">    email = jioby@example.com<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6216\u8005\u4f7f\u7528\u547d\u4ee4\u884c\u65b9\u5f0f\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">git config --global user.name <span class=\"s2\">&#34;jioby&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">git config --global user.email <span class=\"s2\">&#34;jioby@example.com&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u8bbe\u7f6e-lg-\u522b\u540d\">\u8bbe\u7f6e lg \u522b\u540d<\/h4>\n<p><code>git config --global -e<\/code> \u6253\u5f00\u914d\u7f6e\u6587\u4ef6\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-ini\" data-lang=\"ini\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">[alias]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"na\">lg<\/span> <span class=\"o\">=<\/span> <span class=\"s\">log --graph --pretty=format:&#39;%Cred%h%Creset | %ad | %Cblue%d%Creset %s %Cgreen(%an)%Creset&#39; --abbrev-commit --date=short<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6216\u8005\u4f7f\u7528\u547d\u4ee4\u884c\u65b9\u5f0f\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">git config --global alias.lg <span class=\"s2\">&#34;log --graph --pretty=format:&#39;%Cred%h%Creset | %ad | %Cblue%d%Creset %s %Cgreen(%an)%Creset&#39; --abbrev-commit --date=short&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u63a5\u7740\u53ef\u4f7f\u7528 <code>git lg<\/code> \u6e05\u723d\u770b\u65e5\u5fd7\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">* <span class=\"m\">5864617<\/span> <span class=\"p\">|<\/span> 2022-07-31 <span class=\"p\">|<\/span>  <span class=\"o\">(<\/span>HEAD -&gt; master, origin\/master, origin\/HEAD<span class=\"o\">)<\/span> update license to CC 4.0 <span class=\"o\">(<\/span>Jioby<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 3d8de53 <span class=\"p\">|<\/span> 2022-07-31 <span class=\"p\">|<\/span>  \u5173\u95ed\u81ea\u52a8\u66f4\u65b0\uff0c\u89e3\u51b3nsurlsessiond\u5077\u5077\u8dd1\u6d41\u91cf <span class=\"o\">(<\/span>shockerli<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* a0c313e <span class=\"p\">|<\/span> 2022-07-30 <span class=\"p\">|<\/span>  vscode install code <span class=\"nb\">command<\/span> <span class=\"o\">(<\/span>shockerli<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">* 8ebffa3 <span class=\"p\">|<\/span> 2022-07-30 <span class=\"p\">|<\/span>  \u5168\u65b0\u6307\u5357\uff0c\u652f\u6301macOS 12.x\u7cfb\u7edf <span class=\"o\">(<\/span>shockerli<span class=\"o\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u9ed8\u8ba4\u5206\u652f\">\u9ed8\u8ba4\u5206\u652f<\/h4>\n<p>\u8bbe\u7f6e Git \u9879\u76ee\u521d\u59cb\u5316\u65f6\u7684\u9ed8\u8ba4\u5206\u652f\uff0c\u4e00\u822c\u4e3a <code>master<\/code> \u6216 <code>main<\/code>\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">git config --global init.defaultBranch &lt;name&gt;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"vim\">Vim<\/h3>\n<p>\u5728 macOS \u4e0a <code>Vim<\/code> \u4f7f\u7528\u8f83\u6d45\uff0c\u6545\u914d\u7f6e\u591f\u7528\u5373\u53ef\uff0c\u4e0d\u88c5\u6269\u5c55\u3002\u76f4\u63a5 <code>vim ~\/.vimrc<\/code>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-vim\" data-lang=\"vim\"><span class=\"line\"><span class=\"cl\"><span class=\"c\">&#34; \u63a8\u8350\u8bbe\u7f6e<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">colorscheme<\/span> <span class=\"nx\">desert<\/span>  <span class=\"c\">&#34; \u989c\u8272\u663e\u793a\u65b9\u6848<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">syntax<\/span> <span class=\"nx\">on<\/span>           <span class=\"c\">&#34; \u6253\u5f00\u8bed\u6cd5\u9ad8\u4eae<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">tabstop<\/span><span class=\"p\">=<\/span><span class=\"m\">4<\/span>       <span class=\"c\">&#34; TAB \u5b57\u7b26\u7684\u663e\u793a\u5bbd\u5ea6<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"c\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c\">&#34; \u4ee5\u4e0b\u81ea\u9009<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">nocompatible<\/span>    <span class=\"c\">&#34; \u4e0d\u517c\u5bb9 Vi<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">nu<\/span>              <span class=\"c\">&#34; \u663e\u793a\u884c\u53f7<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">showmatch<\/span>       <span class=\"c\">&#34; \u81ea\u52a8\u9ad8\u4eae\u5339\u914d\u62ec\u53f7<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">cursorline<\/span>      <span class=\"c\">&#34; \u9ad8\u4eae\u5149\u6807\u6240\u5728\u884c<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">hlsearch<\/span>        <span class=\"c\">&#34; \u9ad8\u4eae\u641c\u7d22\u5339\u914d\u7ed3\u679c<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">incsearch<\/span>       <span class=\"c\">&#34; \u8ddf\u968f\u8f93\u5165\uff0c\u5373\u65f6\u641c\u7d22<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">ignorecase<\/span>      <span class=\"c\">&#34; \u641c\u7d22\u5ffd\u7565\u5927\u5c0f\u5199<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">history<\/span><span class=\"p\">=<\/span><span class=\"m\">1000<\/span>    <span class=\"c\">&#34; \u5386\u53f2\u64cd\u4f5c\u8bb0\u5f55\u6b21\u6570<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">autoread<\/span>        <span class=\"c\">&#34; \u6587\u4ef6\u53d1\u751f\u5916\u90e8\u53d8\u66f4\u65f6\u63d0\u793a<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">wildmenu<\/span>        <span class=\"c\">&#34; \u547d\u4ee4\u6a21\u5f0f\uff0c\u5e95\u90e8\u6309 Tab \u81ea\u52a8\u8865\u5168<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">smartindent<\/span>     <span class=\"c\">&#34; \u667a\u80fd\u7f29\u8fdb<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">expandtab<\/span>       <span class=\"c\">&#34; \u6309 Tab \u952e\u65f6\uff0c\u4f7f\u7528\u7a7a\u683c\u66ff\u4ee3\u5236\u8868\u7b26\uff08\u4e0d\u5f71\u54cd\u5df2\u6709\u5236\u8868\u7b26\uff09<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">shiftwidth<\/span><span class=\"p\">=<\/span><span class=\"m\">4<\/span>    <span class=\"c\">&#34; \u81ea\u52a8\u7f29\u8fdb\u65f6\uff0c\u7f29\u8fdb\u957f\u5ea6<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">softtabstop<\/span><span class=\"p\">=<\/span><span class=\"m\">-1<\/span>  <span class=\"c\">&#34; Tab \u8f6c\u4e3a\u591a\u5c11\u7a7a\u683c\uff0c\u8d1f\u6570\u8868\u793a\u4e0eshiftwidth\u4e00\u81f4<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">laststatus<\/span><span class=\"p\">=<\/span><span class=\"m\">2<\/span>    <span class=\"c\">&#34; \u662f\u5426\u663e\u793a\u72b6\u6001\u680f, 0:\u4e0d\u663e\u793a, 1:\u591a\u7a97\u53e3\u65f6\u663e\u793a, 2:\u663e\u793a<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">ruler<\/span>           <span class=\"c\">&#34; \u8fd9\u72b6\u6001\u680f\u663e\u793a\u5149\u6807\u7684\u5f53\u524d\u4f4d\u7f6e\uff08\u884c\u6570&amp;\u5217\u6570\uff09<\/span><span class=\"err\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"err\"><\/span><span class=\"nx\">set<\/span> <span class=\"nx\">wrap<\/span>            <span class=\"c\">&#34; \u81ea\u52a8\u6362\u884c<\/span><span class=\"err\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><code>colorscheme<\/code> \u53ef\u9009\u9879\u5728 <code>\/usr\/share\/vim\/vim*\/colors<\/code> \u76ee\u5f55\u4e0b\uff0c\u81ea\u5df1\u9009\u3002<\/p>\n<h2 id=\"\u7cfb\u7edf\u5de5\u5177\">\u7cfb\u7edf\u5de5\u5177<\/h2>\n<h3 id=\"\u67e0\u6aac\u6e05\u7406\">\u67e0\u6aac\u6e05\u7406<\/h3>\n<blockquote>\n<p>\u817e\u8baf\u51fa\u54c1<strong>\u5f00\u6e90\u514d\u8d39<\/strong>\u7684\u6e05\u7406\u3001\u5378\u8f7d\u3001\u6d41\u91cf\u3001\u76d1\u63a7\u3001\u78c1\u76d8\u7a7a\u95f4\u5206\u6790\u3001\u5f00\u673a\u542f\u52a8\u7ba1\u7406\u7b49\u7cfb\u7edf\u5de5\u5177\u3002<\/p>\n<\/blockquote>\n<p>\u5b98\u7f51\u4e0b\u8f7d: <a href=\"https:\/\/lemon.qq.com\">https:\/\/lemon.qq.com<\/a><\/p>\n<p>\u5f00\u6e90\u5730\u5740: <a href=\"https:\/\/github.com\/Tencent\/lemon-cleaner\">https:\/\/github.com\/Tencent\/lemon-cleaner<\/a><\/p>\n<p>\u6700\u503c\u5f97\u4f7f\u7528\u7684\u529f\u80fd\uff0c\u83ab\u8fc7\u4e8e<strong>\u6e05\u7406\u4e0e\u5f53\u524d\u82af\u7247\u4e0d\u540c\u7248\u672c\u7684\u4e8c\u8fdb\u5236\u6587\u4ef6<\/strong>\uff1a\n<img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/lemon-clean-rosetta.jpg\" alt=\"lemon-clean-rosetta\"><\/p>\n<h3 id=\"\u8f93\u5165\u6cd5\">\u8f93\u5165\u6cd5<\/h3>\n<p>\u62fc\u97f3\u8f93\u5165\u6cd5\u63a8\u8350 <code>\u641c\u72d7\u8f93\u5165\u6cd5<\/code>\uff0c\u7b80\u5355\u6613\u7528\u3001\u8bcd\u5e93\u9f50\u5168\u3001\u5b89\u88c5\u5373\u7528\u3002<\/p>\n<p>\u5b98\u7f51\u4e0b\u8f7d: <a href=\"https:\/\/pinyin.sogou.com\/mac\/\">https:\/\/pinyin.sogou.com\/mac\/<\/a><\/p>\n<p>\u8f93\u5165\u6cd5\u914d\u7f6e\uff1a<code>\u7cfb\u7edf\u504f\u597d\u8bbe\u7f6e &gt; \u952e\u76d8 &gt; \u8f93\u5165\u6cd5<\/code>\uff1a\u5220\u9664\u65e0\u7528\u7684\u8f93\u5165\u6cd5\uff08<code>ABC<\/code> \u522b\u5220\uff09<\/p>\n<p>\u540c\u6b65\u539f\u914d\u7f6e\uff1a<code>\u504f\u597d\u8bbe\u7f6e &gt; \u767b\u5f55\u8d26\u6237 &gt; \u540c\u6b65 &gt; \u914d\u7f6e\u540c\u6b65 &gt; \u4e0b\u8f7d\u914d\u7f6e<\/code><\/p>\n<h3 id=\"chrome\">Chrome<\/h3>\n<p>\u5b98\u7f51\u4e0b\u8f7d: <a href=\"https:\/\/www.google.cn\/intl\/zh-CN\/chrome\/\">https:\/\/www.google.cn\/intl\/zh-CN\/chrome\/<\/a><\/p>\n<h4 id=\"\u6269\u5c55\">\u6269\u5c55<\/h4>\n<ul>\n<li><a href=\"http:\/\/cn.infinitynewtab.com\">Infinity New Tab Pro<\/a>: \u65b0\u6807\u7b7e\u9875<\/li>\n<li><a href=\"https:\/\/www.itab.link\">iTab New Tab<\/a>: \u65b0\u6807\u7b7e\u9875<\/li>\n<li><a href=\"https:\/\/www.baidufe.com\/fehelper\">FeHelper<\/a>: \u524d\u7aef\u5de5\u5177\u96c6\uff08\u5185\u542b JSON \u7f8e\u5316\u5bf9\u6bd4\u3001\u65f6\u95f4\u8f6c\u6362\u3001\u7f16\u7801\u8f6c\u6362\u7b49\u5341\u51e0\u4e2a\u5c0f\u5de5\u5177\uff09<\/li>\n<li><a href=\"https:\/\/adblockplus.org\">Adblock Plus<\/a>: \u5e7f\u544a\u51c0\u5316<\/li>\n<li><a href=\"http:\/\/ksria.com\/simpread\">SimpRead<\/a>: \u6700\u4f73\u9605\u8bfb\u4f53\u9a8c<\/li>\n<li><a href=\"https:\/\/www.tampermonkey.net\">Tampermonkey<\/a>: \u6cb9\u7334\u811a\u672c\u7ba1\u7406<\/li>\n<li><a href=\"http:\/\/www.pullywood.com\/ImageAssistant\">ImageAssistant<\/a>: \u56fe\u7247\u52a9\u624b\uff0c\u7f51\u9875\u56fe\u7247\u63d0\u53d6\u4e0b\u8f7d<\/li>\n<li><a href=\"https:\/\/sourcegraph.com\">SourceGraph<\/a>: GitHub \u6e90\u7801\u6d4f\u89c8\u795e\u5668<\/li>\n<\/ul>\n<h4 id=\"\u6cb9\u7334\u811a\u672c\">\u6cb9\u7334\u811a\u672c<\/h4>\n<p>\u6cb9\u7334\u811a\u672c\uff08\u7528\u6237\u811a\u672c\uff09\u662f\u4e00\u6bb5\u4ee3\u7801\uff0c\u5b83\u4eec\u80fd\u591f\u4f18\u5316\u60a8\u7684\u7f51\u9875\u6d4f\u89c8\u4f53\u9a8c\u3002\u5b89\u88c5\u4e4b\u540e\uff0c\u6709\u4e9b\u811a\u672c\u80fd\u4e3a\u7f51\u7ad9\u6dfb\u52a0\u65b0\u7684\u529f\u80fd\uff0c\u6709\u4e9b\u80fd\u4f7f\u7f51\u7ad9\u7684\u754c\u9762\u66f4\u52a0\u6613\u7528\uff0c\u6709\u4e9b\u5219\u80fd\u9690\u85cf\u7f51\u7ad9\u4e0a\u70e6\u4eba\u7684\u90e8\u5206\u5185\u5bb9\u3002<\/p>\n<p><a href=\"https:\/\/www.tampermonkey.net\">Tampermonkey<\/a> \u662f\u4e00\u4e2a\u53ef\u8fd0\u884c\u5728 Chrome\u3001Firefox\u3001Safari\u3001Edge \u7b49\u6d4f\u89c8\u5668\u7684\u7528\u6237\u811a\u672c\u7ba1\u7406\u6269\u5c55\u3002<\/p>\n<p><a href=\"https:\/\/greasyfork.org\">Greasy Fork<\/a> \u5219\u662f\u4e00\u4e2a\u6cb9\u7334\u811a\u672c\u514d\u8d39\u5546\u5e97\uff0c\u7edd\u5927\u90e8\u5206\u7528\u6237\u811a\u672c\u90fd\u5728\u4e0a\u9762\u6709\u53d1\u5e03\uff0c\u65b9\u4fbf\u67e5\u627e\u3001\u5b89\u88c5\u4f7f\u7528\u3002<\/p>\n<p><strong>\u5b89\u88c5\u65b9\u5f0f<\/strong>\uff1a<\/p>\n<ul>\n<li>\u4ece Greasy Fork \u5b89\u88c5\n\u4f8b\u5982 <a href=\"https:\/\/greasyfork.org\/zh-CN\/scripts\/378351\">CSDNGreener<\/a>\uff0c\u6253\u5f00\u540e\u4f1a\u663e\u793a\u5b89\u88c5\u6309\u94ae\u548c\u754c\u9762<\/li>\n<li>\u4ece URL \u5b89\u88c5\n\u4f8b\u5982 Bilibili-Evolved \u7684\u811a\u672c URL \u662f <a href=\"https:\/\/raw.githubusercontent.com\/the1812\/Bilibili-Evolved\/master\/dist\/bilibili-evolved.user.js\">https:\/\/raw.githubusercontent.com\/the1812\/Bilibili-Evolved\/master\/dist\/bilibili-evolved.user.js<\/a>\n\u76f4\u63a5\u5728 Tampermonkey <code>\u7ba1\u7406\u9762\u677f &gt; \u5b9e\u7528\u5de5\u5177 &gt; \u4ece URL \u5b89\u88c5<\/code>\uff0c\u7c98\u8d34\u811a\u672c URL\uff0c\u70b9\u51fb\u5b89\u88c5\u5373\u53ef<\/li>\n<\/ul>\n<p><strong>\u63a8\u8350\u811a\u672c<\/strong>\uff1a<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/the1812\/Bilibili-Evolved\">Bilibili-Evolved<\/a> - B\u7ad9\u589e\u5f3a <a href=\"https:\/\/raw.githubusercontent.com\/the1812\/Bilibili-Evolved\/master\/dist\/bilibili-evolved.user.js\">[\u811a\u672c URL]<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/adlered\/CSDNGreener\">CSDNGreener<\/a> - CSDN \u7f51\u7ad9\u7eff\u5316 <a href=\"https:\/\/greasyfork.org\/zh-CN\/scripts\/378351\">[Greasy Fork]<\/a><\/li>\n<\/ul>\n<h3 id=\"alfred\">Alfred<\/h3>\n<p>\u6548\u7387\u5de5\u5177\u795e\u5668\uff0c\u53ef\u4ee5\u5feb\u901f\u7684\u641c\u7d22\u672c\u5730\u5e94\u7528\u3001\u641c\u7d22\u672c\u5730\u6587\u4ef6\u3001\u6267\u884c\u7ec8\u7aef\u547d\u4ee4\u3001\u6d4f\u89c8\u5668\u641c\u7d22\u3001\u6253\u5f00\u7f51\u5740\u3001\u526a\u5207\u677f\u7ba1\u7406\u3001\u7ffb\u8bd1\u3001\u6587\u4ef6\u7ba1\u7406\u3001\u97f3\u4e50\u63a7\u5236\u7b49\uff0c\u4e5f\u53ef\u4ee5\u81ea\u5b9a\u4e49\u5de5\u4f5c\u6d41\uff0c\u4e0e\u5176\u4ed6\u8f6f\u4ef6\u6df1\u5ea6\u914d\u5408\u3002<\/p>\n<p>\u8f6f\u4ef6\u5c0f\u5de7\u3001\u6027\u80fd\u5f3a\u608d\u3001\u9ad8\u7ea7\u529f\u80fd\u9700\u4ed8\u8d39\uff0c\u914d\u7f6e\u540c\u6b65\u53ef\u7528 iCloud \u6216 Git \u6216\u81ea\u5df1\u60f3\u529e\u6cd5\u3002<\/p>\n<p>\u5b98\u7f51: <a href=\"https:\/\/www.alfredapp.com\">https:\/\/www.alfredapp.com<\/a><\/p>\n<h4 id=\"\u5e38\u7528\u914d\u7f6e\">\u5e38\u7528\u914d\u7f6e<\/h4>\n<ul>\n<li><code>Features<\/code> &gt; <code>Web Search<\/code> &gt; \u65b0\u589e\u81ea\u5b9a\u4e49\u641c\u7d22\u3001\u5173\u95ed\u4e0d\u9700\u8981\u7684\u641c\u7d22<\/li>\n<li><code>Features<\/code> &gt; <code>Default Results<\/code> &gt; <code>Setup fallback results<\/code> &gt; \u8bbe\u7f6e\u4f7f\u7528\u641c\u7d22\u65b9\u5f0f<\/li>\n<li><code>Features<\/code> &gt; <code>Clipboard History<\/code> &gt; \u52fe\u9009\u9700\u8981\u526a\u8d34\u677f\u5b58\u50a8\u7684\u5185\u5bb9\uff08\u6587\u672c\u3001\u56fe\u7247\u3001\u6587\u4ef6\uff09\u53ca\u4fdd\u7559\u65f6\u95f4<\/li>\n<li><code>Appearance<\/code> &gt; \u9009\u62e9 <code>Alfred macOS<\/code> \u5207\u6362\u4e3b\u9898\u6837\u5f0f\uff0c\u4e5f\u53ef\u4ee5\u81ea\u5b9a\u4e49<\/li>\n<li><code>Appearance<\/code> &gt; <code>Options<\/code> &gt; <code>Show Alfred on<\/code>\uff1a\u9009\u62e9 <code>active screen<\/code> \u6216 <code>mouse screen<\/code>\uff0c\u56e0\u4e3a\u9ed8\u8ba4\u4e3a <code>default screen<\/code> \u5373\u5728\u9ed8\u8ba4\u663e\u793a\u5c4f\u6253\u5f00 Alfred \u7a97\u53e3\uff0c\u591a\u5c4f\u6216\u591a\u663e\u793a\u5668\u65f6\u9ed8\u8ba4\u8bbe\u7f6e\u4e0d\u591f\u8d34\u5fc3\u3002<\/li>\n<\/ul>\n<h4 id=\"workflows\">Workflows<\/h4>\n<p>\u53ef\u53c2\u8003\u4e0b\u9762\u4e24\u4e2a\u6536\u85cf\u96c6\u5408\u5185\u7684\u914d\u7f6e\uff1a<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/learn-anything\/alfred-workflows\">learn-anything\/alfred-workflows<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/zenorocha\/alfred-workflows\">zenorocha\/alfred-workflows<\/a><\/li>\n<\/ul>\n<h3 id=\"shell-alias\">Shell Alias<\/h3>\n<p>\u4ee5\u4e0b\u662f\u5e38\u7528\u547d\u4ee4\uff0c\u8bbe\u7f6e\u522b\u540d\uff0c\u4f7f\u7528\u66f4\u65b9\u4fbf\u3002\u6dfb\u52a0\u5230 <code>~\/.zshrc<\/code>\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nb\">alias<\/span> <span class=\"nv\">ll<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;ls -Alh&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">alias<\/span> <span class=\"nv\">al<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;ls | sed &#34;s:^:`pwd`\/:&#34;&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">alias<\/span> <span class=\"nv\">egrep<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;ps -ef | grep&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">alias<\/span> <span class=\"nv\">grep<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;grep --color=auto --exclude-dir={.bzr,CVS,.git,.hg,.svn}&#39;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"autossh\">autossh<\/h3>\n<blockquote>\n<p>\u4e00\u4e2a\u7b80\u5355\u7ba1\u7406\u8fdc\u7a0b SSH \u8d26\u53f7\u7684\u811a\u672c\u5de5\u5177<\/p>\n<\/blockquote>\n<ul>\n<li>\u5b89\u88c5<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">curl -o \/usr\/local\/bin\/autossh https:\/\/raw.githubusercontent.com\/FeeiCN\/autossh\/master\/autossh\n<\/span><\/span><span class=\"line\"><span class=\"cl\">chmod +x \/usr\/local\/bin\/autossh\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u914d\u7f6e<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">$ cat ~\/.autosshrc\n<\/span><\/span><span class=\"line\"><span class=\"cl\">server_name<span class=\"p\">|<\/span>192.168.1.110<span class=\"p\">|<\/span>root<span class=\"p\">|<\/span>password<span class=\"p\">|<\/span>port<span class=\"p\">|<\/span>is_bastion\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5f00\u53d1\u8f6f\u4ef6\">\u5f00\u53d1\u8f6f\u4ef6<\/h3>\n<ul>\n<li><code>SourceTree<\/code>: Git \u53ef\u89c6\u5316\uff08\u514d\u8d39\uff09<\/li>\n<li><code>Navicat Premium<\/code>: \u591a\u79cd\u6570\u636e\u5e93\u7ba1\u7406\u5de5\u5177<\/li>\n<li><code>Sourcetrail<\/code>: \u6e90\u7801\u9605\u8bfb\u795e\u5668\uff08<a href=\"https:\/\/github.com\/CoatiSoftware\/Sourcetrail\">\u5f00\u6e90<\/a>\uff09<\/li>\n<li><code>Jetbrains IDE \u7cfb\u5217<\/code><\/li>\n<li><code>Postman<\/code>: \u63a5\u53e3\u8c03\u8bd5\uff08\u514d\u8d39\uff09<\/li>\n<li><code>htop<\/code>: \u589e\u5f3a\u7248 <code>top<\/code> \u547d\u4ee4\uff08<a href=\"https:\/\/github.com\/htop-dev\/htop\">\u5f00\u6e90<\/a>\uff09<\/li>\n<li><code>Visual Studio Code<\/code>: \u5f3a\u5927\u7684\u7f16\u8f91\u5668\uff08<a href=\"https:\/\/code.visualstudio.com\">\u5f00\u6e90<\/a>\uff09<\/li>\n<li><code>Proxyman<\/code>: \u4ee3\u7406\u6293\u5305\u5de5\u5177\uff08\u514d\u8d39\uff09<\/li>\n<\/ul>\n<h4 id=\"visual-studio-code\">Visual Studio Code<\/h4>\n<p>\u5b98\u7f51\u4e0b\u8f7d: <a href=\"https:\/\/code.visualstudio.com\">https:\/\/code.visualstudio.com<\/a><\/p>\n<h5 id=\"\u914d\u7f6e\u7ec8\u7aef-code-\u5feb\u6377\u6253\u5f00\">\u914d\u7f6e\u7ec8\u7aef code \u5feb\u6377\u6253\u5f00<\/h5>\n<p>\u5b89\u88c5 <code>code<\/code> \u547d\u4ee4\uff0c\u652f\u6301\u5728\u7ec8\u7aef\u5feb\u6377\u6253\u5f00 <code>VSCode<\/code>\u3002<\/p>\n<p>\u5feb\u6377\u952e <code>\u2318 + \u21e7 + P<\/code> \u6253\u5f00\u547d\u4ee4\u9762\u677f\uff0c\u8f93\u5165 <code>shell<\/code>\uff0c\u9009\u62e9 <code>Shell Command: Install 'code' command in PATH<\/code>\u3002<\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/install-code-in-path.jpg\" alt=\"install-code-command-in-path\"><\/p>\n<p>\u7136\u540e\u5728\u7ec8\u7aef\u8f93\u5165 <code>code .<\/code> \u6216\u8005 <code>code [path]<\/code> \u76f4\u63a5\u5728 <code>VSCode<\/code> \u6253\u5f00\u6587\u4ef6\u6216\u76ee\u5f55\u3002<\/p>\n<h5 id=\"\u6269\u5c55-1\">\u6269\u5c55<\/h5>\n<table>\n<thead>\n<tr>\n<th>\u6269\u5c55<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>Chinese Language Pack for Visual Studio Code<\/code><\/td>\n<td>\u4e2d\u6587\u8bed\u8a00\u5305<\/td>\n<\/tr>\n<tr>\n<td><code>IntelliJ IDEA Keybindings<\/code><\/td>\n<td>IntelliJ IDEA \u5feb\u6377\u952e\u7ed1\u5b9a<\/td>\n<\/tr>\n<tr>\n<td><code>Code Runner<\/code><\/td>\n<td>\u5feb\u6377\u8fd0\u884c\u4ee3\u7801\u6587\u4ef6<\/td>\n<\/tr>\n<tr>\n<td><code>EditorConfig for VS Code<\/code><\/td>\n<td><code>EditorConfig<\/code> \u914d\u7f6e\u6269\u5c55\uff0c\u6839\u636e\u914d\u7f6e\u7edf\u4e00\u683c\u5f0f\u5316\u98ce\u683c<\/td>\n<\/tr>\n<tr>\n<td><code>PPZ<\/code><\/td>\n<td>\u5173\u7cfb\u578b\u6570\u636e\u5e93\u56fe\u5f62\u7ba1\u7406<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"sublime-text\">Sublime Text<\/h4>\n<p>\u5b89\u88c5 <code>Package Control<\/code>: <a href=\"https:\/\/packagecontrol.io\/installation\">https:\/\/packagecontrol.io\/installation<\/a><\/p>\n<p>\u4e2d\u6587\u63d2\u4ef6: <code>ChineseLocalizations<\/code><\/p>\n<ul>\n<li>\u914d\u7f6e <code>subl<\/code> \u547d\u4ee4\u884c\u6253\u5f00\u6587\u4ef6<\/li>\n<\/ul>\n<blockquote>\n<p>\u5728 <code>~\/.zshrc<\/code> \u6dfb\u52a0\u5982\u4e0b\u914d\u7f6e:<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nb\">alias<\/span> <span class=\"nv\">subl<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;&#39;\/Applications\/Sublime Text.app\/Contents\/SharedSupport\/bin\/subl&#39;&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7136\u540e\u5c31\u53ef\u4ee5\u4f7f\u7528 <code>subl [path]<\/code> \u5feb\u6377\u6253\u5f00\u6587\u4ef6\u6216\u76ee\u5f55\u3002<\/p>\n<h3 id=\"\u5176\u4ed6\u8f6f\u4ef6\">\u5176\u4ed6\u8f6f\u4ef6<\/h3>\n<ul>\n<li><a href=\"https:\/\/justgetflux.com\"><code>f.lux<\/code><\/a>\uff1a\u81ea\u52a8\u8c03\u6574\u5c4f\u5e55\u8272\u6e29\u7684\u62a4\u773c\u7a0b\u5e8f\uff08\u514d\u8d39\uff09<\/li>\n<li><code>MonitorControl<\/code>\uff1a<a href=\"https:\/\/github.com\/MonitorControl\/MonitorControl\"><code>\u5f00\u6e90<\/code><\/a> \u663e\u793a\u5668\u4eae\u5ea6\u3001\u97f3\u91cf\u63a7\u5236\uff0c\u652f\u6301\u5916\u63a5\u663e\u793a\u5668<\/li>\n<li><code>\u4e07\u5e74\u5386<\/code>\uff1a\u65e5\u5386\uff08\u514d\u8d39\uff09<\/li>\n<li><code>\u7f51\u6613\u6709\u9053\u8bcd\u5178<\/code>\uff1a\u7ffb\u8bd1\uff08\u514d\u8d39\uff09<\/li>\n<li><code>iShot<\/code>\uff1a\u622a\u56fe\u3001\u957f\u622a\u56fe\u3001\u5f55\u5c4f\uff08\u57fa\u7840\u514d\u8d39\uff09<\/li>\n<li><code>\u5600\u55d2\u6e05\u5355<\/code>\uff1a\u65f6\u95f4\u4e0e\u65e5\u7a0b\u7ba1\u7406\uff08\u57fa\u7840\u514d\u8d39\uff09<\/li>\n<li><code>MWeb<\/code> \/ <code>Typora<\/code> \/ <code>FSNotes<\/code>\uff1aMarkdown \u7b14\u8bb0\u7ba1\u7406<\/li>\n<li><code>FastZip\/MacZip<\/code>\uff1a\u89e3\u538b\u7f29\uff08\u514d\u8d39\uff09<\/li>\n<li><code>NTFS Disk by Omi<\/code>\uff1a\u514d\u8d39\u7684 NTFS \u78c1\u76d8\u8bfb\u5199\u7ba1\u7406\u5668\uff08\u652f\u6301 M1\uff09<\/li>\n<li><code>OmniGraffle Pro<\/code>\uff1a\u56fe\u8868\/\u6d41\u7a0b\u56fe\u7b49\u77e2\u91cf\u56fe\u7ed8\u5236<\/li>\n<li><code>Reeder<\/code>\uff1aRSS \u8ba2\u9605<\/li>\n<li><code>IINA<\/code>\uff1a<a href=\"https:\/\/github.com\/iina\/iina\"><code>\u5f00\u6e90<\/code><\/a>\u97f3\u89c6\u9891\u64ad\u653e\u5668<\/li>\n<li><code>Beyond Compare<\/code>\uff1a\u6587\u4ef6\/\u6587\u672c\u5bf9\u6bd4<\/li>\n<li><code>Rectangle<\/code> - <a href=\"https:\/\/github.com\/rxhanson\/Rectangle\"><code>\u5f00\u6e90<\/code><\/a>\u7a97\u53e3\u6574\u7406\/\u5206\u5c4f<\/li>\n<li><code>uTools<\/code>\uff1a\u7c7b\u4f3c Alfred \u7684\u6548\u7387\u5de5\u5177\uff0c\u8de8\u5e73\u53f0\uff08\u514d\u8d39\uff09<\/li>\n<li><code>Brave Browser<\/code>\uff1a\u57fa\u4e8e <code>Chromium<\/code> \u7684<a href=\"https:\/\/github.com\/brave\/brave-browser\"><code>\u5f00\u6e90<\/code><\/a>\u6d4f\u89c8\u5668\uff0c\u53f7\u79f0\u80fd\u66f4\u597d\u7684\u4fdd\u62a4\u9690\u79c1<\/li>\n<li><code>Bitwarden<\/code>\uff1a<a href=\"https:\/\/github.com\/bitwarden\/clients\"><code>\u5f00\u6e90<\/code><\/a> \u5bc6\u7801\u7ba1\u7406\u5668<\/li>\n<li><code>Maccy<\/code>\uff1a<a href=\"https:\/\/github.com\/p0deje\/Maccy\"><code>\u5f00\u6e90<\/code><\/a>\u526a\u5207\u677f\u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/www.better365.cn\/FlyKey.html\"><code>FlyKey<\/code><\/a> - \u5e94\u7528\u5feb\u6377\u952e\u5c55\u793a\uff08\u514d\u8d39\uff09<\/li>\n<li><code>Parallels Desktop<\/code> - \u865a\u62df\u673a<\/li>\n<li><code>AlDente<\/code> - \u7535\u6e90\u7ba1\u7406\uff0c\u8ba9\u7535\u6c60\u66f4\u8010\u7528\uff08\u57fa\u7840\u514d\u8d39\uff09<\/li>\n<li><a href=\"https:\/\/github.com\/warpdotdev\/Warp\">warp<\/a> - \u53f7\u79f0\u4e0b\u4e00\u4ee3\u7ec8\u7aef\u795e\u5668\uff08\u514d\u8d39\uff09<\/li>\n<li><code>Bartender<\/code> - \u83dc\u5355\u680f\u56fe\u6807\u7ba1\u7406<\/li>\n<\/ul>\n<p>\u8fd8\u6709\u5f88\u591a\u4f18\u79c0\u8f6f\u4ef6\u6ca1\u6709\u63a8\u8350\uff0c\u540e\u7eed\u5355\u5f00\u4e00\u4e2a\u4e13\u95e8\u4ecb\u7ecd\u3002<\/p>\n<h2 id=\"\u5f00\u53d1\u73af\u5883\">\u5f00\u53d1\u73af\u5883<\/h2>\n<h3 id=\"java\">Java<\/h3>\n<h4 id=\"jdk\">JDK<\/h4>\n<ul>\n<li><code>JVM<\/code>\uff1a<code>Java Virtual Machine<\/code><\/li>\n<li><code>JRE<\/code>\uff1a<code>Java Runtime Environment<\/code><\/li>\n<li><code>JDK<\/code>\uff1a<code>Java SE Development Kit<\/code><\/li>\n<li><code>SDK<\/code>\uff1a<code>Software Development Kit<\/code><\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">  \u250c\u2500    \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \u2502     \u2502     Compiler, debugger, etc.     \u2502\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \u2502     \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> JDK \u250c\u2500 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \u2502  \u2502  \u2502                                  \u2502\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \u2502 JRE \u2502      JVM + Runtime Library       \u2502\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \u2502  \u2502  \u2502                                  \u2502\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \u2514\u2500 \u2514\u2500 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        \u2502Windows\u2502\u2502 Linux \u2502\u2502 macOS \u2502\u2502others \u2502\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u56fe\u6e90\u81ea\uff1ahttps:\/\/www.liaoxuefeng.com\/wiki\/1252599548343744\/1255876875896416\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h5 id=\"oraclejdk\">OracleJDK<\/h5>\n<blockquote>\n<p>\u4ec5 JDK 17 \u53ca\u4ee5\u4e0a\u7248\u672c\u624d\u652f\u6301 Apple Silicon\u3002<\/p>\n<p>JDK 8 \u9700\u767b\u5f55 Oracle \u8d26\u6237\u624d\u80fd\u4e0b\u8f7d\uff0c\u4e14\u6ca1\u6709 ARM \u7248\u672c\u3002\uff08\u867d\u7136 x64 \u7248\u672c\u4e5f\u53ef\u4ee5\u5b89\u88c5\u4f7f\u7528\uff0c\u4f46\u4e0d\u6e05\u695a\u662f\u5426\u5b58\u5728\u95ee\u9898\uff09<\/p>\n<p>\u4e0d\u662f\u5f88\u63a8\u8350\u4f7f\u7528 OracleJDK\uff0c\u56e0\u4e3a\u5176\u534f\u8bae\u5df2\u6539\u4e3a <a href=\"https:\/\/www.oracle.com\/java\/technologies\/javase\/jdk-faqs.html\">OTN<\/a><\/p>\n<\/blockquote>\n<p>\u4e0b\u8f7d\u5730\u5740: <a href=\"https:\/\/www.oracle.com\/java\/technologies\/downloads\">https:\/\/www.oracle.com\/java\/technologies\/downloads<\/a><\/p>\n<p>\u6839\u636e CPU \u9009\u62e9\u5305\uff1a<\/p>\n<ul>\n<li><strong>Intel<\/strong>: <code>x64 DMG Installer<\/code><\/li>\n<li><strong>Apple Silicon<\/strong>: <code>Arm 64 DMG Installer<\/code><\/li>\n<\/ul>\n<p>\u4e0b\u8f7d\u5b89\u88c5\uff0c\u7136\u540e\u9a8c\u8bc1\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\u279c  ~ java -version\n<\/span><\/span><span class=\"line\"><span class=\"cl\">java version <span class=\"s2\">&#34;1.8.0_311&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Java<span class=\"o\">(<\/span>TM<span class=\"o\">)<\/span> SE Runtime Environment <span class=\"o\">(<\/span>build 1.8.0_311-b11<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Java HotSpot<span class=\"o\">(<\/span>TM<span class=\"o\">)<\/span> 64-Bit Server VM <span class=\"o\">(<\/span>build 25.311-b11, mixed mode<span class=\"o\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u914d\u7f6e <code>JAVA_HOME<\/code> \u73af\u5883\u53d8\u91cf\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">JAVA_HOME<\/span><span class=\"o\">=<\/span>\/Library\/Java\/JavaVirtualMachines\/jdk1.8.0_311.jdk\/Contents\/Home\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h5 id=\"openjdk\">OpenJDK<\/h5>\n<p>OpenJDK \u662f Sun \u5728 2006 \u5e74\u5f00\u6e90\u7684 Java SE \u514d\u8d39\u5f00\u6e90\u7248\u672c\uff0c\u91c7\u7528 <code>GPLv2+CE<\/code> \u8bb8\u53ef\u534f\u8bae\u3002\u8be5\u9879\u76ee\u7531 Oracle \u4e3b\u5bfc\uff0cIBM\u3001\u7ea2\u5e3d\u3001\u5fae\u8f6f\u7b49\u5747\u6709\u53c2\u4e0e\u3002<\/p>\n<p>\u5b98\u7f51: <a href=\"https:\/\/openjdk.org\">https:\/\/openjdk.org<\/a><\/p>\n<ul>\n<li>Homebrew \u5b89\u88c5<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><span class=\"lnt\">9\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/\/ \u641c\u7d22\n<\/span><\/span><span class=\"line\"><span class=\"cl\">brew search openjdk\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u5b89\u88c5\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u82f9\u679c\u82af\u7247\u4e0d\u4e00\u5b9a\u652f\u6301\u8001\u7248\u672c\uff0c\u5931\u8d25\u5219\u53ef\u8003\u8651\u5b89\u88c5 Zulu \u7248\u672c\n<\/span><\/span><span class=\"line\"><span class=\"cl\">brew install openjdk@8\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u914d\u7f6e\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo ln -sfn \/opt\/homebrew\/opt\/openjdk@8\/libexec\/openjdk.jdk \/Library\/Java\/JavaVirtualMachines\/openjdk-8.jdk\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>Zulu \u5b89\u88c5<\/li>\n<\/ul>\n<p>\u4e0b\u8f7d\u5bf9\u5e94\u7248\u672c: <a href=\"https:\/\/www.azul.com\/downloads\/?version=java-8-lts&amp;os=macos&amp;architecture=arm-64-bit&amp;package=jdk\">https:\/\/www.azul.com\/downloads\/?version=java-8-lts&amp;os=macos&amp;architecture=arm-64-bit&amp;package=jdk<\/a><\/p>\n<p>\u5bf9\u5e94\u7684\u5b89\u88c5\u6559\u7a0b: <a href=\"https:\/\/docs.azul.com\/core\/zulu-openjdk\/install\/macos\">https:\/\/docs.azul.com\/core\/zulu-openjdk\/install\/macos<\/a><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\u279c java -version\n<\/span><\/span><span class=\"line\"><span class=\"cl\">openjdk version <span class=\"s2\">&#34;1.8.0_342&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">OpenJDK Runtime Environment <span class=\"o\">(<\/span>Zulu 8.64.0.15-CA-macos-aarch64<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>build 1.8.0_342-b07<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">OpenJDK 64-Bit Server VM <span class=\"o\">(<\/span>Zulu 8.64.0.15-CA-macos-aarch64<span class=\"o\">)<\/span> <span class=\"o\">(<\/span>build 25.342-b07, mixed mode<span class=\"o\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5bf9\u5e94\u7684 <code>JAVA_HOME<\/code> \u5728 <code>\/Library\/Java\/JavaVirtualMachines\/zulu-8.jdk\/Contents\/Home<\/code><\/p>\n<h5 id=\"sdkman\">SDKMAN<\/h5>\n<p>\u4e00\u4e2a\u4e13\u95e8\u5b89\u88c5\u3001\u7ba1\u7406 SKD \u7684\u8de8\u5e73\u53f0 Shell \u811a\u672c\u8f6f\u4ef6\uff0c\u652f\u6301\u51e0\u4e4e\u6240\u6709\u5382\u5546\u7684 JDK \u53ca\u5e38\u7528 SDK\u3002<\/p>\n<p>\u5b98\u7f51\u53ca\u6559\u7a0b: <a href=\"https:\/\/sdkman.io\">https:\/\/sdkman.io<\/a><\/p>\n<p>\u4ee5 JDK \u4e3a\u4f8b\uff0c\u5176\u4ed6 SDK \u7c7b\u4f3c\u3002<\/p>\n<ul>\n<li>\u5b89\u88c5 SDKMAN<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">curl -s <span class=\"s2\">&#34;https:\/\/get.sdkman.io&#34;<\/span> <span class=\"p\">|<\/span> bash\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">source<\/span> <span class=\"s2\">&#34;<\/span><span class=\"nv\">$HOME<\/span><span class=\"s2\">\/.sdkman\/bin\/sdkman-init.sh&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5b89\u88c5\u76ee\u5f55 <code>$HOME\/.sdkman<\/code><\/p>\n<ul>\n<li>\u67e5\u770b\u652f\u6301\u7684 JDK \u7248\u672c\u5217\u8868<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">================================================================================<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Available Java Versions <span class=\"k\">for<\/span> macOS ARM <span class=\"nv\">64bit<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">================================================================================<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Vendor        <span class=\"p\">|<\/span> Use <span class=\"p\">|<\/span> Version      <span class=\"p\">|<\/span> Dist    <span class=\"p\">|<\/span> Status     <span class=\"p\">|<\/span> Identifier\n<\/span><\/span><span class=\"line\"><span class=\"cl\">--------------------------------------------------------------------------------\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Java.net      <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 20.ea.9      <span class=\"p\">|<\/span> open    <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 20.ea.9-open\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 20.ea.8      <span class=\"p\">|<\/span> open    <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 20.ea.8-open\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 19.ea.34     <span class=\"p\">|<\/span> open    <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 19.ea.34-open\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 19.ea.33     <span class=\"p\">|<\/span> open    <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 19.ea.33-open\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 18.0.2       <span class=\"p\">|<\/span> open    <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 18.0.2-open\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 18.0.1.1     <span class=\"p\">|<\/span> open    <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 18.0.1.1-open\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Microsoft     <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 17.0.4       <span class=\"p\">|<\/span> ms      <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 17.0.4-ms\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 17.0.3       <span class=\"p\">|<\/span> ms      <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 17.0.3-ms\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 11.0.16      <span class=\"p\">|<\/span> ms      <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 11.0.16-ms\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 11.0.15      <span class=\"p\">|<\/span> ms      <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 11.0.15-ms\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> Oracle        <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 18.0.2       <span class=\"p\">|<\/span> oracle  <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 18.0.2-oracle\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 18.0.1       <span class=\"p\">|<\/span> oracle  <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 18.0.1-oracle\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 17.0.4       <span class=\"p\">|<\/span> oracle  <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 17.0.4-oracle\n<\/span><\/span><span class=\"line\"><span class=\"cl\">               <span class=\"p\">|<\/span>     <span class=\"p\">|<\/span> 17.0.3       <span class=\"p\">|<\/span> oracle  <span class=\"p\">|<\/span>            <span class=\"p\">|<\/span> 17.0.3-oracle\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5b89\u88c5 JDK<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/\/ OracleJDK\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sdk install java x.y.z-oracle\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ OpenJDK\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sdk install java x.y.z-open\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u67e5\u770b\u5207\u6362\u9ed8\u8ba4 JDK \u7248\u672c<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/\/ \u67e5\u770b\u5f53\u524d\u7248\u672c\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sdk current java\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u5207\u6362\u9ed8\u8ba4\u7248\u672c\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sdk default java x.y.z-open\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h5 id=\"idea\">IDEA<\/h5>\n<p><code>IntelliJ IDEA<\/code> \u63d0\u4f9b\u4e86 JDK \u7ba1\u7406\u529f\u80fd\uff0c\u53ef\u6dfb\u52a0\u5df2\u5b58\u5728\u7684 JDK\uff0c\u4e5f\u53ef\u4ee3\u4e3a\u4e0b\u8f7d\u5b89\u88c5\u6240\u9700 JDK\u3002<\/p>\n<p>\u64cd\u4f5c\u6b65\u9aa4\uff1a<code>MenuBar<\/code> \u2192 <code>File<\/code> \u2192 <code>Project Structure...<\/code>(<code>\u2318 + ;<\/code>) \u2192 <code>SDKs<\/code> \u2192 <code>+<\/code> \u2192 <code>Download JDK<\/code><\/p>\n<p><img src=\"https:\/\/shockerli.net\/post\/mac-initialize\/media\/idea-jdk-download.jpg\" alt=\"idea-jdk-download\"><\/p>\n<h5 id=\"java_home\">JAVA_HOME<\/h5>\n<p>\u67e5\u770b\u5df2\u5b89\u88c5\u7248\u672c\u7684 <code>JAVA_HOME<\/code>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/usr\/libexec\/java_home\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/Library\/Java\/JavaVirtualMachines\/zulu-8.jdk\/Contents\/Home\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/Library\/Java\/JavaVirtualMachines\/zulu-11.jdk\/Contents\/Home\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u67e5\u770b\u6307\u5b9a\u7248\u672c\u7684 <code>JAVA_HOME<\/code>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/usr\/libexec\/java_home -v8\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/Library\/Java\/JavaVirtualMachines\/zulu-8.jdk\/Contents\/Home\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5355\u4e2a\u7248\u672c\u914d\u7f6e\uff08<code>~\/.zshrc<\/code>\uff09\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">JAVA_HOME<\/span><span class=\"o\">=<\/span><span class=\"k\">$(<\/span>\/usr\/libexec\/java_home -v8<span class=\"k\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u591a\u7248\u672c\u914d\u7f6e\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># Java Home<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">JAVA_HOME<\/span><span class=\"o\">=<\/span><span class=\"k\">$(<\/span>\/usr\/libexec\/java_home -v11<span class=\"k\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">JAVA_8_HOME<\/span><span class=\"o\">=<\/span><span class=\"k\">$(<\/span>\/usr\/libexec\/java_home -v8<span class=\"k\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">JAVA_11_HOME<\/span><span class=\"o\">=<\/span><span class=\"k\">$(<\/span>\/usr\/libexec\/java_home -v11<span class=\"k\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">alias<\/span> <span class=\"nv\">java8<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;export JAVA_HOME=$JAVA_8_HOME&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">alias<\/span> <span class=\"nv\">java11<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;export JAVA_HOME=$JAVA_11_HOME&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u9ed8\u8ba4\u4e3a Java 8<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">java8\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"maven\">Maven<\/h4>\n<ul>\n<li>\u5b89\u88c5<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install maven\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p>\u5982\u679c\u53ea\u4f7f\u7528 <code>IDEA<\/code>\uff0c\u53ef\u65e0\u9700\u5b89\u88c5\uff0c\u76f4\u63a5\u4f7f\u7528 IDE \u5185\u7f6e\u7684 Maven \u5373\u53ef\u3002<\/p>\n<\/blockquote>\n<ul>\n<li>\u56fd\u5185\u955c\u50cf\u914d\u7f6e<\/li>\n<\/ul>\n<p>\u4ee5 <a href=\"https:\/\/developer.aliyun.com\/mvn\/guide\">\u963f\u91cc\u4e91 Maven<\/a> \u4e3a\u4f8b\u3002\u6253\u5f00\u6216\u521b\u5efa\u914d\u7f6e\u6587\u4ef6\uff1a<code>$HOME\/.m2\/settings.xml<\/code>\uff0c\u5e76\u4fee\u6539\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-xml\" data-lang=\"xml\"><span class=\"line\"><span class=\"cl\"><span class=\"cp\">&lt;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nt\">&lt;settings<\/span> <span class=\"na\">xmlns=<\/span><span class=\"s\">&#34;http:\/\/maven.apache.org\/SETTINGS\/1.0.0&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">          <span class=\"na\">xmlns:xsi=<\/span><span class=\"s\">&#34;http:\/\/www.w3.org\/2001\/XMLSchema-instance&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">          <span class=\"na\">xsi:schemaLocation=<\/span><span class=\"s\">&#34;http:\/\/maven.apache.org\/SETTINGS\/1.0.0 http:\/\/maven.apache.org\/xsd\/settings-1.0.0.xsd&#34;<\/span><span class=\"nt\">&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nt\">&lt;mirrors&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&lt;mirror&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"c\">&lt;!-- \u6587\u6863: https:\/\/developer.aliyun.com\/mvn\/guide --&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&lt;id&gt;<\/span>aliyunmaven<span class=\"nt\">&lt;\/id&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&lt;mirrorOf&gt;<\/span>*<span class=\"nt\">&lt;\/mirrorOf&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&lt;name&gt;<\/span>\u963f\u91cc\u4e91\u516c\u5171\u4ed3\u5e93<span class=\"nt\">&lt;\/name&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&lt;url&gt;<\/span>https:\/\/maven.aliyun.com\/repository\/public<span class=\"nt\">&lt;\/url&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&lt;\/mirror&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nt\">&lt;\/mirrors&gt;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nt\">&lt;\/settings&gt;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"php\">PHP<\/h3>\n<h4 id=\"\u5b89\u88c5\">\u5b89\u88c5<\/h4>\n<ul>\n<li>\u7b2c\u4e09\u65b9\u6e90<\/li>\n<\/ul>\n<blockquote>\n<p>\u7531\u4e8e\u5b98\u65b9\u7ef4\u62a4\u7684 PHP \u7248\u672c\u90fd\u662f\u6700\u65b0\u7684\u51e0\u4e2a\uff0c\u5bf9\u4e8e\u6bd4\u8f83\u8001\u7684\u7248\u672c\uff0c\u65e0\u6cd5\u76f4\u63a5\u5b89\u88c5\uff0c\u5982\u679c\u9700\u8981\u53ef Tap \u7b2c\u4e09\u65b9\u6e90<\/p>\n<\/blockquote>\n<p>\u5f3a\u70c8\u63a8\u8350: <a href=\"https:\/\/github.com\/shivammathur\/homebrew-php\">shivammathur\/php<\/a><\/p>\n<blockquote>\n<p>\u6dfb\u52a0 Tap<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew tap shivammathur\/php\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5b89\u88c5 PHP<\/li>\n<\/ul>\n<blockquote>\n<p>\u6b64\u5904\u793a\u4f8b\u5b89\u88c5 <code>PHP 7.4<\/code><\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install php@7.4\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p>\u5c06\u6b64\u7248\u672c\u66ff\u6362\u4e3a\u547d\u4ee4\u884c\u9ed8\u8ba4\u7248\u672c<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew link --overwrite --force php@7.4\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p>\u6dfb\u52a0\u5230 PATH<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s1\">&#39;export PATH=&#34;\/opt\/homebrew\/opt\/php@7.4\/bin:$PATH&#34;&#39;<\/span> &gt;&gt; ~\/.zshrc\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s1\">&#39;export PATH=&#34;\/opt\/homebrew\/opt\/php@7.4\/sbin:$PATH&#34;&#39;<\/span> &gt;&gt; ~\/.zshrc\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u914d\u7f6e<\/li>\n<\/ul>\n<blockquote>\n<p>\u6253\u5f00\u914d\u7f6e\u6587\u4ef6\u4fee\u6539\u9ed8\u8ba4\u65f6\u533a<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-ini\" data-lang=\"ini\"><span class=\"line\"><span class=\"cl\"><span class=\"na\">date.timezone<\/span> <span class=\"o\">=<\/span> <span class=\"s\">PRC<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"composer\">Composer<\/h4>\n<ul>\n<li>\u5b89\u88c5<\/li>\n<\/ul>\n<p>\u901a\u8fc7 brew \u5b89\u88c5\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install composer\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6216\u8005\u624b\u52a8\u5b89\u88c5\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">curl -o composer https:\/\/getcomposer.org\/download\/latest-stable\/composer.phar\n<\/span><\/span><span class=\"line\"><span class=\"cl\">chmod +x composer\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span> ! -d <span class=\"s2\">&#34;\/usr\/local\/bin&#34;<\/span> <span class=\"o\">]<\/span> <span class=\"o\">&amp;&amp;<\/span> sudo mkdir \/usr\/local\/bin\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sudo mv composer \/usr\/local\/bin\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u964d\u7ea7<\/li>\n<\/ul>\n<p>\u5982\u679c\u4e00\u4e9b\u8001\u9879\u76ee\u4e0d\u652f\u6301 Composer V2\uff0c\u90a3\u4e48\u9700\u8981\u56de\u9000\u5230 V1 \u7248\u672c<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">composer self-update --1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u955c\u50cf<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/\/ \u8bbe\u7f6e\u955c\u50cf\n<\/span><\/span><span class=\"line\"><span class=\"cl\">composer config -g repo.packagist composer <span class=\"o\">[<\/span>mirrors-url<span class=\"o\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u53d6\u6d88\u955c\u50cf\n<\/span><\/span><span class=\"line\"><span class=\"cl\">composer config -g --unset repos.packagist\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><span class=\"lnt\">9\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\/\/ \u963f\u91cc\u4e91\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u5b98\u7f51: https:\/\/developer.aliyun.com\/composer\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u955c\u50cf: https:\/\/mirrors.aliyun.com\/composer\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u817e\u8baf\u4e91\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u51fa\u73b0\u8fc7composer.lock\u6587\u4ef6\u4e2ddist.reference\u4e0edist.url\u4e0b\u8f7d\u4e0d\u4e00\u81f4\u7684\u60c5\u51b5\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u5373reference\u662f\u6700\u65b0commit\uff0c\u4f46\u955c\u50cfurl\u4e0b\u8f7d\u7684\u5305\u5374\u4e0d\u975e\u6700\u65b0\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u5b98\u7f51: https:\/\/mirrors.cloud.tencent.com\/help\/composer.html\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u955c\u50cf: https:\/\/mirrors.cloud.tencent.com\/composer\/\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5176\u4ed6\u955c\u50cf\u4e0d\u662f\u5f88\u7a33\u5b9a\u3001\u6216\u4e0d\u662f\u5f88\u5168\uff08\u4e00\u4e9b\u4e0b\u8f7d\u91cf\u5c0f\u7684\u4f1a <code>404<\/code>\uff09\uff0c\u5982\u6709\u95ee\u9898\uff0c\u8f6e\u6362\u7740\u8bd5\u8bd5\u3002<\/p>\n<h3 id=\"go\">Go<\/h3>\n<h4 id=\"\u5b89\u88c5-1\">\u5b89\u88c5<\/h4>\n<p>\u5b89\u88c5\u6700\u65b0\u7248\u672c<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install go\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6216\u8005\u6307\u5b9a\u7248\u672c<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew install go@1.13\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u975e\u6700\u65b0\u7248\u672c\uff0c\u9700\u8981\u5efa\u7acb\u4e2a\u94fe\u63a5\uff0c\u8fd9\u6837\u624d\u80fd\u7528\u5230 Go \u547d\u4ee4<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">brew link --overwrite --force go@1.13\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u914d\u7f6e-1\">\u914d\u7f6e<\/h4>\n<ul>\n<li>\u73af\u5883\u53d8\u91cf<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">GO111MODULE<\/span><span class=\"o\">=<\/span>on\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">GOPATH<\/span><span class=\"o\">=<\/span>\/Users\/jioby\/gowork\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">PATH<\/span><span class=\"o\">=<\/span><span class=\"s2\">&#34;<\/span><span class=\"nv\">$GOPATH<\/span><span class=\"s2\">\/bin:<\/span><span class=\"nv\">$PATH<\/span><span class=\"s2\">&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">GOPROXY<\/span><span class=\"o\">=<\/span>https:\/\/goproxy.cn,https:\/\/goproxy.io,direct\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">export<\/span> <span class=\"nv\">GOPRIVATE<\/span><span class=\"o\">=<\/span>*.your-private-git.com\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u79c1\u6709\u4ed3\u5e93<\/li>\n<\/ul>\n<p>\u7ec8\u7aef\u8fd0\u884c\u547d\u4ee4 <code>git config --global -e<\/code>\uff0c\u6dfb\u52a0\u5982\u4e0b\u7c7b\u4f3c\u914d\u7f6e\u5e76\u4fdd\u6301\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>url <span class=\"s2\">&#34;ssh:\/\/git@git.example.com:8182\/&#34;<\/span><span class=\"o\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nv\">insteadOf<\/span> <span class=\"o\">=<\/span> https:\/\/git.example.com\/\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"\u5206\u6790\u89e3\u51b3\u672c\u5730\u5f00\u53d1 Java \u9879\u76ee\u542f\u52a8\u901f\u5ea6\u6162","link":"https:\/\/shockerli.net\/post\/java-startup-slow-get-local-host\/","pubDate":"Mon, 11 Oct 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/java-startup-slow-get-local-host\/","description":"<h2 id=\"\u542f\u52a8\u65e5\u5fd7\">\u542f\u52a8\u65e5\u5fd7<\/h2>\n<p>\u4ee5\u4e0b\u662f\u4e2a Spring Boot \u9879\u76ee\u542f\u52a8\u65e5\u5fd7\uff08\u5df2\u5228\u9664\u65e0\u5173\u90e8\u5206\uff09<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">...\n<\/span><\/span><span class=\"line\"><span class=\"cl\">10:30:10.110 INFO  <span class=\"o\">[<\/span>background-preinit<span class=\"o\">]<\/span> org.hibernate.validator.internal.util.Version --- HV000001: Hibernate Validator 5.4.1.Final\n<\/span><\/span><span class=\"line\"><span class=\"cl\">10:30:15.135 WARN  <span class=\"o\">[<\/span>main<span class=\"o\">]<\/span> org.springframework.boot.StartupInfoLogger --- InetAddress.getLocalHost<span class=\"o\">()<\/span>.getHostName<span class=\"o\">()<\/span> took <span class=\"m\">5001<\/span> milliseconds to respond. Please verify your network configuration <span class=\"o\">(<\/span>macOS machines may need to add entries to \/etc\/hosts<span class=\"o\">)<\/span>.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">10:30:20.142 INFO  <span class=\"o\">[<\/span>main<span class=\"o\">]<\/span> com.example.test.Application --- Starting Application on jioby.local with PID <span class=\"m\">67279<\/span> <span class=\"o\">(<\/span>\/XXX\/target\/classes started by jioby in \/XXX<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">...\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u539f\u56e0\u5206\u6790\">\u539f\u56e0\u5206\u6790<\/h2>\n<p>\u4e0a\u8ff0\u65e5\u5fd7\u5747\u6709\u4e2a\u7279\u70b9\uff0c\u6bcf\u4e2a\u6d89\u53ca DNS \u89e3\u6790\u7684\u90fd\u4f1a\u82b1\u8d39 5 \u79d2\u949f\u5de6\u53f3\u3002<\/p>\n<p>\u7136\u540e\u6839\u636e\u65e5\u5fd7\u63d0\u793a\uff0c\u770b\u770b <code>InetAddress.getLocalHost()<\/code> \u9700\u8981\u6267\u884c\u591a\u4e45\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"nn\">java.net.InetAddress<\/span><span class=\"o\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">public<\/span> <span class=\"kd\">class<\/span> <span class=\"nc\">Demo<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"kt\">void<\/span> <span class=\"nf\">main<\/span><span class=\"o\">(<\/span><span class=\"n\">String<\/span><span class=\"o\">[]<\/span> <span class=\"n\">args<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">printf<\/span><span class=\"o\">(<\/span><span class=\"s\">&#34;Start: %tT%n&#34;<\/span><span class=\"o\">,<\/span> <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">currentTimeMillis<\/span><span class=\"o\">());<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">InetAddress<\/span><span class=\"o\">.<\/span><span class=\"na\">getLocalHost<\/span><span class=\"o\">());<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">printf<\/span><span class=\"o\">(<\/span><span class=\"s\">&#34;Mid: %tT%n&#34;<\/span><span class=\"o\">,<\/span> <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">currentTimeMillis<\/span><span class=\"o\">());<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">InetAddress<\/span><span class=\"o\">.<\/span><span class=\"na\">getLocalHost<\/span><span class=\"o\">());<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">Exception<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">println<\/span><span class=\"o\">(<\/span><span class=\"n\">e<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">());<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">out<\/span><span class=\"o\">.<\/span><span class=\"na\">printf<\/span><span class=\"o\">(<\/span><span class=\"s\">&#34;End: %tT%n&#34;<\/span><span class=\"o\">,<\/span> <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">currentTimeMillis<\/span><span class=\"o\">());<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u8f93\u51fa\u7ed3\u679c\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">Start: 17:27:58\n<\/span><\/span><span class=\"line\"><span class=\"cl\">jioby.local\/192.168.131.48\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Mid: 17:28:03\n<\/span><\/span><span class=\"line\"><span class=\"cl\">jioby.local\/192.168.131.48\n<\/span><\/span><span class=\"line\"><span class=\"cl\">End: 17:28:08\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u518d\u770b\u770b <code>InetAddress.getLocalHost()<\/code> \u7684\u6e90\u7801\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-java\" data-lang=\"java\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">public<\/span> <span class=\"kd\">static<\/span> <span class=\"n\">InetAddress<\/span> <span class=\"nf\">getLocalHost<\/span><span class=\"o\">()<\/span> <span class=\"kd\">throws<\/span> <span class=\"n\">UnknownHostException<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">SecurityManager<\/span> <span class=\"n\">security<\/span> <span class=\"o\">=<\/span> <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">getSecurityManager<\/span><span class=\"o\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"c1\">\/\/ \u672c\u5730\u8fd4\u56de\u7684\u662f hostname\uff0c\u6bd4\u5982\u6211\u7684\u5c31\u662f jioby.local\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>        <span class=\"n\">String<\/span> <span class=\"n\">local<\/span> <span class=\"o\">=<\/span> <span class=\"n\">impl<\/span><span class=\"o\">.<\/span><span class=\"na\">getLocalHostName<\/span><span class=\"o\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">security<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">null<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"n\">security<\/span><span class=\"o\">.<\/span><span class=\"na\">checkConnect<\/span><span class=\"o\">(<\/span><span class=\"n\">local<\/span><span class=\"o\">,<\/span> <span class=\"o\">-<\/span><span class=\"n\">1<\/span><span class=\"o\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"c1\">\/\/ \u4e0d\u4e0e localhost \u5339\u914d\uff0c\u6545\u6ca1\u6cd5\u8d70\u56de\u73af\u5730\u5740\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>        <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">local<\/span><span class=\"o\">.<\/span><span class=\"na\">equals<\/span><span class=\"o\">(<\/span><span class=\"s\">&#34;localhost&#34;<\/span><span class=\"o\">))<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"n\">impl<\/span><span class=\"o\">.<\/span><span class=\"na\">loopbackAddress<\/span><span class=\"o\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"n\">InetAddress<\/span> <span class=\"n\">ret<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"o\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"kd\">synchronized<\/span> <span class=\"o\">(<\/span><span class=\"n\">cacheLock<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"kt\">long<\/span> <span class=\"n\">now<\/span> <span class=\"o\">=<\/span> <span class=\"n\">System<\/span><span class=\"o\">.<\/span><span class=\"na\">currentTimeMillis<\/span><span class=\"o\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">cachedLocalHost<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">null<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"c1\">\/\/ \u7f13\u5b58 local \u7684 IP \u5730\u5740 5 \u79d2\u949f\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                <span class=\"k\">if<\/span> <span class=\"o\">((<\/span><span class=\"n\">now<\/span> <span class=\"o\">-<\/span> <span class=\"n\">cacheTime<\/span><span class=\"o\">)<\/span> <span class=\"o\">&lt;<\/span> <span class=\"n\">maxCacheTime<\/span><span class=\"o\">)<\/span> <span class=\"c1\">\/\/ Less than 5s old?\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"n\">ret<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cachedLocalHost<\/span><span class=\"o\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">else<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">cachedLocalHost<\/span> <span class=\"o\">=<\/span> <span class=\"kc\">null<\/span><span class=\"o\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"c1\">\/\/ we are calling getAddressesFromNameService directly\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>            <span class=\"c1\">\/\/ to avoid getting localHost from cache\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>            <span class=\"k\">if<\/span> <span class=\"o\">(<\/span><span class=\"n\">ret<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">null<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">InetAddress<\/span><span class=\"o\">[]<\/span> <span class=\"n\">localAddrs<\/span><span class=\"o\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"k\">try<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"c1\">\/\/ \u6162\u5728\u6b64\u5904 DNS \u89e3\u6790\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"n\">localAddrs<\/span> <span class=\"o\">=<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"n\">InetAddress<\/span><span class=\"o\">.<\/span><span class=\"na\">getAddressesFromNameService<\/span><span class=\"o\">(<\/span><span class=\"n\">local<\/span><span class=\"o\">,<\/span> <span class=\"kc\">null<\/span><span class=\"o\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">UnknownHostException<\/span> <span class=\"n\">uhe<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"c1\">\/\/ Rethrow with a more informative error message.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>                    <span class=\"n\">UnknownHostException<\/span> <span class=\"n\">uhe2<\/span> <span class=\"o\">=<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        <span class=\"k\">new<\/span> <span class=\"n\">UnknownHostException<\/span><span class=\"o\">(<\/span><span class=\"n\">local<\/span> <span class=\"o\">+<\/span> <span class=\"s\">&#34;: &#34;<\/span> <span class=\"o\">+<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                                 <span class=\"n\">uhe<\/span><span class=\"o\">.<\/span><span class=\"na\">getMessage<\/span><span class=\"o\">());<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"n\">uhe2<\/span><span class=\"o\">.<\/span><span class=\"na\">initCause<\/span><span class=\"o\">(<\/span><span class=\"n\">uhe<\/span><span class=\"o\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    <span class=\"k\">throw<\/span> <span class=\"n\">uhe2<\/span><span class=\"o\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">cachedLocalHost<\/span> <span class=\"o\">=<\/span> <span class=\"n\">localAddrs<\/span><span class=\"o\">[<\/span><span class=\"n\">0<\/span><span class=\"o\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">cacheTime<\/span> <span class=\"o\">=<\/span> <span class=\"n\">now<\/span><span class=\"o\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"n\">ret<\/span> <span class=\"o\">=<\/span> <span class=\"n\">localAddrs<\/span><span class=\"o\">[<\/span><span class=\"n\">0<\/span><span class=\"o\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"n\">ret<\/span><span class=\"o\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"o\">(<\/span><span class=\"n\">java<\/span><span class=\"o\">.<\/span><span class=\"na\">lang<\/span><span class=\"o\">.<\/span><span class=\"na\">SecurityException<\/span> <span class=\"n\">e<\/span><span class=\"o\">)<\/span> <span class=\"o\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"n\">impl<\/span><span class=\"o\">.<\/span><span class=\"na\">loopbackAddress<\/span><span class=\"o\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u89e3\u51b3\u529e\u6cd5\">\u89e3\u51b3\u529e\u6cd5<\/h2>\n<p>\u8bbe\u7f6e\u672c\u673a <code>hosts<\/code>\uff0c\u8ba9\u4e3b\u673a\u540d\u8d70<strong>\u56de\u73af\u5730\u5740<\/strong>\u5373\u53ef\u3002<\/p>\n<p><code>hosts<\/code> \u6dfb\u52a0\u5982\u4e0b\u4e00\u884c\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">127.0.0.1       localhost   jioby.local\n<\/span><\/span><span class=\"line\"><span class=\"cl\">::1             localhost   jioby.local\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6b64\u5904\u7684 <code>jioby.local<\/code> \u5373\u4e3b\u673a\u540d\uff0cmacOS \u6216 Linux \u53ef\u901a\u8fc7 <code>hostname<\/code> \u67e5\u770b\u3002<\/p>\n<blockquote>\n<p>\u5982\u679c\u4f60\u60f3\u6539 macOS \u4e3b\u673a\u540d\uff0c\u53ef\u53c2\u8003\u8fd9\u7bc7\u6587\u7ae0\uff1a<a href=\"..\/macos-hostname-scutil\">\u641e\u61c2 macOS \u4e0a\u7684\u4e3b\u673a\u540d\/hostname\/ComputerName<\/a><\/p>\n<\/blockquote>"},{"title":"\u5982\u4f55\u4e0d\u9760\u8fd0\u6c14\u81f4\u5bcc","link":"https:\/\/shockerli.net\/post\/how-to-get-rich-without-getting-lucky\/","pubDate":"Wed, 08 Sep 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/how-to-get-rich-without-getting-lucky\/","description":"<p>\u7f8e\u56fd\u98ce\u9669\u6295\u8d44\u5bb6 <strong>Naval Ravikant<\/strong> \u6709\u4e00\u4e2a\u5f88\u6709\u540d\u7684\u957f\u63a8\u7279\uff0c\u4e00\u517140\u6761\uff0c\u9898\u76ee\u53eb\u505a<a href=\"https:\/\/threadreaderapp.com\/thread\/1002103360646823936.html\">\u300a\u5982\u4f55\u81f4\u5bcc\uff0c\u4e0d\u9760\u8fd0\u6c14\u300b<\/a>\uff0c\u8c08\u4e86\u4ed6\u7684\u5546\u4e1a\u89c2\u3002<\/p>\n<p>Naval Ravikant \u540e\u6765\u8fd8\u6709\u4e00\u7bc7<a href=\"https:\/\/nav.al\/rich\">\u957f\u6587<\/a>\uff0c\u8be6\u7ec6\u89e3\u91ca\u8fd9\u4e9b\u89c2\u70b9\u3002<\/p>\n<h2 id=\"\u4e2d\u6587\u7248\u7ffb\u8bd1\">\u4e2d\u6587\u7248\u7ffb\u8bd1<\/h2>\n<blockquote>\n<p>\u4ee5\u4e0b\u4e3a<strong>\u548c\u83dc\u5934<\/strong>\u7ffb\u8bd1\u7684<a href=\"https:\/\/new.qq.com\/omn\/20200413\/20200413A0U72C00.html\">\u4e2d\u6587\u7248<\/a><\/p>\n<\/blockquote>\n<ol>\n<li>\n<p>Seek wealth, not money or status. Wealth is having assets that earn while you sleep. Money is how we transfer time and wealth. Status is your place in the social hierarchy.<\/p>\n<blockquote>\n<p>\u53bb\u5bfb\u6c42\u8d22\u5bcc\uff0c\u800c\u975e\u91d1\u94b1\u6216\u5730\u4f4d\u3002\u8d22\u5bcc\u5c31\u662f\u4f60\u62e5\u6709\u8d44\u4ea7\uff0c\u800c\u8d44\u4ea7\u5728\u4f60\u7761\u89c9\u7684\u65f6\u5019\u90fd\u8fd8\u5728\u4e3a\u4f60\u8d5a\u94b1\uff1b\u91d1\u94b1\u662f\u6211\u4eec\u8f6c\u6362\u65f6\u95f4\u548c\u8d22\u5bcc\u7684\u5de5\u5177\uff1b\u8eab\u4efd\u662f\u4f60\u5728\u793e\u4f1a\u7b49\u7ea7\u4f53\u7cfb\u91cc\u6240\u5904\u7684\u4f4d\u7f6e\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Understand that ethical wealth creation is possible. If you secretly despise wealth, it will elude you.<\/p>\n<blockquote>\n<p>\u8981\u660e\u767d\u4e00\u4ef6\u4e8b\uff1a\u4e00\u4e2a\u4eba\u5b8c\u5168\u53ef\u4ee5\u4e0d\u9760\u5751\u8499\u62d0\u9a97\u7ad9\u7740\u8d5a\u53d6\u8d22\u5bcc\u3002\u5982\u679c\u4f60\u5728\u6697\u4e2d\u9119\u89c6\u8d22\u5bcc\uff0c\u90a3\u4e48\u8d22\u5bcc\u4e5f\u4f1a\u8eb2\u7740\u4f60\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Ignore people playing status games. They gain status by attacking people playing wealth creation games.<\/p>\n<blockquote>\n<p>\u522b\u53bb\u7406\u4f1a\u90a3\u4e9b\u70ed\u8877\u4e8e\u73a9\u8eab\u4efd\u6e38\u620f\u7684\u4eba\uff0c\u4ed6\u4eec\u901a\u8fc7\u653b\u51fb\u90a3\u4e9b\u521b\u9020\u8d22\u5bcc\u7684\u4eba\u4ee5\u83b7\u5f97\u81ea\u5df1\u7684\u8eab\u4efd\u3002<\/p>\n<\/blockquote>\n<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>\n<p>You\u2019re not going to get rich renting out your time. You must own equity \u2014 a piece of a business \u2014 to gain your financial freedom.<\/p>\n<blockquote>\n<p>\u4f60\u4e0d\u4f1a\u901a\u8fc7\u51fa\u79df\u81ea\u5df1\u7684\u65f6\u95f4\u800c\u53d8\u5f97\u5bcc\u6709\u3002\u4f60\u5fc5\u987b\u62e5\u6709\u4ea7\u6743\uff0c\u4e5f\u5c31\u662f\u751f\u610f\u7684\u4e00\u90e8\u5206\uff0c\u4ee5\u6b64\u624d\u80fd\u8d62\u5f97\u4e2a\u4eba\u8d22\u52a1\u81ea\u7531\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>You will get rich by giving society what it wants but does not yet know how to get. At scale.<\/p>\n<blockquote>\n<p>\u63d0\u4f9b\u793e\u4f1a\u5927\u4f17\u60f3\u8981\u4f46\u662f\u4ed6\u4eec\u8fd8\u4e0d\u77e5\u9053\u5982\u4f55\u83b7\u53d6\u7684\u4e1c\u897f\uff0c\u4f60\u5c31\u4f1a\u56e0\u6b64\u800c\u81f4\u5bcc\u3002\u4f46\u6709\u4e00\u70b9\uff1a\u4f60\u5fc5\u987b<strong>\u89c4\u6a21\u5316<\/strong>\u5730\u4f9b\u5e94\u793e\u4f1a\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Pick an industry where you can play long term games with long term people.<\/p>\n<blockquote>\n<p>\u9009\u62e9\u4e00\u4e2a\u4f60\u53ef\u4ee5\u957f\u671f\u4ece\u4e8b\u7684\u4ea7\u4e1a\uff0c\u5bfb\u627e\u4e00\u6279\u53ef\u4ee5\u4e00\u8d77\u957f\u671f\u5171\u4e8b\u7684\u4eba\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>The Internet has massively broadened the possible space of careers. Most people haven\u2019t figured this out yet.<\/p>\n<blockquote>\n<p>\u4e92\u8054\u7f51\u6781\u5927\u62d3\u5c55\u4e86\u4e00\u4e2a\u4eba\u804c\u4e1a\u751f\u6daf\u7684\u53ef\u80fd\u6027\u3002\u7edd\u5927\u591a\u6570\u4eba\u5bf9\u6b64\u6beb\u65e0\u8ba4\u77e5\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Play iterated games. All the returns in life, whether in wealth, relationships, or knowledge, come from compound interest.<\/p>\n<blockquote>\n<p>\u73a9\u5c31\u73a9\u590d\u5229\u6e38\u620f\u3002\u65e0\u8bba\u662f\u8d22\u5bcc\uff0c\u4eba\u9645\u5173\u7cfb\u6216\u8005\u662f\u77e5\u8bc6\uff0c\u6240\u6709\u4f60\u4eba\u751f\u91cc\u83b7\u5f97\u7684\u56de\u62a5\uff0c\u90fd\u6765\u81ea\u590d\u5229\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Pick business partners with high intelligence, energy, and, above all, integrity.<\/p>\n<blockquote>\n<p>\u5728\u9009\u62e9\u5546\u4e1a\u5408\u4f5c\u4f19\u4f34\u7684\u65f6\u5019\uff0c\u9009\u62e9\u90a3\u4e9b\u9ad8\u667a\u5546\u3001\u7cbe\u529b\u65fa\u76db\u7684\u5bb6\u4f19\uff0c\u4f46\u5728\u8fd9\u4e00\u5207\u4e4b\u4e0a\uff0c\u4ed6\u5e94\u8be5\u662f\u4e2a<strong>\u6b63\u76f4\u8bda\u5b9e<\/strong>\u7684\u4eba\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Don\u2019t partner with cynics and pessimists. Their beliefs are self-fulfilling.<\/p>\n<blockquote>\n<p>\u4e0d\u8981\u548c\u6124\u4e16\u5ac9\u4fd7\u8005\u548c\u60b2\u89c2\u4e3b\u4e49\u8005\u5408\u4f5c\uff0c\u56e0\u4e3a\u4ed6\u4eec\u4f1a\u4efb\u7531\u574f\u4e8b\u53d1\u751f\uff0c\u4ee5\u6b64\u8bc1\u660e\u4ed6\u4eec\u7684\u8d1f\u9762\u770b\u6cd5\u662f\u6b63\u786e\u7684\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Learn to sell. Learn to build. If you can do both, you will be unstoppable.<\/p>\n<blockquote>\n<p>\u5b66\u4f1a\u5982\u4f55\u9500\u552e\uff0c\u5b66\u4f1a\u5982\u4f55\u521b\u5efa\u3002\u5982\u679c\u4f60\u540c\u65f6\u80fd\u505a\u5230\u8fd9\u4e24\u4ef6\u4e8b\uff0c\u4f60\u7684\u6210\u529f\u5c06\u65e0\u53ef\u963b\u6321\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Arm yourself with specific knowledge, accountability, and leverage.<\/p>\n<blockquote>\n<p>\u7528\u72ec\u5230<strong>\u77e5\u8bc6\uff0c\u8d23\u4efb\u611f\u548c<\/strong>\u6760\u6746\u6b66\u88c5\u81ea\u5df1\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Specific knowledge is knowledge that you cannot be trained for. If society can train you, it can train someone else, and replace you.<\/p>\n<blockquote>\n<p><strong>\u72ec\u5230\u77e5\u8bc6<\/strong>\u662f\u90a3\u79cd\u4e0d\u53ef\u4ee5\u901a\u8fc7\u57f9\u8bad\u800c\u83b7\u5f97\u7684\u77e5\u8bc6\u3002\u8fd9\u662f\u56e0\u4e3a\uff0c\u5982\u679c\u8fd9\u79cd\u77e5\u8bc6\u53ef\u4ee5\u7ecf\u7531\u57f9\u8bad\u800c\u5f97\uff0c\u90a3\u4e48\u5176\u4ed6\u4eba\u540c\u6837\u4e5f\u53ef\u4ee5\uff0c\u5e76\u4e14\u4ee5\u6b64\u53d6\u4ee3\u4f60\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Specific knowledge is found by pursuing your genuine curiosity and passion rather than whatever is hot right now.<\/p>\n<blockquote>\n<p>\u5728\u771f\u6b63\u7684\u597d\u5947\u5fc3\u548c\u70ed\u60c5\u9a71\u4f7f\u4f60\u524d\u8fdb\u7684\u8def\u4e0a\uff0c\u4f60\u66f4\u6709\u53ef\u80fd\u83b7\u5f97\u72ec\u5230\u77e5\u8bc6\uff0c\u800c\u4e0d\u662f\u5728\u8ffd\u9010\u6f6e\u6d41\u70ed\u70b9\u7684\u95fb\u98ce\u8d77\u821e\u811a\u6b65\u91cc\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Building specific knowledge will feel like play to you but will look like work to others.<\/p>\n<blockquote>\n<p>\u521b\u5efa\u72ec\u5230\u77e5\u8bc6\u7684\u8fc7\u7a0b\u5bf9\u4e8e\u4f60\u5c31\u50cf\u662f\u5728\u73a9\uff0c\u800c\u5bf9\u4e8e\u522b\u4eba\u5219\u50cf\u662f\u5de5\u4f5c\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>When specific knowledge is taught, it\u2019s through apprenticeships, not schools.<\/p>\n<blockquote>\n<p>\u4e0d\u80fd\u901a\u8fc7\u5b66\u6821\u6559\u80b2\u6559\u4f1a\u4e00\u4e2a\u4eba\u72ec\u5230\u77e5\u8bc6\uff0c\u5b83\u53ea\u80fd\u901a\u8fc7<strong>\u5b66\u5f92\u5236<\/strong>\u53e3\u4f20\u8eab\u6559\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Specific knowledge is often highly technical or creative. It cannot be outsourced or automated.<\/p>\n<blockquote>\n<p>\u72ec\u5230\u77e5\u8bc6\u901a\u5e38\u6781\u5bcc\u6280\u672f\u6027\u548c\u521b\u9020\u6027\uff0c\u56e0\u6b64\u5b83\u4e0d\u80fd\u88ab\u5916\u5305\u6216\u81ea\u52a8\u5b9e\u73b0\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Embrace accountability, and take business risks under your own name. Society will reward you with responsibility, equity, and leverage.<\/p>\n<blockquote>\n<p>\u62e5\u62b1\u8d23\u4efb\u611f\uff0c\u62bc\u4e0a\u81ea\u5df1\u7684\u58f0\u8a89\u4ee5\u627f\u62c5\u5546\u4e1a\u98ce\u9669\u3002\u793e\u4f1a\u4e5f\u4f1a\u4ee5\u8d23\u4efb\uff0c\u4ea7\u6743\u548c\u6760\u6746\u4f5c\u4e3a\u56de\u62a5\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>The most accountable people have singular, public, and risky brands: Oprah, Trump, Kanye, Elon.<\/p>\n<blockquote>\n<p>\u6700\u5177\u8d23\u4efb\u611f\u7684\u4eba\u90fd\u5177\u6709\u72ec\u4e00\u65e0\u4e8c\u7684\u3001\u4e16\u4eba\u7686\u77e5\u7684\u3001\u6562\u4e8e\u5192\u9669\u7684\u4e2a\u6027\u7279\u5f81\uff0c\u5982\u5965\u666e\u62c9\u3001\u5ddd\u666e\u3001\u574e\u8036\u3001\u57c3\u9686\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>&ldquo;Give me a lever long enough, and a place to stand, and I will move the earth.&quot;\u2014 Archimedes<\/p>\n<blockquote>\n<p>\u53ea\u8981\u7ed9\u6211\u4e00\u6839\u8db3\u591f\u957f\u7684\u6760\u6746\uff0c\u4e00\u5904\u53ef\u4ee5\u7acb\u8db3\u7684\u5730\u65b9\uff0c\u6211\u5c31\u80fd\u64ac\u8d77\u5730\u7403\u3002\u2014\u2014\u963f\u57fa\u7c73\u5fb7<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Fortunes require leverage. Business leverage comes from capital, people, and products with no marginal cost of replication (code and media).<\/p>\n<blockquote>\n<p>\u8d22\u5bcc\u589e\u957f\u9700\u8981\u4f7f\u7528\u6760\u6746\u3002\u5546\u4e1a\u6760\u6746\u6709\u4e09\u4e2a\u6765\u6e90\uff1a1\u3001\u8d44\u672c\uff1b2\u3001\u4eba\u529b\uff1b3\u3001\u590d\u5236\u8d77\u6765\u8fb9\u9645\u6210\u672c\u4e3a\u96f6\u7684\u4ea7\u54c1\uff08\u5982\uff1a\u4ee3\u7801\u548c\u5a92\u4f53\uff09\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Capital means money. To raise money, apply your specific knowledge, with accountability, and show resulting good judgment.<\/p>\n<blockquote>\n<p>\u8d44\u672c\u7684\u610f\u601d\u5c31\u662f\u94b1\u3002\u60f3\u8981\u878d\u8d44\uff0c\u90a3\u5c31\u8fd0\u7528\u4f60\u7684\u72ec\u5230\u77e5\u8bc6\uff0c\u914d\u5408\u4f60\u8d23\u4efb\u611f\uff0c\u5c55\u793a\u51fa\u4f60\u826f\u597d\u7684\u5224\u65ad\u529b\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Labor means people working for you. It\u2019s the oldest and most fought-over form of leverage. Labor leverage will impress your parents, but don\u2019t waste your life chasing it.<\/p>\n<blockquote>\n<p>\u4eba\u529b\u6307\u7684\u5c31\u662f\u4e3a\u4f60\u5e72\u6d3b\u7684\u4eba\uff0c\u5b83\u662f\u6700\u53e4\u8001\u4e5f\u662f\u4e89\u593a\u6700\u6fc0\u70c8\u7684\u6760\u6746\u3002\u4eba\u529b\u6760\u6746\u4f1a\u8ba9\u4f60\u7236\u6bcd\u56e0\u4e3a\u4f60\u624b\u4e0b\u6709\u8bb8\u591a\u4eba\u4e3a\u4f60\u5de5\u4f5c\u800c\u611f\u5230\u9a84\u50b2\uff0c\u4f46\u4f60\u4e0d\u8981\u6d6a\u8d39\u751f\u547d\u53bb\u8ffd\u6c42\u8fd9\u4e00\u70b9\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Capital and labor are permissioned leverage. Everyone is chasing capital, but someone has to give it to you. Everyone is trying to lead, but someone has to follow you.<\/p>\n<blockquote>\n<p>\u8d44\u672c\u548c\u52b3\u52a8\u529b\u662f\u9700\u8981\u5f81\u5f97\u8bb8\u53ef\u624d\u80fd\u4f7f\u7528\u7684\u6760\u6746\u3002\u6bcf\u4e2a\u4eba\u90fd\u5728\u8ffd\u9010\u8d44\u672c\uff0c\u4f46\u603b\u5f97\u6709\u4e2a\u4ec0\u4e48\u4eba\u7ed9\u4f60\u624d\u884c\uff1b\u6bcf\u4e2a\u4eba\u90fd\u60f3\u8981\u9886\u5bfc\u5176\u5b83\u4eba\uff0c\u4f46\u603b\u5f97\u6709\u4ec0\u4e48\u4eba\u613f\u610f\u8ddf\u7740\u4f60\u624d\u884c\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Code and media are permissionless leverage. They\u2019re the leverage behind the newly rich. You can create software and media that works for you while you sleep.<\/p>\n<blockquote>\n<p>\u4ee3\u7801\u548c\u5a92\u4f53\u662f\u65e0\u9700\u8981\u8bb8\u53ef\u5373\u53ef\u4f7f\u7528\u7684\u6760\u6746\u3002\u5b83\u4eec\u662f\u65b0\u8d35\u4eba\u7fa4\u80cc\u540e\u7684\u6760\u6746\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u81ea\u5df1\u521b\u5efa\u7684\u8f6f\u4ef6\u548c\u5a92\u4f53\uff0c\u5728\u7761\u89c9\u65f6\u4ecd\u7136\u4e3a\u4f60\u5e72\u6d3b\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>An army of robots is freely available \u2014 it\u2019s just packed in data centers for heat and space efficiency. Use it.<\/p>\n<blockquote>\n<p>\u4e00\u652f\u673a\u5668\u4eba\u519b\u56e2\u5df2\u7ecf\u96c6\u7ed3\u5f85\u547d\uff0c\u53ea\u662f\u4e3a\u4e86\u8282\u7ea6\u7a7a\u95f4\u548c\u70ed\u6548\u80fd\uff0c\u5b83\u4eec\u88ab\u6253\u5305\u653e\u8fdb\u6570\u636e\u4e2d\u5fc3\u3002\u53bb\u7528\u5427\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>If you can\u2019t code, write books and blogs, record videos and podcasts.<\/p>\n<blockquote>\n<p>\u5982\u679c\u4f60\u4e0d\u4f1a\u7f16\u7a0b\uff0c\u90a3\u4f60\u8fd8\u53ef\u4ee5\u5199\u4e66\u548c\u535a\u5ba2\uff0c\u6216\u8005\u505a\u89c6\u9891\u6216\u8005\u97f3\u9891\u8282\u76ee\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Leverage is a force multiplier for your judgement.<\/p>\n<blockquote>\n<p>\u6760\u6746\u80fd\u591f\u6210\u500d\u5730\u653e\u5927\u4f60\u7684\u5224\u65ad\u529b\uff08\u6240\u4ea7\u751f\u7684\u6548\u80fd\uff09\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Judgement requires experience, but can be built faster by learning foundational skills.<\/p>\n<blockquote>\n<p>\u5224\u65ad\u529b\u9700\u8981\u7ecf\u9a8c\uff0c\u4f46\u5b83\u53ef\u4ee5\u901a\u8fc7\u5b66\u4e60\u57fa\u672c\u6280\u80fd\u7684\u65b9\u6cd5\u66f4\u5feb\u901f\u5730\u5efa\u7acb\u8d77\u6765\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>There is no skill called \u201cbusiness.\u201d Avoid business magazines and business classes.<\/p>\n<blockquote>\n<p>\u5e76\u4e0d\u5b58\u5728\u4e00\u79cd\u53eb\u505a \u201c\u5546\u4e1a\u201d \u7684\u80fd\u529b\u3002\u5c3d\u91cf\u907f\u5f00\u5546\u4e1a\u6742\u5fd7\u548c\u5546\u4e1a\u8bfe\u7a0b\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Study microeconomics, game theory, psychology, persuasion, ethics, mathematics, and computers.<\/p>\n<blockquote>\n<p>\u53bb\u5b66\u4e60\u5fae\u89c2\u7ecf\u6d4e\u5b66\u3001\u535a\u5f08\u8bba\u3001\u5fc3\u7406\u5b66\u3001\u8bf4\u670d\u672f\u3001\u4f26\u7406\u5b66\u3001\u6570\u5b66\u548c\u8ba1\u7b97\u673a\u79d1\u5b66\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Reading is faster than listening. Doing is faster than watching.<\/p>\n<blockquote>\n<p>\u8bfb\u6bd4\u542c\u5feb\uff0c\u505a\u6bd4\u770b\u5feb\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>You should be too busy to &ldquo;do coffee&rdquo;, while still keeping an uncluttered calendar.<\/p>\n<blockquote>\n<p>\u4f60\u5e94\u8be5\u5fd9\u5f97\u6ca1\u6709\u793e\u4ea4\u7684\u65f6\u95f4\u624d\u5bf9\uff0c\u4e0e\u6b64\u540c\u65f6\u4f60\u5e94\u8be5\u59cb\u7ec8\u4fdd\u8bc1\u65e5\u7a0b\u5b89\u6392\u4e95\u4e95\u6709\u6761\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Set and enforce an aspirational personal hourly rate. If fixing a problem will save less than your hourly rate, ignore it. If outsourcing a task will cost less than your hourly rate, outsource it.<\/p>\n<blockquote>\n<p>\u4f60\u5e94\u8be5\u4e3a\u81ea\u5df1\u8bbe\u5b9a\u4e00\u4e2a\u6709\u62b1\u8d1f\u7684\u4e2a\u4eba\u65f6\u85aa\u6570\uff0c\u5e76\u4e14\u575a\u6301\u6267\u884c\u3002\u5982\u679c\u89e3\u51b3\u4e00\u4e2a\u95ee\u9898\u6240\u80fd\u8282\u7701\u4e0b\u6765\u7684\u6210\u672c\u4f4e\u4e8e\u4f60\u7684\u4e2a\u4eba\u65f6\u85aa\uff0c\u90a3\u5c31\u5ffd\u7565\u8fd9\u4e2a\u95ee\u9898\u597d\u4e86\uff1b\u5982\u679c\u4e00\u9879\u4efb\u52a1\u7684\u5916\u5305\u6210\u672c\u4f4e\u4e8e\u4f60\u7684\u4e2a\u4eba\u65f6\u85aa\uff0c\u5c31\u628a\u5b83\u5916\u5305\u51fa\u53bb\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Work as hard as you can. Even though who you work with and what you work on are more important than how hard you work.<\/p>\n<blockquote>\n<p>\u5c3d\u7ba1\u4f60\u8ddf\u8c01\u4e00\u8d77\u5de5\u4f5c\u3001\u505a\u4ec0\u4e48\u5de5\u4f5c\uff0c\u8981\u8fdc\u6bd4\u4f60\u7684\u52aa\u529b\u7a0b\u5ea6\u66f4\u52a0\u91cd\u8981\u3002\u4f46\u8fd8\u662f\u8981\u503e\u5c3d\u5168\u529b\u53bb\u5de5\u4f5c\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Become the best in the world at what you do. Keep redefining what you do until this is true.<\/p>\n<blockquote>\n<p>\u4f60\u6240\u505a\u7684\u4e8b\u60c5\uff0c\u8981\u52aa\u529b\u505a\u5230\u4e16\u754c\u6700\u597d\u3002\u4e0d\u65ad\u91cd\u65b0\u5b9a\u4e49\u4f60\u5728\u505a\u4ec0\u4e48\uff0c\u76f4\u5230\u771f\u7684\u505a\u5230\u4e16\u754c\u6700\u597d\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>There are no get rich quick schemes. That\u2019s just someone else getting rich off you.<\/p>\n<blockquote>\n<p>\u8fd9\u4e2a\u4e16\u754c\u4e0a\u5e76\u6ca1\u6709\u5feb\u901f\u8d5a\u94b1\u81f4\u5bcc\u7684\u65b9\u6cd5\uff0c\u5982\u679c\u4f60\u60f3\u8981\u627e\u5bfb\u8fd9\u79cd\u65b9\u6cd5\uff0c\u90a3\u5b83\u53ea\u4f1a\u8ba9\u522b\u4eba\u4ece\u4f60\u8eab\u4e0a\u8d5a\u94b1\u81f4\u5bcc\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>Apply specific knowledge, with leverage, and eventually you will get what you deserve.<\/p>\n<blockquote>\n<p>\u8fd0\u7528\u4f60\u7684\u72ec\u5230\u77e5\u8bc6\uff0c\u914d\u5408\u4e0a\u6760\u6746\uff0c\u6700\u7ec8\u4f60\u4f1a\u5f97\u5230\u4f60\u5e94\u8be5\u5f97\u5230\u7684\u4e1c\u897f\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>When you\u2019re finally wealthy, you\u2019ll realize that it wasn\u2019t what you were seeking in the first place. But that\u2019s for another day.<\/p>\n<blockquote>\n<p>\u7ec8\u6709\u4e00\u5929\u5f53\u4f60\u53d8\u5f97\u5bcc\u6709\uff0c\u4f60\u4f1a\u53d1\u73b0\u90a3\u4e00\u5207\u5e76\u4e0d\u662f\u4f60\u6700\u5f00\u59cb\u60f3\u8981\u7684\u4e1c\u897f\u3002\u4f46\u662f\u90a3\u5c31\u662f\u53e6\u5916\u4e00\u56de\u4e8b\u4e86\u3002<\/p>\n<\/blockquote>\n<\/li>\n<\/ol>\n<h2 id=\"\u8bd1\u8005\u6ce8\u91ca\">\u8bd1\u8005\u6ce8\u91ca<\/h2>\n<ul>\n<li>\n<p>\u8d22\u5bcc\u5c31\u662f\u4f60\u7761\u7740\u89c9\uff0c\u4f60\u7684\u8d44\u4ea7\u4e5f\u5728\u4e3a\u4f60\u7ee7\u7eed\u8d5a\u94b1\u3002\u8fd9\u662f\u4e00\u4e2a\u8d8a\u6765\u8d8a\u88ab\u5e7f\u6cdb\u63a5\u53d7\u7684\u5b9a\u4e49\u3002Naval Ravikant \u662f\u7845\u8c37\u72c2\u70ed\u7684\u6570\u5b57\u8d27\u5e01\u652f\u6301\u8005\uff0c\u6240\u4ee5\uff0c\u4ed6\u7684\u8bdd\u53e6\u6709\u6240\u6307\u3002\u4ece\u524d\u540e\u6587\u6765\u770b\uff0c\u4ed6\u6240\u8c13\u7684\u8d44\u4ea7\u5e76\u4e0d\u7b49\u4e8e\u662f\u4f20\u7edf\u610f\u4e49\u4e0a\u7684\u623f\u4ea7\u3001\u80a1\u7968\u3001\u6536\u85cf\uff0c\u800c\u662f\u504f\u5411\u4e8e\u4ed6\u53cd\u590d\u63d0\u53ca\u7684\uff1a\u8f6f\u4ef6\u548c\u5a92\u4f53\u3002<\/p>\n<\/li>\n<li>\n<p>\u51fa\u79df\u65f6\u95f4\u6982\u5ff5\uff0c\u8bb8\u591a\u4eba\u7406\u89e3\u4e3a\u6253\u5de5\uff0c\u8ba4\u4e3a\u6253\u5de5\u5c31\u662f\u51fa\u79df\u81ea\u5df1\u7684\u65f6\u95f4\u4ee5\u6362\u53d6\u91d1\u94b1\u3002\u5176\u5b9e\u5e76\u975e\u5982\u6b64\uff0cNaval \u6240\u6307\u7684\u51fa\u79df\u65f6\u95f4\u6982\u5ff5\uff0c\u6307\u7684\u662f\u4e00\u4e2a\u4eba\u7684\u8d22\u5bcc\u589e\u957f\uff0c\u662f\u5426\u76f4\u63a5\u5173\u7cfb\u5230\u4ed6\u7684\u65f6\u95f4\u3002\u4e00\u4e2a\u5c0f\u5356\u90e8\u7684\u8001\u677f\uff0c\u4ed6\u5e76\u4e0d\u4e3a\u8c01\u6253\u5de5\uff0c\u4f46\u662f\u4ed6\u7684\u8d22\u5bcc\u589e\u957f\u9700\u8981\u4ed6\u957f\u65f6\u95f4\u5b88\u5728\u5e97\u91cc\uff0c\u56e0\u6b64\uff0c\u4ed6\u4f9d\u7136\u662f\u51fa\u79df\u65f6\u95f4\u6362\u94b1\u3002\u4f46\u4e00\u4e2a\u6dd8\u5b9d\u70b9\u5361\u5e97\u8001\u677f\u5219\u4e0d\u540c\uff0c\u4ed6\u7684\u70b9\u5361\u9500\u552e\u662f\u5168\u81ea\u52a8\u7684\uff0c\u4e0d\u9700\u8981 24 \u5c0f\u65f6\u5b88\u7740\uff0c\u800c\u4e14\u4e5f\u4e0d\u9700\u8981\u53ea\u505a\u8fd9\u4e00\u6837\u751f\u610f\u3002\u8fd9\u5c31\u662f Naval \u6240\u8c13\u4e92\u8054\u7f51\u62d3\u5bbd\u4e86\u4e2a\u4eba\u804c\u4e1a\u751f\u6daf\u7684\u4e00\u4e2a\u4f8b\u5b50\u3002<\/p>\n<\/li>\n<li>\n<p><code>equity<\/code> \u6211\u7ffb\u8bd1\u4e3a\u4ea7\u6743\uff0c\u4e0d\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u7ffb\u6cd5\u3002\u4f46\u662f Naval \u524d\u6587\u63d0\u5230 assets\uff0c\u5f88\u660e\u663e\uff0c\u4f5c\u4e3a\u6295\u8d44\u4eba\u4ed6\u975e\u5e38\u6e05\u695a\u5730\u77e5\u9053\u8fd9\u4e24\u4e2a\u5b57\u773c\u4e4b\u95f4\u7684\u533a\u522b\u3002equity \u65e0\u8bba\u662f\u7ffb\u8bd1\u4e3a\u80a1\u7968\u3001\u6743\u76ca\u6216\u8005\u662f\u8d44\u4ea7\uff0c\u539f\u6587\u8bf4 <code>\u201cYou must own equity \u2014 a piece of a business \u2014 to gain your financial freedom.\u201d<\/code>\uff0c\u8fd9\u662f\u548c\u51fa\u79df\u65f6\u95f4\u6982\u5ff5\u505a\u5bf9\u5e94\u7684\u3002\u51fa\u79df\u65f6\u95f4\u7684\u4eba\uff0c\u5728\u5546\u4e1a\u94fe\u6761\u91cc\u4f5c\u4e3a\u751f\u4ea7\u8d44\u6599\u51fa\u73b0\uff0c\u4e0d\u62e5\u6709\u4efb\u4f55\u4ea7\u6743\uff0c\u4e5f\u5c31\u65e0\u6cd5\u901a\u8fc7\u5546\u4e1a\u884c\u4e3a\u83b7\u5229\uff0c\u6240\u4ee5\uff0c\u6211\u8fd9\u91cc\u52c9\u5f3a\u7ffb\u8bd1\u4e3a\u4ea7\u6743\u3002<\/p>\n<\/li>\n<li>\n<p><code>specific knowledge<\/code> \u6211\u7ffb\u8bd1\u4e3a\u72ec\u5230\u77e5\u8bc6\uff0c\u6ca1\u6709\u7ffb\u8bd1\u4e3a\u7279\u5b9a\u77e5\u8bc6\u3001\u4e13\u4e1a\u77e5\u8bc6\u6216\u8005\u662f\u7279\u6b8a\u77e5\u8bc6\u3002\u539f\u56e0\u662f\u5728\u6211\u7684\u7406\u89e3\u4e2d\uff0cspecific knowledge \u4e0d\u662f\u4e66\u672c\u77e5\u8bc6\uff0c\u4e5f\u4e0d\u662f\u5b66\u6821\u6559\u6388\u7684\u77e5\u8bc6\uff0c\u66f4\u4e0d\u53ef\u80fd\u5728\u7f51\u4e0a\u514d\u8d39\u83b7\u53d6\u3002\u4e00\u65b9\u9762\uff0c\u5b83\u53ea\u80fd\u63d0\u4f9b\u81ea\u5df1\u5b9e\u8df5\u6765\u83b7\u53d6\uff1b\u53e6\u4e00\u65b9\u9762\uff0c\u5b83\u53ea\u80fd\u901a\u8fc7\u524d\u4eba\u53e3\u8033\u76f8\u4f20\u3002\u8fd9\u79cd\u77e5\u8bc6\u662f\u505a\u6210\u4e00\u4ef6\u4e8b\u60c5\u7684\u5173\u952e\uff0c\u5c5e\u4e8e\u77e5\u8bc6\u4f53\u7cfb\u4e2d\u4e0d\u5171\u7684\u90a3\u4e00\u90e8\u5206\u3002\u6240\u4ee5\uff0c\u6211\u7ffb\u8bd1\u4e3a\u72ec\u5230\u77e5\u8bc6\u3002<\/p>\n<\/li>\n<li>\n<p><code>\u201cGive me a lever long enough, and a place to stand, and I will move the earth.\u201d \u2014 Archimedes<\/code> \u8fd9\u8bdd\u4e0d\u50cf\u662f\u963f\u57fa\u7c73\u5fb7\u8bf4\u7684\u3002\u66f4\u50cf\u662f\u4e00\u6b21\u62ac\u6760\u7684\u7ed3\u679c\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\u201c\u7ed9\u6211\u4e00\u4e2a\u652f\u70b9\uff0c\u6211\u5c31\u80fd\u64ac\u8d77\u5730\u7403\uff01\u201d\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u201c\u90a3\u4e48\uff0c\u60a8\u7ad9\u5728\u54ea\u513f\u5462\uff1f\u201d\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u201c\u597d\u5427\uff0c\u7ed9\u6211\u4e00\u4e2a\u652f\u70b9\uff0c\u518d\u7ed9\u6211\u4e00\u4e2a\u7ad9\u7acb\u7684\u5730\u65b9\uff0c\u6211\u5c31\u80fd\u64ac\u8d77\u5730\u7403\u3002\u201d\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u201c\u90a3\u4e48\uff0c\u60a8\u7528\u7a7a\u6c14\u5c31\u80fd\u64ac\u8d77\u5730\u7403\u4e86\uff1f\u201d\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u201c\u597d\u5427\uff0c\u7ed9\u6211\u4e00\u6839\u8db3\u591f\u957f\u7684\u6760\u6746\uff0c\u4e00\u5904\u53ef\u4ee5\u7acb\u8db3\u7684\u5730\u65b9\uff0c\u6211\u5c31\u53ef\u4ee5\u7fd8\u8d77\u5730\u7403\uff01\u201d\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u201c\u90a3\u4e48\uff0c\u963f\u57fa\u7c73\u5fb7\u5148\u751f\uff0c\u652f\u70b9\u53c8\u4e0d\u9700\u8981\u4e86\u5417\uff1f\u201d\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u201c\u6eda\uff01\u201d\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><\/li>\n<li>\n<p><code>accountability<\/code> \u6211\u672c\u60f3\u7ffb\u8bd1\u4e3a\u201c\u9760\u8c31\u7a0b\u5ea6\u201d\uff0c\u60f3\u60f3\u8fd8\u662f\u7b97\u4e86\u3002<\/p>\n<\/li>\n<li>\n<p>\u53f7\u79f0\u662f \u201c\u56db\u5341\u6761\u8bed\u5f55\u201d\uff0c\u4f46\u662f\u6211\u5c31\u627e\u89c1\u4e86 39 \u6761\u3002<\/p>\n<\/li>\n<li>\n<p>\u7ed3\u5408\u4e0a\u4e0b\u6587\u770b\uff0c<code>Leverage<\/code> \u4e00\u8bcd\u59cb\u7ec8\u7ffb\u8bd1\u4e3a\u201c\u6760\u6746\u201d\uff0c\u5176\u5b9e\u4e5f\u4e0d\u5927\u5bf9\u5934\u3002Naval \u4e00\u518d\u5f3a\u8c03\u4ee3\u7801\u3001\u535a\u5ba2\u3001\u64ad\u5ba2\u3001\u89c6\u9891\u8282\u76ee\uff0c\u6211\u89c9\u5f97 <code>Leverage<\/code> \u5728\u4ed6\u90a3\u91cc\uff0c\u6709\u4e9b\u65f6\u5019\u5e94\u8be5\u76f8\u5f53\u4e8e\u662f\u4e2a\u4eba\u5f71\u54cd\u529b\u7684\u4ee3\u540d\u8bcd\uff0c\u6216\u8005\u53ef\u4ee5\u7b80\u5355\u7406\u89e3\u4e3a\u653e\u5927\u5668\u3002<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"\u962e\u4e00\u5cf0\u7684\u5206\u4eab\">\u962e\u4e00\u5cf0\u7684\u5206\u4eab<\/h2>\n<blockquote>\n<p>\u4ee5\u4e0b\u89c2\u70b9\u6765\u81ea <strong><a href=\"http:\/\/www.ruanyifeng.com\/blog\/2020\/05\/weekly-issue-107.html\">\u962e\u4e00\u5cf0<\/a><\/strong> \u7684\u5206\u4eab\uff1a<\/p>\n<\/blockquote>\n<p><strong>Naval Ravikant<\/strong> \u8ba4\u4e3a\uff0c\u81f4\u5bcc\u5176\u5b9e\u53ea\u9700\u8981\u4e24\u6b65\u3002<\/p>\n<p><strong>\u7b2c\u4e00\u6b65\uff1a\u627e\u5230\u201c\u4e2a\u4eba-\u5e02\u573a-\u4ea7\u54c1\u201d\u8fd9\u4e09\u8005\u4ea4\u53c9\u7684\u90a3\u4e2a\u5b9a\u4f4d\u3002<\/strong> \u4f60\u95ee\u95ee\u81ea\u5df1\uff0c\u4f60\u7684\u7ade\u4e89\u529b\u5728\u54ea\u91cc\uff1f\u5e02\u573a\u9700\u8981\u7684\u54ea\u4e00\u79cd\u4ea7\u54c1\uff0c\u53ef\u4ee5\u7528\u5230\u4f60\u7684\u8fd9\u79cd\u7ade\u4e89\u529b\uff1f\u8fd9\u5c31\u662f\u4f60\u7684\u5b9a\u4f4d\u3002<\/p>\n<p><strong>\u7b2c\u4e8c\u6b65\uff1a\u4f7f\u7528\u5404\u79cd\u6760\u6746\uff08leverage\uff09\uff0c\u4f7f\u5f97\u4f60\u7684\u4ea7\u54c1\u53ef\u4ee5\u670d\u52a1\u5c3d\u53ef\u80fd\u5927\u7684\u5e02\u573a\u3002<\/strong><\/p>\n<p>\u53ea\u8981\u505a\u5230\u4e0a\u9762\u8fd9\u4e8c\u6b65\uff0c\u5c31\u4f1a\u8d5a\u5230\u5927\u94b1\u3002<\/p>\n<p>\u6211\u89c9\u5f97\uff0c\u4ed6\u603b\u7ed3\u5f97\u5f88\u7cbe\u8f9f\u3002\u8d5a\u5927\u94b1\u7684\u5965\u79d8\u5c31\u662f\u5b9a\u4f4d\u548c\u6760\u6746\u8fd9\u4e24\u4ef6\u4e8b\u3002\u5f53\u5e02\u573a\u9700\u8981\u4f60\u7684\u4ea7\u54c1\u65f6\uff0c\u5982\u679c\u6709\u529e\u6cd5&quot;\u653e\u5927&quot;\u4ea7\u54c1\uff0c\u670d\u52a1\u66f4\u591a\u7684\u4eba\uff0c\u4f60\u5c31\u6210\u529f\u4e86\u3002<\/p>\n<p><strong>Naval Ravikant<\/strong> \u8bf4\uff0c<strong>\u4f20\u7edf\u7684\u6760\u6746\u662f\u52b3\u52a8\u529b\u548c\u8d44\u672c<\/strong>\u3002\u901a\u8fc7\u96c7\u4f63\u66f4\u591a\u7684\u5458\u5de5\u548c\u501f\u8d37\u66f4\u591a\u7684\u94b1\uff0c\u628a\u4e1a\u52a1\u653e\u5927\u3002\u4f46\u662f\uff0c<strong>\u4e92\u8054\u7f51\u65f6\u4ee3\uff0c\u65b0\u7684\u6760\u6746\u51fa\u73b0\u4e86\uff0c\u90a3\u5c31\u662f\u8f6f\u4ef6\u548c\u81ea\u5a92\u4f53<\/strong>\u3002<\/p>\n<p>\u53ea\u8981\u670d\u52a1\u5668\u5f00\u7740\uff0c\u8f6f\u4ef6\uff08\u5305\u62ec\u7f51\u7ad9\u548c App\uff09\u5c31\u80fd\u5e2e\u4f60\u5f00\u5c55\u4e1a\u52a1\uff0c\u670d\u52a1\u66f4\u591a\u7684\u4eba\u3002\u5a92\u4f53\u6760\u6746\u66f4\u7b80\u5355\uff0c\u53ea\u8981\u5199\u6587\u7ae0\u3001\u62cd\u89c6\u9891\u3001\u5f55\u64ad\u5ba2\uff0c\u653e\u5230\u7f51\u4e0a\u5c31\u53ef\u4ee5\u4e86\u3002\u53ea\u8981\u522b\u4eba\u770b\u5230\u8fd9\u4e9b\u5185\u5bb9\uff0c\u5c31\u7b49\u4e8e\u5e2e\u4f60\u653e\u5927\u4e86\u4e1a\u52a1\u3002<\/p>\n<p>\u8fd9\u4e24\u79cd\u65b0\u6760\u6746\uff0c\u6210\u672c\u66f4\u4f4e\uff0c\u9650\u5236\u6761\u4ef6\u66f4\u5c11\uff08\u4e0d\u9700\u8981\u5927\u91cf\u96c7\u4eba\uff0c\u4e5f\u4e0d\u9700\u8981\u8ddf\u94f6\u884c\u6253\u4ea4\u9053\uff09\uff0c\u56e0\u6b64\u662f\u66f4\u597d\u7684\u6760\u6746\u3002\u5982\u679c\u4f60\u628a\u56db\u79cd\u6760\u6746\u7ed3\u5408\u8d77\u6765\uff0c\u5c31\u80fd\u53d1\u6325\u6700\u5927\u7684\u5a01\u529b\u3002\u4e8b\u5b9e\u4e0a\uff0c\u90a3\u4e9b\u4e92\u8054\u7f51\u5de8\u5934\u90fd\u662f\u8fd9\u56db\u79cd\u6760\u6746\u7684\u7ed3\u5408\uff0c\u96be\u602a\u5b83\u4eec\u90fd\u8d5a\u5230\u4e86\u5927\u94b1\u3002<\/p>\n<h2 id=\"\u7248\u6743\u8bf4\u660e\">\u7248\u6743\u8bf4\u660e<\/h2>\n<blockquote>\n<p>\u672c\u6587\u4e3a<strong>\u8f6c\u8f7d\uff0c\u975e\u539f\u521b<\/strong>\u3002\u5df2\u5728\u6587\u4e2d\u5f15\u7528\u5904\u6ce8\u660e\u4f5c\u8005\u53ca\u539f\u94fe\u63a5\u3002\u611f\u8c22\u4ee5\u4e0a\u4e09\u4f4d\u4f5c\u8005\u7684\u5206\u4eab\u3002<\/p>\n<\/blockquote>"},{"title":"MySQL \u6e90\u7801\u9605\u8bfb \u2014\u2014 macOS VSCode \u7f16\u8bd1\u8c03\u8bd5 MySQL 5.7","link":"https:\/\/shockerli.net\/post\/mysql-source-macos-vscode-debug-5-7\/","pubDate":"Fri, 27 Aug 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/mysql-source-macos-vscode-debug-5-7\/","description":"<blockquote>\n<p>\u6700\u5f00\u59cb\u7528\u7684 CLion\uff0c\u4f46\u7535\u8111\u625b\u4e0d\u4f4f\uff0c\u6700\u7ec8\u6362\u6210 VSCode\uff0c\u4e16\u754c\u77ac\u95f4\u6e05\u51c0\u4e86\ud83d\ude01<\/p>\n<p>macOS + CLion \u7248\u672c\u770b <a href=\"..\/mysql-source-macos-clion-debug-5-7\">\u8fd9\u91cc<\/a><\/p>\n<\/blockquote>\n<h2 id=\"\u73af\u5883\">\u73af\u5883<\/h2>\n<ul>\n<li>macOS Big Sur 11.5.2<\/li>\n<li>VSCode 1.59.1<\/li>\n<li>MySQL 5.7.35<\/li>\n<\/ul>\n<h2 id=\"\u4f9d\u8d56\">\u4f9d\u8d56<\/h2>\n<blockquote>\n<p>\u5982\u679c\u4ee5\u4e0b\u8f6f\u4ef6\u672a\u5b89\u88c5\u6216\u7248\u672c\u4e0d\u7b26\u5408\uff0c\u4f7f\u7528 <code>brew<\/code> \u5b89\u88c5\u5373\u53ef<\/p>\n<\/blockquote>\n<ul>\n<li>CMake<\/li>\n<li>g++<\/li>\n<li>openssl 1.1<\/li>\n<\/ul>\n<h2 id=\"vscode-\u63d2\u4ef6\">VSCode \u63d2\u4ef6<\/h2>\n<blockquote>\n<p>\u5728 VSCode \u5e94\u7528\u5546\u5e97\u641c\u7d22\u5e76\u5b89\u88c5\u4ee5\u4e0b\u63d2\u4ef6<\/p>\n<\/blockquote>\n<ul>\n<li>C\/C++<\/li>\n<li>C\/C++ Clang Command Adapter<\/li>\n<li>CodeLLDB<\/li>\n<li>CMake Tools<\/li>\n<\/ul>\n<h2 id=\"\u4e0b\u8f7d\u6e90\u7801\">\u4e0b\u8f7d\u6e90\u7801<\/h2>\n<blockquote>\n<p>\u4ece<a href=\"https:\/\/dev.mysql.com\/downloads\/mysql\/\">\u5b98\u7f51<\/a>\u4e0b\u8f7d\u643a\u5e26 <code>boost<\/code> \u7248\u672c\u6e90\u7801<\/p>\n<p>\u4e0b\u8f7d\u94fe\u63a5\uff1a<a href=\"https:\/\/dev.mysql.com\/get\/Downloads\/MySQL-5.7\/mysql-boost-5.7.35.tar.gz\">https:\/\/dev.mysql.com\/get\/Downloads\/MySQL-5.7\/mysql-boost-5.7.35.tar.gz<\/a><\/p>\n<p>\u4e5f\u53ef\u4ee5\u4ece <a href=\"https:\/\/github.com\/mysql\/mysql-server\">GitHub<\/a> \u4e0a\u514b\u9686\u4ee3\u7801\uff0c\u5207\u6362\u5230\u6307\u5b9a TAG \u6216\u5206\u652f\u3002<\/p>\n<\/blockquote>\n<p>\u89e3\u538b\u6e90\u7801\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">tar -zxf mysql-boost-5.7.35.tar.gz\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> mysql-5.7.35\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"patch-\u6e90\u7801\">Patch \u6e90\u7801<\/h2>\n<p>\u5982\u679c <code>MySQL &lt;= 8.0.21<\/code>\uff0c\u5219\u9700\u8981\u6267\u884c\u4ee5\u4e0b\u811a\u672c Patch \u6e90\u7801\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">mv VERSION MYSQL_VERSION\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sed -i <span class=\"s1\">&#39;&#39;<\/span> <span class=\"s1\">&#39;s|${CMAKE_SOURCE_DIR}\/VERSION|${CMAKE_SOURCE_DIR}\/MYSQL_VERSION|g&#39;<\/span> cmake\/mysql_version.cmake\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5177\u4f53\u539f\u56e0\uff0c\u53ef\u53c2\u8003\u6587\u7ae0\uff1a<a href=\"..\/mysql-source-version-conflict-in-cpp-11\">MySQL \u6e90\u7801 \u2014\u2014 \u95ee\u9898 expanded from macro MYSQL_VERSION_MAJOR<\/a><\/p>\n<h2 id=\"\u521b\u5efa\u76ee\u5f55\">\u521b\u5efa\u76ee\u5f55<\/h2>\n<blockquote>\n<p>\u7f16\u8bd1\u3001\u5b89\u88c5\u3001\u6570\u636e\u3001\u914d\u7f6e\u7b49\u90fd\u7edf\u4e00\u5230 <code>cmake-build-debug<\/code> \u76ee\u5f55\uff0c\u65b9\u4fbf\u7ba1\u7406\u3001\u4e0d\u4e0e\u5176\u4ed6\u51b2\u7a81<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">mkdir -p cmake-build-debug\/<span class=\"o\">{<\/span>data,etc<span class=\"o\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u7f16\u8bd1\">\u7f16\u8bd1<\/h2>\n<blockquote>\n<p>\u6709 2 \u79cd\u65b9\u5f0f\uff0c\u547d\u4ee4\u884c\u3001<code>CMake Tools<\/code><\/p>\n<p>\u63a8\u8350 <code>CMake Tools<\/code>\uff0c\u56e0\u4e3a\u540e\u7eed Debug \u90fd\u5728 <code>VSCode<\/code> \u4e2d\uff0c\u91cd\u65b0\u7f16\u8bd1\u6216\u5207\u6362\u7f16\u8bd1\u76ee\u6807\u4e5f\u65b9\u4fbf<\/p>\n<\/blockquote>\n<h3 id=\"cmake-tools\">CMake Tools<\/h3>\n<blockquote>\n<p>\u5173\u4e8e <code>CMake Tools<\/code> \u7684\u8be6\u7ec6\u914d\u7f6e\u548c\u7528\u6cd5\uff0c\u53c2\u8003\u5b98\u65b9\u6587\u6863\uff1a<a href=\"https:\/\/github.com\/microsoft\/vscode-cmake-tools\/tree\/main\/docs\">CMake Tools for Visual Studio Code documentation<\/a><\/p>\n<\/blockquote>\n<h4 id=\"\u914d\u7f6e\">\u914d\u7f6e<\/h4>\n<p>\u521b\u5efa\u6587\u4ef6 <code>.vscode\/settings.json<\/code>\uff0c\u5e76\u5199\u5165\u914d\u7f6e\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-json\" data-lang=\"json\"><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nt\">&#34;cmake.buildBeforeRun&#34;<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nt\">&#34;cmake.buildDirectory&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}\/cmake-build-debug\/build&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nt\">&#34;cmake.configureSettings&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&#34;WITH_DEBUG&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;1&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&#34;CMAKE_INSTALL_PREFIX&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}\/cmake-build-debug&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&#34;MYSQL_DATADIR&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}\/cmake-build-debug\/data&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&#34;SYSCONFDIR&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}\/cmake-build-debug\/etc&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&#34;MYSQL_TCP_PORT&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;3307&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&#34;MYSQL_UNIX_ADDR&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}\/cmake-build-debug\/data\/mysql-debug.sock&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&#34;WITH_BOOST&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}\/boost&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&#34;DOWNLOAD_BOOST&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;1&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nt\">&#34;DOWNLOAD_BOOST_TIMEOUT&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;600&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><code>\u67e5\u770b<\/code> &gt; <code>\u547d\u4ee4\u9762\u677f<\/code>\uff0c\u641c\u7d22<code>CMake<\/code>\uff0c\u627e\u5230<code>CMake: Configure<\/code>\u5e76\u56de\u8f66\u8fd0\u884c\uff1a\n<img src=\"media\/16299851417526.jpg\" alt=\"cmake-configure\"><\/p>\n<p>\u7b49\u5f85\u914d\u7f6e\u5b8c\u6210\uff0c\u8f93\u51fa\u4ee5\u4e0b\u65e5\u5fd7\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>main<span class=\"o\">]<\/span> Configuring folder: mysql-5.7.35 \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>proc<span class=\"o\">]<\/span> Executing command: \/usr\/local\/bin\/cmake --no-warn-unused-cli -DWITH_DEBUG:STRING<span class=\"o\">=<\/span><span class=\"m\">1<\/span> -DCMAKE_INSTALL_PREFIX:STRING<span class=\"o\">=<\/span>\/path\/to\/mysql-5.7.35\/cmake-build-debug -DMYSQL_DATADIR:STRING<span class=\"o\">=<\/span>\/path\/to\/mysql-5.7.35\/cmake-build-debug\/data -DSYSCONFDIR:STRING<span class=\"o\">=<\/span>\/path\/to\/mysql-5.7.35\/cmake-build-debug\/etc -DMYSQL_TCP_PORT:STRING<span class=\"o\">=<\/span><span class=\"m\">3307<\/span> -DMYSQL_UNIX_ADDR:STRING<span class=\"o\">=<\/span>\/path\/to\/mysql-5.7.35\/cmake-build-debug\/data\/mysql-debug.sock -DWITH_BOOST:STRING<span class=\"o\">=<\/span>\/path\/to\/mysql-5.7.35\/boost -DDOWNLOAD_BOOST:STRING<span class=\"o\">=<\/span><span class=\"m\">1<\/span> -DDOWNLOAD_BOOST_TIMEOUT:STRING<span class=\"o\">=<\/span><span class=\"m\">600<\/span> -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL<span class=\"o\">=<\/span>TRUE -DCMAKE_BUILD_TYPE:STRING<span class=\"o\">=<\/span>Debug -H\/path\/to\/mysql-5.7.35 -B\/path\/to\/mysql-5.7.35\/cmake-build-debug\/build -G <span class=\"s2\">&#34;Unix Makefiles&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u00b7\u00b7\u00b7\u4e2d\u95f4\u65e5\u5fd7\u7701\u7565\u00b7\u00b7\u00b7\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>cmake<span class=\"o\">]<\/span> -- Configuring <span class=\"k\">done<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>cmake<span class=\"o\">]<\/span> -- Generating <span class=\"k\">done<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>cmake<span class=\"o\">]<\/span> -- Build files have been written to: \/path\/to\/mysql-5.7.35\/cmake-build-debug\/build\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u7f16\u8bd1-1\">\u7f16\u8bd1<\/h4>\n<p><code>\u67e5\u770b<\/code> &gt; <code>\u547d\u4ee4\u9762\u677f<\/code>\uff0c\u641c\u7d22<code>CMake<\/code>\uff0c\u627e\u5230<code>CMake: Build Target<\/code>\u5e76\u56de\u8f66\u8fd0\u884c\uff1a\n<img src=\"media\/16299849017655.jpg\" alt=\"\u6784\u5efa\u76ee\u6807\"><\/p>\n<p><code>\u67e5\u770b<\/code> &gt; <code>\u547d\u4ee4\u9762\u677f<\/code>\uff0c\u641c\u7d22<code>mysqld<\/code>\uff0c\u627e\u5230<code>mysqld EXECUTABLE<\/code>\u5e76\u56de\u8f66\u8fd0\u884c\uff1a\n<img src=\"media\/16299849413543.jpg\" alt=\"\u9009\u62e9\u76ee\u6807\"><\/p>\n<p>\u7136\u540e\uff0c\u5c31\u5f00\u59cb\u7f16\u8bd1\u4e86\uff0c\u6700\u7ec8\u8f93\u51fa\u65e5\u5fd7\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>main<span class=\"o\">]<\/span> Building folder: mysql-5.7.35 mysqld\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>build<span class=\"o\">]<\/span> Starting build\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>proc<span class=\"o\">]<\/span> Executing command: \/usr\/local\/bin\/cmake --build \/path\/to\/mysql-5.7.35\/cmake-build-debug\/build --config Debug --target mysqld -j <span class=\"m\">6<\/span> --\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u00b7\u00b7\u00b7\u4e2d\u95f4\u65e5\u5fd7\u7701\u7565\u00b7\u00b7\u00b7\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>build<span class=\"o\">]<\/span> <span class=\"o\">[<\/span>100%<span class=\"o\">]<\/span> Built target mysqld\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>build<span class=\"o\">]<\/span> Build finished with <span class=\"nb\">exit<\/span> code <span class=\"m\">0<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u547d\u4ee4\u884c\">\u547d\u4ee4\u884c<\/h3>\n<p>\u5207\u6362\u5230 <code>cmake-build-debug<\/code> \u76ee\u5f55\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"nb\">cd<\/span> cmake-build-debug\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u914d\u7f6e-1\">\u914d\u7f6e<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">cmake .. <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-B.\/build <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DWITH_DEBUG<span class=\"o\">=<\/span><span class=\"m\">1<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DCMAKE_INSTALL_PREFIX<span class=\"o\">=<\/span>. <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DMYSQL_DATADIR<span class=\"o\">=<\/span>.\/data <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DSYSCONFDIR<span class=\"o\">=<\/span>.\/etc <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DMYSQL_TCP_PORT<span class=\"o\">=<\/span><span class=\"m\">3307<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DMYSQL_UNIX_ADDR<span class=\"o\">=<\/span>mysql-debug.sock <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DWITH_BOOST<span class=\"o\">=<\/span>..\/boost <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DDOWNLOAD_BOOST<span class=\"o\">=<\/span><span class=\"m\">1<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DDOWNLOAD_BOOST_TIMEOUT<span class=\"o\">=<\/span><span class=\"m\">60000<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u7f16\u8bd1-2\">\u7f16\u8bd1<\/h4>\n<blockquote>\n<ul>\n<li>\n<p><code>-j 3<\/code> \u8868\u793a3\u4e2a\u7ebf\u7a0b\uff0c\u63d0\u9ad8\u901f\u5ea6<\/p>\n<\/li>\n<li>\n<p><code>--build build<\/code> \u8868\u793a\u6784\u5efa<code>build<\/code>\u76ee\u5f55\uff0c\u6b64\u5904\u4e0e<code>-B.\/build<\/code>\u4fdd\u6301\u4e00\u81f4<\/p>\n<\/li>\n<li>\n<p><code>--target mysqld<\/code> \u8868\u793a\u53ea\u6784\u5efa<code>mysqld<\/code><\/p>\n<\/li>\n<\/ul>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">cmake --build build --target mysqld -j <span class=\"m\">3<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>Tips: <code>make<\/code> \u547d\u4ee4\u4f1a\u7f16\u8bd1\u6240\u6709\u76ee\u6807<\/p>\n<h2 id=\"\u521d\u59cb\u5316\u6570\u636e\u5e93\">\u521d\u59cb\u5316\u6570\u636e\u5e93<\/h2>\n<p>\u4ee5\u4e0b\u6b65\u9aa4\u5207\u6362\u5230 <code>cmake-build-debug<\/code> \u76ee\u5f55\u4e0b\u6267\u884c\uff1a<\/p>\n<ul>\n<li>MySQL \u914d\u7f6e\u6587\u4ef6<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">cat &gt; etc\/my.cnf <span class=\"s\">&lt;&lt;EOF\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">[mysqld]\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">port=3307\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">socket=mysql.sock\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">innodb_file_per_table=1\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">EOF<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4fee\u6539 <code>port<\/code> \u548c <code>socket<\/code> \u662f\u4e3a\u4e86\u907f\u514d\u4e0e\u672c\u673a\u6570\u636e\u5e93\u51b2\u7a81\u3002<\/p>\n<ul>\n<li>\u521d\u59cb\u5316\u6570\u636e\u5e93<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u4e0d\u643a\u5e26\u914d\u7f6e\u6587\u4ef6\uff0c\u56e0\u4e3aCMake\u65f6\u6307\u5b9a\u4e86SYSCONFDIR<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">build\/sql\/mysqld --initialize-insecure\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u4e5f\u53ef\u643a\u5e26\u6587\u4ef6\u8def\u5f84<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">build\/sql\/mysqld --defaults-file<span class=\"o\">=<\/span>etc\/my.cnf --initialize-insecure\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u914d\u7f6e\u8c03\u8bd5\u53c2\u6570\">\u914d\u7f6e\u8c03\u8bd5\u53c2\u6570<\/h2>\n<p>\u521b\u5efa\u6587\u4ef6 <code>.vscode\/launch.json<\/code>\uff0c\u5e76\u5199\u5165\u914d\u7f6e\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-json\" data-lang=\"json\"><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\">\/\/ \u4f7f\u7528 IntelliSense \u4e86\u89e3\u76f8\u5173\u5c5e\u6027\u3002 \n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"c1\">\/\/ \u60ac\u505c\u4ee5\u67e5\u770b\u73b0\u6709\u5c5e\u6027\u7684\u63cf\u8ff0\u3002\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"c1\">\/\/ \u6b32\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\uff0c\u8bf7\u8bbf\u95ee: https:\/\/go.microsoft.com\/fwlink\/?linkid=830387\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nt\">&#34;version&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;0.2.0&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nt\">&#34;configurations&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;lldb&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;request&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;launch&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;name&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;Debug mysqld&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;program&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}\/cmake-build-debug\/build\/sql\/mysqld&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;args&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;--defaults-file=${workspaceFolder}\/cmake-build-debug\/etc\/my.cnf&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;cwd&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;type&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;lldb&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;request&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;launch&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;name&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;Debug mysql&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;program&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}\/cmake-build-debug\/build\/client\/mysql&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;args&#34;<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;-uroot&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;-P3307&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                <span class=\"s2\">&#34;-h127.0.0.1&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"p\">],<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nt\">&#34;cwd&#34;<\/span><span class=\"p\">:<\/span> <span class=\"s2\">&#34;${workspaceFolder}&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u542f\u52a8\u8c03\u8bd5\">\u542f\u52a8\u8c03\u8bd5<\/h2>\n<h3 id=\"\u542f\u52a8-mysqld\">\u542f\u52a8 mysqld<\/h3>\n<p>\u5de6\u4fa7\u5bfc\u822a\u680f &gt; <code>\u8fd0\u884c\u4e0e\u8c03\u8bd5<\/code>\uff0c\u9009\u62e9 <code>Debug mysqld<\/code>\uff0c\u5f00\u59cb\u8c03\u8bd5\u3002\n<img src=\"media\/16300351391104.jpg\" alt=\"\u9009\u62e9mysqld\u8c03\u8bd5\"><\/p>\n<p>\u7ec8\u7aef\u4e2d\u4f1a\u8f93\u51fa <code>mysqld<\/code> \u670d\u52a1\u5668\u7684\u542f\u52a8\u65e5\u5fd7\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Warning<span class=\"o\">]<\/span> TIMESTAMP with implicit DEFAULT value is deprecated. Please use amp server option <span class=\"o\">(<\/span>see documentation <span class=\"k\">for<\/span> more details<span class=\"o\">)<\/span>.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> --secure-file-priv is <span class=\"nb\">set<\/span> to NULL. Operations related to importing and exporting data \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> \/path\/to\/mysql-5.7.35\/cmake-build-debug\/build\/sql\/mysqld <span class=\"o\">(<\/span>mysqld ess <span class=\"m\">70489<\/span> ...\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>ERROR<span class=\"o\">]<\/span> Can<span class=\"s1\">&#39;t find error-message file &#39;<\/span>\/path\/to\/mysql-5.7.35\/cmake-build-debug\/shareage file location and <span class=\"s1\">&#39;lc-messages-dir&#39;<\/span> configuration directive.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Warning<span class=\"o\">]<\/span> Setting <span class=\"nv\">lower_case_table_names<\/span><span class=\"o\">=<\/span><span class=\"m\">2<\/span> because file system <span class=\"k\">for<\/span> \/path\/to\/data\/ is <span class=\"k\">case<\/span> insensitive\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: !!!!!!!! UNIV_DEBUG switched on !!!!!!!!!\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Mutexes and rw_locks use GCC atomic builtins\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Uses event mutexes\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: GCC <span class=\"nb\">builtin<\/span> __atomic_thread_fence<span class=\"o\">()<\/span> is used <span class=\"k\">for<\/span> memory barrier\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Compressed tables use zlib 1.2.11\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Number of pools: <span class=\"m\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Using CPU crc32 instructions\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Initializing buffer pool, total <span class=\"nv\">size<\/span> <span class=\"o\">=<\/span> 128M, <span class=\"nv\">instances<\/span> <span class=\"o\">=<\/span> 1, chunk <span class=\"nv\">size<\/span> <span class=\"o\">=<\/span> 128M\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Completed initialization of buffer pool\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Highest supported file format is Barracuda.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Log scan progressed past the checkpoint lsn <span class=\"m\">2748488<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Doing recovery: scanned up to log sequence number <span class=\"m\">2748497<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Database was not shutdown normally!\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Starting crash recovery.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Removed temporary tablespace data file: <span class=\"s2\">&#34;ibtmp1&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Creating shared tablespace <span class=\"k\">for<\/span> temporary tables\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Setting file <span class=\"s1\">&#39;.\/ibtmp1&#39;<\/span> size to <span class=\"m\">12<\/span> MB. Physically writing the file full<span class=\"p\">;<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: File <span class=\"s1\">&#39;.\/ibtmp1&#39;<\/span> size is now <span class=\"m\">12<\/span> MB.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: <span class=\"m\">96<\/span> redo rollback segment<span class=\"o\">(<\/span>s<span class=\"o\">)<\/span> found. <span class=\"m\">96<\/span> redo rollback segment<span class=\"o\">(<\/span>s<span class=\"o\">)<\/span> are active.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: <span class=\"m\">32<\/span> non-redo rollback segment<span class=\"o\">(<\/span>s<span class=\"o\">)<\/span> are active.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Waiting <span class=\"k\">for<\/span> purge to start\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: 5.7.35 started<span class=\"p\">;<\/span> log sequence number <span class=\"m\">2748497<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Loading buffer pool<span class=\"o\">(<\/span>s<span class=\"o\">)<\/span> from \/path\/to\/mysql-5.7.35\/cmake-build-debug\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> Plugin <span class=\"s1\">&#39;FEDERATED&#39;<\/span> is disabled.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> InnoDB: Buffer pool<span class=\"o\">(<\/span>s<span class=\"o\">)<\/span> load completed at <span class=\"m\">210826<\/span> 21:45:37\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> Found ca.pem, server-cert.pem and server-key.pem in data directory. Trying to <span class=\"nb\">enable<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> Skipping generation of SSL certificates as certificate files are present in data \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Warning<span class=\"o\">]<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Warning<span class=\"o\">]<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Warning<span class=\"o\">]<\/span> CA certificate ca.pem is self signed.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> Skipping generation of RSA key pair as key files are present in data directory.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> Server hostname <span class=\"o\">(<\/span>bind-address<span class=\"o\">)<\/span>: <span class=\"s1\">&#39;*&#39;<\/span><span class=\"p\">;<\/span> port: <span class=\"m\">3307<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> IPv6 is available.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span>   - <span class=\"s1\">&#39;::&#39;<\/span> resolves to <span class=\"s1\">&#39;::&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> Server socket created on IP: <span class=\"s1\">&#39;::&#39;<\/span>.\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> Event Scheduler: Loaded <span class=\"m\">0<\/span> events\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>Note<span class=\"o\">]<\/span> \n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u8fde\u63a5\u6570\u636e\u5e93\">\u8fde\u63a5\u6570\u636e\u5e93<\/h3>\n<p>\u4ee5\u540c\u6837\u7684\u65b9\u5f0f\uff0c\u5148\u7f16\u8bd1 <code>mysql<\/code>\uff0c\u7136\u540e\u542f\u52a8 <code>mysql<\/code> \u5ba2\u6237\u7aef\uff0c\u8fde\u63a5\u5230\u521a\u521a\u542f\u52a8\u7684\u670d\u52a1\u7aef <code>mysqld<\/code>\uff1a\n<img src=\"media\/16300354550951.jpg\" alt=\"\u9009\u62e9mysql\u8fde\u63a5\u670d\u52a1\u7aef\"><\/p>\n<p>\u8fd9\u6837\u5c31\u53ef\u4ee5\u5728\u4e00\u4e2a\u7a97\u53e3\u4e0b\uff0c\u65e2 Debug \u6e90\u7801\uff0c\u4e5f\u80fd\u770b\u5230\u8f93\u51fa\u3002<\/p>\n<p>\u5f53\u7136\uff0c\u4e5f\u53ef\u4ee5\u901a\u8fc7\u5176\u4ed6 <code>mysql<\/code> \u5ba2\u6237\u7aef\uff0c\u6216 <code>Navicat<\/code> \u8fde\u63a5\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">mysql -uroot -P3307 -h127.0.0.1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"debug-\u754c\u9762\">Debug \u754c\u9762<\/h3>\n<p><img src=\"media\/16299862364580.jpg\" alt=\"debug-window\"><\/p>\n<h2 id=\"\u5c0f\u6280\u5de7\">\u5c0f\u6280\u5de7<\/h2>\n<h3 id=\"\u4ee3\u7801\u8499\u7070\">\u4ee3\u7801\u8499\u7070<\/h3>\n<p><code>C\/C++<\/code> \u6269\u5c55\u6709\u4e2a <code>C_Cpp.dimInactiveRegions<\/code> \u53c2\u6570\uff0c\u63a7\u5236\u975e\u6d3b\u52a8\u533a\u57df\u4ee3\u7801\u53d8\u7070\u3002\n<img src=\"media\/16300506241040.jpg\" alt=\"C_Cpp.dimInactiveRegions\"><\/p>\n<h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"..\/mysql-source-macos-clion-debug-5-7\">MySQL \u6e90\u7801\u9605\u8bfb \u2014\u2014 macOS CLion \u7f16\u8bd1\u8c03\u8bd5 MySQL 5.7<\/a><\/li>\n<li><a href=\"..\/mysql-source-version-conflict-in-cpp-11\">MySQL \u6e90\u7801\u9605\u8bfb \u2014\u2014 \u95ee\u9898 expanded from macro MYSQL_VERSION_MAJOR<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/microsoft\/vscode-cmake-tools\/tree\/main\/docs\">CMake Tools for Visual Studio Code documentation<\/a><\/li>\n<\/ul>"},{"title":"MySQL \u6e90\u7801\u9605\u8bfb \u2014\u2014 \u95ee\u9898 expanded from macro MYSQL_VERSION_MAJOR","link":"https:\/\/shockerli.net\/post\/mysql-source-version-conflict-in-cpp-11\/","pubDate":"Thu, 26 Aug 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/mysql-source-version-conflict-in-cpp-11\/","description":"<h2 id=\"\u95ee\u9898\u63cf\u8ff0\">\u95ee\u9898\u63cf\u8ff0<\/h2>\n<blockquote>\n<p>\u5728\u6267\u884c <code>make<\/code> \u6784\u5efa\u65f6\u53ef\u80fd\u4f1a\u62a5\u9519<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">Building C object storage\/myisam\/CMakeFiles\/myisam.dir\/mi_rfirst.c.o\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/path\/to\/mysql-5.7.35\/storage\/perfschema\/cursor_by_account.cc:28:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/path\/to\/mysql-5.7.35\/include\/my_global.h:57:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/Library\/Developer\/CommandLineTools\/SDKs\/MacOSX11.3.sdk\/usr\/include\/c++\/v1\/math.h:309:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/Library\/Developer\/CommandLineTools\/SDKs\/MacOSX11.3.sdk\/usr\/include\/c++\/v1\/type_traits:417:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/Library\/Developer\/CommandLineTools\/SDKs\/MacOSX11.3.sdk\/usr\/include\/c++\/v1\/cstddef:37:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/path\/to\/mysql-5.7.35\/version:1:1: error: expected unqualified-id\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nv\">MYSQL_VERSION_MAJOR<\/span><span class=\"o\">=<\/span><span class=\"m\">5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">^\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/path\/to\/mysql-5.7.35\/include\/my_config.h:404:29: note: expanded from macro <span class=\"s1\">&#39;MYSQL_VERSION_MAJOR&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">#define MYSQL_VERSION_MAJOR 5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            ^\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u539f\u56e0\u6392\u67e5\">\u539f\u56e0\u6392\u67e5<\/h2>\n<p>\u901a\u8fc7 Homebrew \u7684 <a href=\"https:\/\/github.com\/Homebrew\/homebrew-core\/blob\/9e2e2a82c7d2147d2e23280c26c075ee4e858cc2\/Formula\/mysql%405.7.rb\">mysql@5.7.rb<\/a>\uff0c\u627e\u5230\u4e86\u4e00\u4e2a PATCH\u3002<\/p>\n<p>\u5728 MySQL \u7684 Commit \u8bb0\u5f55 <a href=\"https:\/\/github.com\/mysql\/mysql-server\/commit\/51675dd\">Bug #31466846 RENAME THE VERSION FILE TO MYSQL_VERSION<\/a> \u627e\u5230\u4e86\u7b54\u6848\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">Bug <span class=\"c1\">#31466846 RENAME THE VERSION FILE TO MYSQL_VERSION<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">With new versions of boost, the build is broken on windows.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">&lt;version&gt; is a header file which is part of C++11, but on win we\n<\/span><\/span><span class=\"line\"><span class=\"cl\">include our own VERSION instead, and the build breaks.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">The solution is <span class=\"s1\">&#39;git mv VERSION MYSQL_VERSION&#39;<\/span>, and adapt\n<\/span><\/span><span class=\"line\"><span class=\"cl\">cmake code accordingly.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Change-Id: I5211cf41fa83e879a25d4110dbb8933cd58da2f9\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> 8.0\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> mysql-cluster-8.0.26  mysql-cluster-8.0.25 mysql-cluster-8.0.24 mysql-cluster-8.0.23 mysql-cluster-8.0.22 mysql-8.0.26 mysql-8.0.25 mysql-8.0.24 mysql-8.0.23 mysql-8.0.22\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Tor Didriksen committed on <span class=\"m\">10<\/span> Jun <span class=\"m\">2020<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"m\">1<\/span> parent 6653b43 commit 51675ddb41661163c23e802a3e5eedb1344ce023\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5927\u6982\u610f\u601d\u662f\uff1a<\/p>\n<blockquote>\n<p><code>version<\/code> \u662f <code>C++11<\/code> \u7684\u4e00\u4e2a\u5934\u6587\u4ef6\uff0c\u4f46 MySQL \u4ee5\u5f80\u90fd\u662f\u7528 <code>VERSION<\/code> \u8868\u793a\u7684\u7248\u672c\u53f7\uff0c\u5728\u5f15\u5165\u6587\u4ef6\u65f6\u53c8\u56e0 macOS \u4e0d\u533a\u5206\u6587\u4ef6\u5927\u5c0f\u5199\uff0c\u4ea7\u751f\u4e86\u51b2\u7a81\uff0c\u5bfc\u81f4\u7f16\u8bd1\u65f6\u62a5\u9519\u4e2d\u65ad\u3002<\/p>\n<\/blockquote>\n<p>\u5728 <code>macOS Big Sur 11.5<\/code> \u4e2d\u7684 SDK \u662f <code>MacOSX11.3.sdk<\/code>\uff0c\u786e\u5b9e\u5728 <code>include<\/code> \u4e0b\u5b58\u5728 <code>version<\/code> \u8fd9\u4e48\u4e2a\u5934\u6587\u4ef6\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\/Library\/Developer\/CommandLineTools\/SDKs\/MacOSX11.3.sdk\/usr\/include\/c++\/v1\/version\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4f46\u5728 <code>MacOSX11.1.sdk<\/code> \u53ca\u66f4\u8001\u7248\u672c\u4e2d\uff0c\u5374\u6ca1\u6709\u8fd9\u4e2a\u6587\u4ef6\u3002<\/p>\n<blockquote>\n<p>\u6bcf\u4e2a\u7248\u672c\u7684 Mac SDK \u60c5\u51b5\uff0c\u53ef\u4ee5\u53c2\u8003\u4e0b\u8fd9\u4e2a\u9879\u76ee\uff1a<\/p>\n<p><a href=\"https:\/\/github.com\/phracker\/MacOSX-SDKs\">https:\/\/github.com\/phracker\/MacOSX-SDKs<\/a><\/p>\n<\/blockquote>\n<p>\u6240\u4ee5\u4ea7\u751f\u95ee\u9898\u7684\u6761\u4ef6\u662f\uff1a<\/p>\n<ul>\n<li><code>MacOSX11.1.sdk<\/code> \u53ca\u4ee5\u4e0b\u7cfb\u7edf\u4e2d\u7f16\u8bd1 <code>MySQL 8.0.21<\/code> \u53ca\u66f4\u8001\u7248\u672c\uff08\u5305\u62ec<code>5.7.*<\/code>\uff09\u65f6\uff0c<strong>\u6ca1\u95ee\u9898<\/strong>\uff1b<\/li>\n<li><code>MacOSX11.3.sdk<\/code> \u53ca\u4ee5\u4e0a\u7248\u672c\u4e2d\u7f16\u8bd1 <code>MySQL 8.0.22<\/code> \u53ca\u66f4\u65b0\u7248\u672c\u65f6\uff0c<strong>\u6ca1\u95ee\u9898<\/strong>\uff1b<\/li>\n<li>\u4f46 <code>MacOSX11.3.sdk<\/code> \u53ca\u4ee5\u4e0a\u7248\u672c\u4e2d\u7f16\u8bd1 <code>MySQL 8.0.21<\/code> \u53ca\u66f4\u8001\u7248\u672c\uff08\u5305\u62ec<code>5.7.*<\/code>\uff09\u65f6\uff0c<strong>\u6709\u95ee\u9898<\/strong>\uff1b<\/li>\n<\/ul>\n<p>SDK \u7248\u672c\u4e0e <code>XCode<\/code> \u6216 <code>xcode-select<\/code> \u6709\u5173\u7cfb\u3002<\/p>\n<p>\u53ef\u4ee5\u901a\u8fc7 <code>\/Library\/Developer\/CommandLineTools\/SDKs<\/code> \u76ee\u5f55\u6765\u5224\u65ad SDK \u7248\u672c\u3002<\/p>\n<h2 id=\"\u89e3\u51b3\u65b9\u6848\">\u89e3\u51b3\u65b9\u6848<\/h2>\n<p><code>MySQL 8.0.22<\/code> \u53ca\u66f4\u65b0\u7248\u672c\uff0c\u5b98\u65b9\u5df2\u7ecf\u4fee\u6539\u4e86\uff0c\u4f46\u8001\u7248\u672c\u600e\u4e48\u529e\uff1f\u5c31\u6309\u5b98\u65b9\u7684\u65b9\u5f0f\u4fee\u6539\u4e0b\u5373\u53ef\u3002<\/p>\n<p>\u5728\u6267\u884c <code>cmake<\/code> \u524d\uff0c\u5148\u4fee\u65392\u4e2a\u5730\u65b9\uff1a<\/p>\n<ul>\n<li>\n<p>\u6587\u4ef6 <code>VERSION<\/code> \u91cd\u547d\u540d\u4e3a <code>MYSQL_VERSION<\/code><\/p>\n<\/li>\n<li>\n<p>\u6587\u4ef6 <code>cmake\/mysql_version.cmake<\/code> \u4e2d 2 \u5904\u4ee3\u7801\uff0c<code>VERSION<\/code> \u66ff\u6362\u4e3a <code>MYSQL_VERSION<\/code><\/p>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-diff\" data-lang=\"diff\"><span class=\"line\"><span class=\"cl\"><span class=\"gh\">diff --git a\/cmake\/mysql_version.cmake b\/cmake\/mysql_version.cmake\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gh\">index 43d731e..3031258 100644\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gh\"><\/span><span class=\"gd\">--- a\/cmake\/mysql_version.cmake\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gd\"><\/span><span class=\"gi\">+++ b\/cmake\/mysql_version.cmake\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gi\"><\/span><span class=\"gu\">@@ -31,7 +31,7 @@ SET(DOT_FRM_VERSION &#34;6&#34;)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gu\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> # Generate &#34;something&#34; to trigger cmake rerun when VERSION changes\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> CONFIGURE_FILE(\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gd\">-  ${CMAKE_SOURCE_DIR}\/VERSION\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gd\"><\/span><span class=\"gi\">+  ${CMAKE_SOURCE_DIR}\/MYSQL_VERSION\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gi\"><\/span>   ${CMAKE_BINARY_DIR}\/VERSION.dep\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gu\">@@ -39,7 +39,7 @@ CONFIGURE_FILE(\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gu\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"> MACRO(MYSQL_GET_CONFIG_VALUE keyword var)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  IF(NOT ${var})\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gd\">-   FILE (STRINGS ${CMAKE_SOURCE_DIR}\/VERSION str REGEX &#34;^[ ]*${keyword}=&#34;)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gd\"><\/span><span class=\"gi\">+   FILE (STRINGS ${CMAKE_SOURCE_DIR}\/MYSQL_VERSION str REGEX &#34;^[ ]*${keyword}=&#34;)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"gi\"><\/span>    IF(str)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      STRING(REPLACE &#34;${keyword}=&#34; &#34;&#34; str ${str})\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      STRING(REGEX REPLACE  &#34;[ ].*&#34; &#34;&#34;  str &#34;${str}&#34;)\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5199\u597d\u7684\u811a\u672c\u76f4\u63a5\u7528\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">mv VERSION MYSQL_VERSION\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sed -i <span class=\"s1\">&#39;&#39;<\/span> <span class=\"s1\">&#39;s|${CMAKE_SOURCE_DIR}\/VERSION|${CMAKE_SOURCE_DIR}\/MYSQL_VERSION|g&#39;<\/span> cmake\/mysql_version.cmake\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/Homebrew\/homebrew-core\/blob\/9e2e2a82c7d2147d2e23280c26c075ee4e858cc2\/Formula\/mysql%405.7.rb\">Homebrew\/homebrew-core\/Formula\/mysql@5.7.rb<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/mysql\/mysql-server\/commit\/51675dd\">mysql\/mysql-server@Bug #31466846 RENAME THE VERSION FILE TO MYSQL_VERSION<\/a><\/li>\n<\/ul>"},{"title":"MySQL \u6e90\u7801\u9605\u8bfb \u2014\u2014 macOS CLion \u7f16\u8bd1\u8c03\u8bd5 MySQL 5.7","link":"https:\/\/shockerli.net\/post\/mysql-source-macos-clion-debug-5-7\/","pubDate":"Wed, 25 Aug 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/mysql-source-macos-clion-debug-5-7\/","description":"<blockquote>\n<p>macOS + VSCode \u7248\u672c\u770b<a href=\"..\/mysql-source-macos-vscode-debug-5-7\">\u8fd9\u91cc<\/a><\/p>\n<\/blockquote>\n<h2 id=\"\u73af\u5883\u4fe1\u606f\">\u73af\u5883\u4fe1\u606f<\/h2>\n<ul>\n<li>macOS Big Sur 11.5.2<\/li>\n<li>CLion 2021.2<\/li>\n<li>MySQL 5.7.35<\/li>\n<li>CMake 3.21.1<\/li>\n<li>openssl 1.1<\/li>\n<\/ul>\n<h3 id=\"202406-\u66f4\u65b0\u73af\u5883\">2024.06 \u66f4\u65b0\u73af\u5883<\/h3>\n<ul>\n<li>macOS Sonama 14.5<\/li>\n<li>CLion 2024.1<\/li>\n<li>MySQL 5.7.35<\/li>\n<li>CMake 3.28.1<\/li>\n<li>openssl 1.1.1w<\/li>\n<\/ul>\n<h2 id=\"\u4e0b\u8f7d\u6e90\u7801\">\u4e0b\u8f7d\u6e90\u7801<\/h2>\n<blockquote>\n<p>\u4ece<a href=\"https:\/\/dev.mysql.com\/downloads\/mysql\/\">\u5b98\u7f51<\/a>\u4e0b\u8f7d\u643a\u5e26 <code>boost<\/code> \u7248\u672c\u6e90\u7801<\/p>\n<p>\u4e0b\u8f7d\u94fe\u63a5\uff1a<a href=\"https:\/\/dev.mysql.com\/get\/Downloads\/MySQL-5.7\/mysql-boost-5.7.35.tar.gz\">https:\/\/dev.mysql.com\/get\/Downloads\/MySQL-5.7\/mysql-boost-5.7.35.tar.gz<\/a><\/p>\n<p>\u4e5f\u53ef\u4ee5\u4ece <a href=\"https:\/\/github.com\/mysql\/mysql-server\">GitHub<\/a> \u4e0a\u514b\u9686\u4ee3\u7801\uff0c\u5207\u6362\u5230\u6307\u5b9a TAG \u6216\u5206\u652f\u3002<\/p>\n<\/blockquote>\n<p><img src=\"media\/16298784478313.jpg\" alt=\"\u4ece\u5b98\u7f51\u4e0b\u8f7d MySQL 5.7.35 boost \u7248\u672c\u6e90\u7801\"><\/p>\n<h2 id=\"patch-\u6e90\u7801\">Patch \u6e90\u7801<\/h2>\n<p>\u5982\u679c <code>MySQL &lt;= 8.0.21<\/code>\uff0c\u5219\u9700\u8981\u6267\u884c\u4ee5\u4e0b\u811a\u672c Patch \u6e90\u7801\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">mv VERSION MYSQL_VERSION\n<\/span><\/span><span class=\"line\"><span class=\"cl\">sed -i <span class=\"s1\">&#39;&#39;<\/span> <span class=\"s1\">&#39;s|${CMAKE_SOURCE_DIR}\/VERSION|${CMAKE_SOURCE_DIR}\/MYSQL_VERSION|g&#39;<\/span> cmake\/mysql_version.cmake\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5177\u4f53\u539f\u56e0\uff0c\u53ef\u53c2\u8003\u6587\u7ae0\uff1a<a href=\"..\/mysql-source-version-conflict-in-cpp-11\">MySQL \u6e90\u7801 \u2014\u2014 \u95ee\u9898 expanded from macro MYSQL_VERSION_MAJOR<\/a><\/p>\n<h2 id=\"\u521b\u5efa\u76ee\u5f55\">\u521b\u5efa\u76ee\u5f55<\/h2>\n<blockquote>\n<p>\u7f16\u8bd1\u3001\u5b89\u88c5\u3001\u6570\u636e\u3001\u914d\u7f6e\u7b49\u90fd\u7edf\u4e00\u5230 <code>cmake-build-debug<\/code> \u76ee\u5f55\uff0c\u65b9\u4fbf\u7ba1\u7406\u3001\u4e0d\u4e0e\u5176\u4ed6\u51b2\u7a81\u3002<\/p>\n<p>\u4e3a\u4f55\u662f <code>cmake-build-debug<\/code> \u524d\u7f00\uff0c\u56e0\u4e3a <code>CLion<\/code> \u4e2d <code>CMake<\/code> \u7684 <code>Build directory<\/code> \u5c31\u662f <code>cmake-build-debug<\/code>\uff0c\u53ef\u81ea\u884c\u4fee\u6539\u3002<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">mkdir -p cmake-build-debug\/<span class=\"o\">{<\/span>data,etc<span class=\"o\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u914d\u7f6e-cmake\">\u914d\u7f6e CMake<\/h2>\n<p><img src=\"media\/16298621295586.jpg\" alt=\"\u914d\u7f6e CMake\"><\/p>\n<p>CMake options \u914d\u7f6e\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><span class=\"lnt\">9\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">-DWITH_DEBUG=1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DDOWNLOAD_BOOST=1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DDOWNLOAD_BOOST_TIMEOUT=60000\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DWITH_BOOST=boost\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DCMAKE_INSTALL_PREFIX=build_out\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DMYSQL_DATADIR=build_out\/data\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DSYSCONFDIR=build_out\/etc\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DMYSQL_TCP_PORT=3307\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DMYSQL_UNIX_ADDR=mysql-debug.sock\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u89e3\u91ca\u4e0b\u4e0a\u9762\u7684\u53c2\u6570\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><span class=\"lnt\">9\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">-DWITH_DEBUG=1                     # \u5f00\u542fDEBUG\u6a21\u5f0f\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DDOWNLOAD_BOOST=1                 # boost\u4e0d\u5b58\u5728\u65f6\u81ea\u52a8\u4e0b\u8f7d\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DDOWNLOAD_BOOST_TIMEOUT=60000     # \u4e0b\u8f7dboost\u7684\u8d85\u65f6\u65f6\u95f4\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DWITH_BOOST=boost                 # boost\u76ee\u5f55\uff0c\u4e0d\u5b58\u5728\u65f6\u4f1a\u81ea\u52a8\u4e0b\u8f7d\u5230\u8be5\u76ee\u5f55\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DCMAKE_INSTALL_PREFIX=build_out   # MySQL\u5b89\u88c5\u76ee\u5f55\uff0c\u53ef\u5728\u542f\u52a8\u65f6\u6307\u5b9a`--basedir`\u8986\u76d6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DMYSQL_DATADIR=build_out\/data     # MySQL\u6570\u636e\u76ee\u5f55\uff0c\u53ef\u5728\u542f\u52a8\u65f6\u6307\u5b9a`--datadir`\u8986\u76d6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DSYSCONFDIR=build_out\/etc         # `my.cnf`\u9ed8\u8ba4\u76ee\u5f55\uff0c\u53ef\u5728\u542f\u52a8\u65f6\u6307\u5b9a`--defaults-file=file_name`\u8986\u76d6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DMYSQL_TCP_PORT=3307              # \u5982\u679c\u672c\u673a\u5df2\u5b89\u88c5\u8fc7MySQL\uff0c\u907f\u514d\u51b2\u7a81\u6362\u4e2a\u522b\u7684\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-DMYSQL_UNIX_ADDR=mysql-debug.sock # \u9ed8\u8ba4\/tmp\/mysql.sock\uff0c\u907f\u514d\u51b2\u7a81\uff0c\u6b64\u5904\u76f8\u5bf9\u4e0e`--datadir`\u76ee\u5f55\u4f1a\u81ea\u52a8\u521b\u5efa\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5982\u679c\u672c\u673a\u9ed8\u8ba4 OpenSSL \u7248\u672c\u4e0d\u662f <code>1.1.1<\/code>\uff0c\u9700\u8981\u5728 CMake \u9009\u9879\u4e2d\u989d\u5916\u6307\u5b9a <code>openssl@1.1.1<\/code> \u7248\u672c\u7684\u5b89\u88c5\u8def\u5f84\uff0c\u6bd4\u5982\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">-DWITH_SSL=\/opt\/homebrew\/Cellar\/openssl@1.1\/1.1.1w\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u53c2\u8003 <a href=\"..\/mysql-source-cmake-openssl-version\">MySQL \u6e90\u7801\u9605\u8bfb \u2014\u2014 \u95ee\u9898 CMake\uff1aSSL version must be at least 1.1.1<\/a>\u3002<\/p>\n<blockquote>\n<p>\u6240\u6709\u53ef\u9009\u53c2\u6570\uff1a<a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/source-configuration-options.html\">MySQL Source-Configuration Options<\/a><\/p>\n<\/blockquote>\n<h2 id=\"\u8fd0\u884c-cmake\">\u8fd0\u884c CMake<\/h2>\n<ul>\n<li>\n<p>\u65b9\u6cd5\u4e00\uff1a<code>Tools<\/code> &gt; <code>CMake<\/code> &gt; <code>Reset Cache and Reload Project<\/code><\/p>\n<\/li>\n<li>\n<p>\u65b9\u6cd5\u4e8c\uff1a<code>View<\/code> &gt; <code>Tool Windows<\/code> &gt; <code>CMake<\/code> &gt; <code>Reset Cache and Reload Project<\/code><\/p>\n<\/li>\n<\/ul>\n<p><img src=\"media\/16297108569349.jpg\" alt=\"Reset Cache and Reload Project\"><\/p>\n<p>\u6267\u884c\u5b8c\u540e\uff0c<code>CMake<\/code> \u7a97\u53e3\u8f93\u51fa\u5982\u4e0b\u5185\u5bb9\u8868\u793a\u6267\u884c\u6210\u529f\uff0c\u5426\u5219\u5373\u5931\u8d25\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/Applications\/CLion.app\/Contents\/bin\/cmake\/mac\/bin\/cmake -DCMAKE_BUILD_TYPE<span class=\"o\">=<\/span>Debug -DWITH_DEBUG<span class=\"o\">=<\/span><span class=\"m\">1<\/span> -DDOWNLOAD_BOOST<span class=\"o\">=<\/span><span class=\"m\">1<\/span> -DDOWNLOAD_BOOST_TIMEOUT<span class=\"o\">=<\/span><span class=\"m\">60000<\/span> -DWITH_BOOST<span class=\"o\">=<\/span>boost -DCMAKE_INSTALL_PREFIX<span class=\"o\">=<\/span>build_out -DMYSQL_DATADIR<span class=\"o\">=<\/span>build_out\/data -DSYSCONFDIR<span class=\"o\">=<\/span>build_out\/etc -DMYSQL_TCP_PORT<span class=\"o\">=<\/span><span class=\"m\">3307<\/span> -DMYSQL_UNIX_ADDR<span class=\"o\">=<\/span>mysql-debug.sock -DCMAKE_DEPENDS_USE_COMPILER<span class=\"o\">=<\/span>FALSE -G <span class=\"s2\">&#34;CodeBlocks - Unix Makefiles&#34;<\/span> \/path\/to\/mysql-5.7.35\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u00b7\u00b7\u00b7\u00b7\u00b7\u00b7\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- Configuring <span class=\"k\">done<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- Generating <span class=\"k\">done<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- Build files have been written to: \/path\/to\/mysql-5.7.35\/cmake-build-debug\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u7f16\u8bd1-mysqld\">\u7f16\u8bd1 mysqld<\/h2>\n<p>\u70b9\u51fb <code>CLion<\/code> \u7a97\u53e3\u53f3\u4e0a\u89d2 <code>Build<\/code> \u6309\u94ae\u6216\u5feb\u6377\u952e <code>\u2318+F9<\/code>\uff1a<\/p>\n<p><img src=\"media\/16298700376096.jpg\" alt=\"build-mysqld\"><\/p>\n<p>\u9996\u6b21\u7f16\u8bd1\u4f1a\u6bd4\u8f83\u6162\uff0c\u7f16\u8bd1\u5b8c\u6210\u540e\u8f93\u51fa\u5982\u4e0b\u5185\u5bb9\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">====================[<\/span> Build <span class=\"p\">|<\/span> mysqld <span class=\"p\">|<\/span> Debug <span class=\"o\">]==================================<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/Applications\/CLion.app\/Contents\/bin\/cmake\/mac\/bin\/cmake --build \/path\/to\/mysql-5.7.35\/cmake-build-debug --target mysqld -- -j <span class=\"m\">3<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>  0%<span class=\"o\">]<\/span> Built target regex\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u00b7\u00b7\u00b7 \u4e2d\u95f4\u65e5\u5fd7\u7701\u7565 \u00b7\u00b7\u00b7\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>100%<span class=\"o\">]<\/span> Built target mysqld\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Build finished\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u914d\u7f6e-mycnf\">\u914d\u7f6e my.cnf<\/h2>\n<blockquote>\n<p>\u5982\u6709\u5176\u4ed6\u5b9a\u5236\u5316\u914d\u7f6e\u9700\u8981\uff0c\u53ef\u6dfb\u52a0\/\u4fee\u6539 <code>my.cnf<\/code><\/p>\n<\/blockquote>\n<p>\u5728 <code>CMake<\/code> \u914d\u7f6e\u7684 <code>-DSYSCONFDIR=build_out\/etc<\/code> \u76ee\u5f55\u4e0b\uff0c\u521b\u5efa <code>my.cnf<\/code> \u6587\u4ef6\uff0c\u5e76\u7f16\u8f91\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-ini\" data-lang=\"ini\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">[mysqld]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"na\">innodb_file_per_table<\/span> <span class=\"o\">=<\/span> <span class=\"s\">1<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u521d\u59cb\u5316-mysqld\">\u521d\u59cb\u5316 mysqld<\/h2>\n<p>\u70b9\u51fb <code>CLion<\/code> \u7a97\u53e3\u53f3\u4e0a\u89d2 <code>Edit Configurations...<\/code>\uff1a<\/p>\n<p><img src=\"media\/16297111650098.jpg\" alt=\"Edit Configurations\"><\/p>\n<p>\u627e\u5230 <code>mysqld<\/code>\uff0c\u5e76\u914d\u7f6e <code>Program arguments<\/code>\uff1a<\/p>\n<p><img src=\"media\/16298695197440.jpg\" alt=\"mysqld-program-arguments\"><\/p>\n<p><code>Program arguments<\/code> \u914d\u7f6e\u5185\u5bb9\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">--initialize-insecure\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u70b9\u51fb <code>CLion<\/code> \u7a97\u53e3\u53f3\u4e0a\u89d2 <code>Run<\/code> \u56fe\u6807\u6216\u5feb\u6377\u952e <code>\u2303+R<\/code>\uff0c\u8fdb\u884c\u521d\u59cb\u5316\uff1a<\/p>\n<p><img src=\"media\/16297117532448.jpg\" alt=\"\u8fd0\u884c Debug\"><\/p>\n<p>\u521d\u59cb\u5316\u540e\uff0c\u8f93\u51fa\u5982\u4e0b\u5185\u5bb9\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\/path\/to\/mysql-5.7.35\/cmake-build-debug\/sql\/mysqld --initialize-insecure\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:14.403520Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:14.403970Z 0 [ERROR] Can&#39;t find error-message file &#39;\/path\/to\/mysql-5.7.35\/cmake-build-debug\/build_out\/share\/errmsg.sys&#39;. Check error-message file location and &#39;lc-messages-dir&#39; configuration directive.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:14.405823Z 0 [Warning] Setting lower_case_table_names=2 because file system for \/path\/to\/mysql-5.7.35\/cmake-build-debug\/build_out\/data\/ is case insensitive\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:14.658572Z 0 [Warning] InnoDB: New log files created, LSN=45790\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:15.068077Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:15.214272Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 398f5a88-0566-11ec-9fc8-c1b33e1edaea.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:15.218653Z 0 [Warning] Gtid table is not ready to be used. Table &#39;mysql.gtid_executed&#39; cannot be opened.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:16.089766Z 0 [Warning] \n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:16.089804Z 0 [Warning] \n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:16.090612Z 0 [Warning] CA certificate ca.pem is self signed.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">2021-08-25T05:35:16.385026Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6b64\u65f6\uff0cMySQL \u5df2\u81ea\u52a8\u521b\u5efa\u4e00\u4e2a <code>root@localhost<\/code> \u8d26\u53f7\uff0c\u5bc6\u7801\u4e3a\u7a7a\uff01<\/p>\n<p>\u518d\u5c06 <code>Program arguments<\/code> \u914d\u7f6e\u4e2d\u7684 <code>--initialize-insecure<\/code> <strong>\u5220\u9664<\/strong>\uff01\uff01\uff01<\/p>\n<p>\u56e0\u4e3a\u521d\u59cb\u5316\u53ea\u9700\u6267\u884c\u4e00\u6b21\uff0c\u540e\u7eed\u7684\u6267\u884c\u6216 Debug \u90fd\u4f1a\u7528\u5230\u8fd9\u91cc\u7684\u914d\u7f6e\uff0c\u4e0d\u5220\u9664\u5c31\u4f1a\u62a5\u9519\u3002<\/p>\n<h2 id=\"\u5f00\u59cb-debug\">\u5f00\u59cb DEBUG<\/h2>\n<p>\u70b9\u51fb <code>CLion<\/code> \u7a97\u53e3\u53f3\u4e0a\u89d2 <code>Debug<\/code> \u56fe\u6807\u6216\u5feb\u6377\u952e <code>\u2303+D<\/code>\uff0c\u5f00\u59cb Debug\uff1a<\/p>\n<p><img src=\"media\/16298733653367.jpg\" alt=\"\u5f00\u59cbDebug\"><\/p>\n<p>\u901a\u8fc7\u5df2\u6709\u5ba2\u6237\u7aef\u8fde\u63a5\u5230 MySQL \u670d\u52a1\u5668\uff0c\u6bd4\u5982\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">mysql -uroot -P3307 -h127.0.0.1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4e5f\u53ef\u4ee5\u901a\u8fc7 Navicat \u8fde\u63a5\uff1a\n<img src=\"media\/16298744151164.jpg\" alt=\"Navicat\u8fde\u63a5\"><\/p>\n<p>\u7136\u540e\u5728\u5ba2\u6237\u7aef\u8f93\u5165\u4e00\u6761 SQL\uff0c<code>CLion<\/code> Debug \u7a97\u53e3\u5c31\u4f1a\u63d0\u793a\uff1a<\/p>\n<p><img src=\"media\/16298745945258.jpg\" alt=\"clion-debug\"><\/p>\n<h2 id=\"\u5e38\u89c1\u95ee\u9898\">\u5e38\u89c1\u95ee\u9898<\/h2>\n<blockquote>\n<p>Warning \u7ea7\u522b\u7684\u9519\u8bef\uff0c\u53ef\u5ffd\u7565<\/p>\n<\/blockquote>\n<h3 id=\"cmake-error-at-cmakeboostcmake\">CMake Error at cmake\/boost.cmake<\/h3>\n<h4 id=\"\u9519\u8bef\u63cf\u8ff0\">\u9519\u8bef\u63cf\u8ff0<\/h4>\n<blockquote>\n<p>\u6b64\u9519\u8bef\u5728\u6267\u884c <code>cmake<\/code> \u65f6\u4f1a\u62a5\u9519<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">CMake Error at cmake\/boost.cmake:88 (MESSAGE):\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=&lt;directory&gt;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  This CMake script will look for boost in &lt;directory&gt;.  If it is not there,\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  it will download and unpack it (in that directory) for you.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  If you are inside a firewall, you may need to use an http proxy:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  export http_proxy=http:\/\/example.com:80\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Call Stack (most recent call first):\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  cmake\/boost.cmake:245 (COULD_NOT_FIND_BOOST)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  CMakeLists.txt:536 (INCLUDE)\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7f16\u8bd1 MySQL \u6e90\u7801\uff0cCMake \u9700\u8981\u914d\u7f6e <code>-DWITH_BOOST=&lt;directory&gt;<\/code> \u9009\u9879\u3002<\/p>\n<h4 id=\"\u786e\u8ba4\u6e90\u7801\u662f\u5426\u643a\u5e26-boost\">\u786e\u8ba4\u6e90\u7801\u662f\u5426\u643a\u5e26 <code>boost<\/code><\/h4>\n<p>\u533a\u5206\u6e90\u7801\u4e2d\u662f\u5426\u643a\u5e26\u6709 <code>boost<\/code> \u7684\u65b9\u5f0f\u67092\u79cd\uff1a<\/p>\n<ul>\n<li>\u901a\u8fc7\u4e0b\u8f7d URL \u6216\u6e90\u7801\u6587\u4ef6\u540d\u533a\u5206<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">https:\/\/cdn.mysql.com\/Downloads\/MySQL-5.7\/mysql-5.7.35.tar.gz\n<\/span><\/span><span class=\"line\"><span class=\"cl\">https:\/\/cdn.mysql.com\/Downloads\/MySQL-5.7\/mysql-boost-5.7.35.tar.gz\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><img src=\"media\/16297078028091.jpg\" alt=\"\"><\/p>\n<ul>\n<li>\u6e90\u7801\u4e2d\u662f\u5426\u6709 <code>boost<\/code> \u76ee\u5f55<\/li>\n<\/ul>\n<blockquote>\n<p>\u4ece GitHub \u4e0b\u8f7d\u7684\u6e90\u7801\u662f\u4e0d\u542b <code>boost<\/code> \u7684<\/p>\n<\/blockquote>\n<h4 id=\"\u5e26-boost-\u7684\u6e90\u7801\u5b89\u88c5\">\u5e26 <code>boost<\/code> \u7684\u6e90\u7801\u5b89\u88c5<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">cmake . -DWITH_BOOST<span class=\"o\">=<\/span>boost\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u4e0d\u5e26-boost-\u7684\u6e90\u7801\u5b89\u88c5\">\u4e0d\u5e26 <code>boost<\/code> \u7684\u6e90\u7801\u5b89\u88c5<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">cmake . <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DDOWNLOAD_BOOST<span class=\"o\">=<\/span><span class=\"m\">1<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DWITH_BOOST<span class=\"o\">=<\/span>&lt;directory&gt;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u8fd9\u662f MySQL \u5efa\u8bae\u7684\u6784\u5efa\u65b9\u5f0f\u3002CMake \u4f1a\u5230 <code>&lt;directory&gt;<\/code> \u4e0b\u67e5\u627e\u7b26\u5408\u7248\u672c\u8981\u6c42\u7684 <code>boost<\/code>\uff0c\u5982\u679c\u4e0d\u5b58\u5728\u5219\u4f1a\u4e0b\u8f7d\u5e76\u89e3\u538b\u5230\u8be5\u76ee\u5f55\u4e0b\u3002<\/p>\n<p>\u6267\u884c\u6784\u5efa\u540e\u7684\u8f93\u51fa\u793a\u4f8b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">...\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- MySQL 5.7.35\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- Packaging as: mysql-5.7.35-osx10.16-x86_64\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- DTRACE is enabled\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- Downloading boost_1_59_0.tar.gz to \/path\/to\/mysql-server-mysql-5.7.35\/boost\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- cd \/path\/to\/mysql-server-mysql-5.7.35\/boost; tar xfz \/path\/to\/mysql-server-mysql-5.7.35\/boost\/boost_1_59_0.tar.gz\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- Found \/path\/to\/mysql-server-mysql-5.7.35\/boost\/boost_1_59_0\/boost\/version.hpp\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- BOOST_VERSION_NUMBER is #define BOOST_VERSION 105900\n<\/span><\/span><span class=\"line\"><span class=\"cl\">-- BOOST_INCLUDE_DIR \/path\/to\/mysql-server-mysql-5.7.35\/boost\/boost_1_59_0\n<\/span><\/span><span class=\"line\"><span class=\"cl\">...\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6216\u8005\u624b\u52a8\u4e0b\u8f7d\u5e76\u89e3\u538b\u5230\u67d0\u4e2a\u76ee\u5f55\uff0c\u518d\u5728 <code>WITH_BOOST<\/code> \u53c2\u6570\u4e2d\u6307\u5b9a <code>boost<\/code> \u76ee\u5f55\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">wget https:\/\/nchc.dl.sourceforge.net\/project\/boost\/boost\/1.59.0\/boost_1_59_0.tar.gz\n<\/span><\/span><span class=\"line\"><span class=\"cl\">tar -zxf boost_1_59_0.tar.gz\n<\/span><\/span><span class=\"line\"><span class=\"cl\">cmake . <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>-DWITH_BOOST<span class=\"o\">=<\/span>&lt;directory&gt;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5982\u679c\u4e0b\u8f7d\u5f88\u6162\uff0c\u63a8\u8350\u63d0\u524d\u624b\u52a8\u4e0b\u8f7d <code>boost<\/code>\u3002<\/p>\n<h3 id=\"warning-define-bzero-please_use_memset_rather_than_bzero\">Warning: define bzero please_use_memset_rather_than_bzero<\/h3>\n<blockquote>\n<p>\u5728\u6784\u5efa\u8fc7\u7a0b\u4e2d\uff0c\u53ef\u80fd\u4f1a\u62a5\u5982\u4e0b Warning<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span> 31%<span class=\"o\">]<\/span> Building C object storage\/myisammrg\/CMakeFiles\/myisammrg.dir\/myrg_records.c.o\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/path\/to\/mysql-5.7.35\/storage\/myisam\/mi_page.c:25:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/path\/to\/mysql-5.7.35\/storage\/myisam\/myisamdef.h:26:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/path\/to\/mysql-5.7.35\/include\/myisam.h:34:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/path\/to\/mysql-5.7.35\/include\/m_string.h:32:9: warning: <span class=\"s1\">&#39;bzero&#39;<\/span> macro redefined <span class=\"o\">[<\/span>-Wmacro-redefined<span class=\"o\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">#define bzero please_use_memset_rather_than_bzero<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        ^\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/Library\/Developer\/CommandLineTools\/SDKs\/MacOSX11.3.sdk\/usr\/include\/secure\/_strings.h:52:9: note: previous definition is here\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">#define bzero(dest, ...) \\<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        ^\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/path\/to\/mysql-5.7.35\/storage\/myisammrg\/myrg_records.c:24:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/path\/to\/mysql-5.7.35\/storage\/myisammrg\/myrg_def.h:25:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/path\/to\/mysql-5.7.35\/storage\/myisammrg\/..\/myisam\/myisamdef.h:26:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">In file included from \/path\/to\/mysql-5.7.35\/include\/myisam.h:34:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/path\/to\/mysql-5.7.35\/include\/m_string.h:32:9: warning: <span class=\"s1\">&#39;bzero&#39;<\/span> macro redefined <span class=\"o\">[<\/span>-Wmacro-redefined<span class=\"o\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">#define bzero please_use_memset_rather_than_bzero<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        ^\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/Library\/Developer\/CommandLineTools\/SDKs\/MacOSX11.3.sdk\/usr\/include\/secure\/_strings.h:52:9: note: previous definition is here\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">#define bzero(dest, ...) \\<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        ^\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"m\">1<\/span> warning generated.\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><code>MacOSX11.3.sdk<\/code> \u4e2d\u5b9a\u4e49 <code>bzero<\/code> \u65f6\u7684\u63d0\u793a\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-c\" data-lang=\"c\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/<\/span><span class=\"n\">Library<\/span><span class=\"o\">\/<\/span><span class=\"n\">Developer<\/span><span class=\"o\">\/<\/span><span class=\"n\">CommandLineTools<\/span><span class=\"o\">\/<\/span><span class=\"n\">SDKs<\/span><span class=\"o\">\/<\/span><span class=\"n\">MacOSX11<\/span><span class=\"mf\">.3<\/span><span class=\"p\">.<\/span><span class=\"n\">sdk<\/span><span class=\"o\">\/<\/span><span class=\"n\">usr<\/span><span class=\"o\">\/<\/span><span class=\"n\">include<\/span><span class=\"o\">\/<\/span><span class=\"n\">secure<\/span><span class=\"o\">\/<\/span><span class=\"n\">_strings<\/span><span class=\"p\">.<\/span><span class=\"nl\">h<\/span><span class=\"p\">:<\/span><span class=\"mi\">52<\/span><span class=\"o\">:<\/span><span class=\"mi\">9<\/span><span class=\"o\">:<\/span> <span class=\"nl\">note<\/span><span class=\"p\">:<\/span> <span class=\"n\">previous<\/span> <span class=\"n\">definition<\/span> <span class=\"n\">is<\/span> <span class=\"n\">here<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#define bzero(dest, ...) \\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">\t\t__builtin___memset_chk (dest, 0, __VA_ARGS__, __darwin_obsz0 (dest))\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#endif\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u610f\u601d\u662f <code>bzero<\/code> \u8fd9\u4e2a\u5b8f\u5df2\u7ecf\u5728 <code>mysql<\/code> \u5f15\u5165\u7684\u6587\u4ef6\u4e2d\u5b9a\u4e49\u8fc7\u4e86\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-c\" data-lang=\"c\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">\/<\/span><span class=\"n\">path<\/span><span class=\"o\">\/<\/span><span class=\"n\">to<\/span><span class=\"o\">\/<\/span><span class=\"n\">mysql<\/span><span class=\"o\">-<\/span><span class=\"mf\">5.7.35<\/span><span class=\"o\">\/<\/span><span class=\"n\">include<\/span><span class=\"o\">\/<\/span><span class=\"n\">m_string<\/span><span class=\"p\">.<\/span><span class=\"nl\">h<\/span><span class=\"p\">:<\/span><span class=\"mi\">32<\/span><span class=\"o\">:<\/span><span class=\"mi\">9<\/span><span class=\"o\">:<\/span> <span class=\"nl\">warning<\/span><span class=\"p\">:<\/span> <span class=\"err\">&#39;<\/span><span class=\"n\">bzero<\/span><span class=\"err\">&#39;<\/span> <span class=\"n\">macro<\/span> <span class=\"n\">redefined<\/span> <span class=\"p\">[<\/span><span class=\"o\">-<\/span><span class=\"n\">Wmacro<\/span><span class=\"o\">-<\/span><span class=\"n\">redefined<\/span><span class=\"p\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cp\">#define bzero please_use_memset_rather_than_bzero\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u800c <code>mysql<\/code> \u4e2d\u7684\u5b8f\u5b9a\u4e49\u5374\u5e76\u975e\u51fd\u6570\u4ee3\u7801\uff0c\u53cd\u800c\u63d0\u793a\u5e94\u8be5\u7528 <code>memset<\/code> \u51fd\u6570\uff0c\u800c\u975e <code>bzero<\/code> \u51fd\u6570\uff0c\u6b64\u610f\u662f\u63d0\u793a <code>MySQL<\/code> \u5f00\u53d1\u8005\u540e\u7eed\u8981\u4fee\u6539\u4ee3\u7801\u4e86\u3002\u6b64\u5904\u662f\u7528 redefined \u6765\u63d0\u793a\uff0c\u5e76\u4e0d\u5bf9\u5b9e\u9645\u8fd0\u884c\u4ea7\u751f\u5f71\u54cd\u3002\u5728 MySQL 8.0 \u4e2d\u5df2\u7ecf\u6ca1\u4e86\u6b64\u7c7b\u63d0\u793a\u3002<\/p>\n<p>\u6240\u4ee5\uff0c\u6b64\u7c7b Warning \u6211\u4eec\u53ef\u5ffd\u7565\u3002<\/p>\n<h3 id=\"expanded-from-macro-mysql_version_major\">expanded from macro MYSQL_VERSION_MAJOR<\/h3>\n<p>\u53c2\u8003 <a href=\"..\/mysql-source-version-conflict-in-cpp-11\">MySQL \u6e90\u7801 \u2014\u2014 \u95ee\u9898 expanded from macro MYSQL_VERSION_MAJOR<\/a><\/p>\n<h3 id=\"cannot-find-appropriate-system-libraries-for-with_sslsystem\">Cannot find appropriate system libraries for WITH_SSL=system<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">Cannot find appropriate system libraries <span class=\"k\">for<\/span> <span class=\"nv\">WITH_SSL<\/span><span class=\"o\">=<\/span>system.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Make sure you have specified a supported SSL version. \n<\/span><\/span><span class=\"line\"><span class=\"cl\">Valid options are : \n<\/span><\/span><span class=\"line\"><span class=\"cl\">system <span class=\"o\">(<\/span>use the OS openssl library<span class=\"o\">)<\/span>, \n<\/span><\/span><span class=\"line\"><span class=\"cl\">yes <span class=\"o\">(<\/span>synonym <span class=\"k\">for<\/span> system<span class=\"o\">)<\/span>, \n<\/span><\/span><span class=\"line\"><span class=\"cl\">&lt;\/path\/to\/custom\/openssl\/installation&gt;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">CMake Error at cmake\/ssl.cmake:63 <span class=\"o\">(<\/span>MESSAGE<span class=\"o\">)<\/span>:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Please install the appropriate openssl developer package.\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Call Stack <span class=\"o\">(<\/span>most recent call first<span class=\"o\">)<\/span>:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  cmake\/ssl.cmake:280 <span class=\"o\">(<\/span>FATAL_SSL_NOT_FOUND_ERROR<span class=\"o\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  CMakeLists.txt:568 <span class=\"o\">(<\/span>MYSQL_CHECK_SSL<span class=\"o\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>CMake \u6ca1\u627e\u5230 openssl \u5f00\u53d1\u5305\u3002\u7cfb\u7edf\u53ef\u80fd\u81ea\u5e26\u4e86 openssl\uff0c\u4f46\u5374\u4ec5\u6709\u8f6f\u4ef6\uff0c\u800c\u6ca1\u6709\u5f00\u53d1\u5305\u3002\u6545\u9700\u8981\u624b\u52a8\u8865\u4e0a\uff0c\u672c\u6587\u4f7f\u7528 Brew \u5feb\u901f\u5b89\u88c5\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-shell\" data-lang=\"shell\"><span class=\"line\"><span class=\"cl\">\/\/ \u5148\u68c0\u67e5\u662f\u5426\u5df2\u5b89\u88c5\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u4e3a\u5565\u5148\u68c0\u67e5\uff1f\u56e0\u4e3a\u53ef\u80fd\u88c5\u5176\u4ed6\u8f6f\u4ef6\u7684\u65f6\u5019\u5df2\u7ecf\u5b89\u88c5\u4e0a\u6b64\u4f9d\u8d56\u4e86\n<\/span><\/span><span class=\"line\"><span class=\"cl\">brew list <span class=\"p\">|<\/span> grep openssl\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u5982\u679c\u6ca1\u5b89\u88c5\uff0c\u5219\u5148\u5b89\u88c5\uff08\u5df2\u5b89\u88c5\u5219\u8df3\u8fc7\u6b64\u6b65\uff09\n<\/span><\/span><span class=\"line\"><span class=\"cl\">brew install openssl@1.1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u5f3a\u884c\u94fe\u63a5\u5230 brew \u5b89\u88c5\u7684 openssl\n<\/span><\/span><span class=\"line\"><span class=\"cl\">brew link openssl@1.1 --force\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u518d\u6839\u636e\u63d0\u793a\uff0c\u914d\u7f6e\u73af\u5883\u53d8\u91cf\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">echo<\/span> <span class=\"s1\">&#39;export PATH=&#34;\/opt\/homebrew\/opt\/openssl@1.1\/bin:$PATH&#34;&#39;<\/span> &gt;&gt; ~\/.zshrc\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"cmake-ssl-version-must-be-at-least-111\">CMake: SSL version must be at least 1.1.1<\/h3>\n<p>\u539f\u56e0\uff1a\u7cfb\u7edf\u9ed8\u8ba4 <code>openssl<\/code> \u7248\u672c\u4e0d\u662f <code>1.1.1<\/code>\uff0c\u9700\u989d\u5916\u5b89\u88c5\u4e2a <code>openssl@1.1<\/code>\uff0c\u6bd4\u5982\u4f7f\u7528 <code>brew install openssl@1.1<\/code>\u3002<\/p>\n<p>\u7136\u540e CMake \u914d\u7f6e\u9009\u9879\uff0c\u589e\u52a0 <code>-DWITH_SSL=\/opt\/homebrew\/Cellar\/openssl@1.1\/1.1.1w<\/code> \u4ee5\u6307\u5b9a\u5b89\u88c5\u8def\u5f84\u3002<\/p>\n<p>\u8fd9\u6837\u5c31\u53ef\u4ee5\u4f7f\u5f97 <code>OpenSSL<\/code> \u591a\u7248\u672c\u5171\u5b58\u800c\u4e0d\u5f71\u54cd\u5176\u4ed6\u8f6f\u4ef6\u3002<\/p>\n<p>\u53ef\u53c2\u8003\u6587\u7ae0 <a href=\"..\/mysql-source-cmake-openssl-version\">MySQL \u6e90\u7801\u9605\u8bfb \u2014\u2014 \u95ee\u9898 CMake\uff1aSSL version must be at least 1.1.1<\/a>\u3002<\/p>\n<h3 id=\"\u7f16\u8bd1-mysql-\u7b49\u5de5\u5177\">\u7f16\u8bd1 mysql \u7b49\u5de5\u5177<\/h3>\n<p>\u6b64\u524d\uff0c\u6211\u4eec\u53ea\u7f16\u8bd1\u4e86 <code>mysqld<\/code> \u670d\u52a1\u5668\u8fd9\u4e00\u4e2a\u8f6f\u4ef6\u3002\u4f46\u6211\u4eec\u9700\u8981 <code>mysql<\/code> \u5ba2\u6237\u7aef\uff0c\u6216 <code>mysqldump<\/code> \u7b49\u5176\u4ed6\u5de5\u5177\u65f6\uff0c\u4e5f\u53ef\u4ee5\u9009\u62e9\u914d\u7f6e\u5176\u4ed6\u9879\uff0c\u5e76\u70b9\u51fb <code>Build<\/code> \u5c31\u53ef\u4ee5\u3002<\/p>\n<p><img src=\"media\/16298747278383.jpg\" alt=\"build-mysql\"><\/p>\n<h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/internals\/en\/cmake.html\">\u300aMySQL Internals Manual\u300bBuilding MySQL Server with CMake<\/a><\/li>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/source-installation.html\">\u300aMySQL 5.7 Reference Manual\u300bInstalling MySQL from Source<\/a><\/li>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/source-configuration-options.html\">\u300aMySQL 5.7 Reference Manual\u300bMySQL Source-Configuration Options<\/a><\/li>\n<li><a href=\"..\/mysql-source-version-conflict-in-cpp-11\">MySQL \u6e90\u7801\u9605\u8bfb \u2014\u2014 \u95ee\u9898 expanded from macro MYSQL_VERSION_MAJOR<\/a><\/li>\n<\/ul>"},{"title":"MySQL \u6162\u67e5\u8be2 \u2014\u2014 \u503c\u7c7b\u578b\u4e0e\u5b57\u6bb5\u7c7b\u578b\u4e0d\u4e00\u81f4\u7684\u9690\u5f0f\u8f6c\u6362","link":"https:\/\/shockerli.net\/post\/mysql-slow-sql-implicit-type-conversion\/","pubDate":"Tue, 24 Aug 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/mysql-slow-sql-implicit-type-conversion\/","description":"<h2 id=\"\u793a\u4f8b\u6162-sql\">\u793a\u4f8b\u6162 SQL<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sql\" data-lang=\"sql\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">SELECT<\/span><span class=\"w\"> <\/span><span class=\"o\">*<\/span><span class=\"w\"> <\/span><span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"n\">task_engine_base_data<\/span><span class=\"w\"> <\/span><span class=\"k\">WHERE<\/span><span class=\"w\"> <\/span><span class=\"n\">outer_task_id<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"mi\">1001871<\/span><span class=\"w\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u573a\u666f\u4e0a\u4e0b\u6587\">\u573a\u666f\u4e0a\u4e0b\u6587<\/h2>\n<ul>\n<li>\u6570\u636e\u8868\u7ed3\u6784\u73b0\u72b6<\/li>\n<\/ul>\n<blockquote>\n<p>\u4e3a\u51cf\u5c11\u9605\u8bfb\u5e72\u6270\uff0c\u5df2\u53bb\u9664\u4e0e\u672c\u6848\u4f8b\u65e0\u5173\u7684\u5b57\u6bb5\u53ca\u7d22\u5f15\u5b9a\u4e49<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sql\" data-lang=\"sql\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">CREATE<\/span><span class=\"w\"> <\/span><span class=\"k\">TABLE<\/span><span class=\"w\"> <\/span><span class=\"o\">`<\/span><span class=\"n\">task_engine_base_data<\/span><span class=\"o\">`<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">  <\/span><span class=\"o\">`<\/span><span class=\"n\">id<\/span><span class=\"o\">`<\/span><span class=\"w\"> <\/span><span class=\"nb\">bigint<\/span><span class=\"p\">(<\/span><span class=\"mi\">20<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">unsigned<\/span><span class=\"w\"> <\/span><span class=\"k\">NOT<\/span><span class=\"w\"> <\/span><span class=\"k\">NULL<\/span><span class=\"w\"> <\/span><span class=\"n\">AUTO_INCREMENT<\/span><span class=\"w\"> <\/span><span class=\"k\">COMMENT<\/span><span class=\"w\"> <\/span><span class=\"s1\">&#39;\u4e3b\u952eID&#39;<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">  <\/span><span class=\"o\">`<\/span><span class=\"n\">task_type_id<\/span><span class=\"o\">`<\/span><span class=\"w\"> <\/span><span class=\"nb\">int<\/span><span class=\"p\">(<\/span><span class=\"mi\">11<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"k\">NOT<\/span><span class=\"w\"> <\/span><span class=\"k\">NULL<\/span><span class=\"w\"> <\/span><span class=\"k\">DEFAULT<\/span><span class=\"w\"> <\/span><span class=\"s1\">&#39;0&#39;<\/span><span class=\"w\"> <\/span><span class=\"k\">COMMENT<\/span><span class=\"w\"> <\/span><span class=\"s1\">&#39;\u4efb\u52a1\u7c7b\u578bID&#39;<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">  <\/span><span class=\"o\">`<\/span><span class=\"n\">outer_task_id<\/span><span class=\"o\">`<\/span><span class=\"w\"> <\/span><span class=\"nb\">varchar<\/span><span class=\"p\">(<\/span><span class=\"mi\">64<\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"k\">NOT<\/span><span class=\"w\"> <\/span><span class=\"k\">NULL<\/span><span class=\"w\"> <\/span><span class=\"k\">DEFAULT<\/span><span class=\"w\"> <\/span><span class=\"s1\">&#39;&#39;<\/span><span class=\"w\"> <\/span><span class=\"k\">COMMENT<\/span><span class=\"w\"> <\/span><span class=\"s1\">&#39;\u5916\u90e8\u4efb\u52a1ID&#39;<\/span><span class=\"p\">,<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">  <\/span><span class=\"k\">PRIMARY<\/span><span class=\"w\"> <\/span><span class=\"k\">KEY<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"o\">`<\/span><span class=\"n\">id<\/span><span class=\"o\">`<\/span><span class=\"p\">),<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">  <\/span><span class=\"k\">KEY<\/span><span class=\"w\"> <\/span><span class=\"o\">`<\/span><span class=\"n\">idx_outer_id_type_id<\/span><span class=\"o\">`<\/span><span class=\"w\"> <\/span><span class=\"p\">(<\/span><span class=\"o\">`<\/span><span class=\"n\">outer_task_id<\/span><span class=\"o\">`<\/span><span class=\"p\">,<\/span><span class=\"o\">`<\/span><span class=\"n\">task_type_id<\/span><span class=\"o\">`<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"><\/span><span class=\"p\">)<\/span><span class=\"w\"> <\/span><span class=\"n\">ENGINE<\/span><span class=\"o\">=<\/span><span class=\"n\">InnoDB<\/span><span class=\"w\"> <\/span><span class=\"k\">DEFAULT<\/span><span class=\"w\"> <\/span><span class=\"n\">CHARSET<\/span><span class=\"o\">=<\/span><span class=\"n\">utf8mb4<\/span><span class=\"w\"> <\/span><span class=\"k\">COMMENT<\/span><span class=\"o\">=<\/span><span class=\"s1\">&#39;\u5b50\u4efb\u52a1\u89c4\u5219\u8868&#39;<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u539f\u56e0\u5206\u6790\">\u539f\u56e0\u5206\u6790<\/h2>\n<blockquote>\n<p>\u6162SQL\u7684EXPLAIN<\/p>\n<\/blockquote>\n<p><img src=\"media\/16293606604210.jpg\" alt=\"\u6162SQL\u7684EXPLAIN\"><\/p>\n<p>\u8868\u4e2d\u5b58\u5728\u7d22\u5f15 <code>idx_outer_id_type_id(outer_task_id,task_type_id)<\/code>\u3002<\/p>\n<p>\u5b57\u6bb5\u5b9a\u4e49 <code>outer_task_id varchar(64) NOT NULL DEFAULT ''<\/code>\u3002<\/p>\n<p>\u5b57\u6bb5\u7c7b\u578b\u4e3a\u5b57\u7b26\u4e32\uff0c\u4f46\u67e5\u8be2\u6761\u4ef6\u7684\u503c\u4e3a\u6574\u578b\uff0c\u5bfc\u81f4 MySQL \u9690\u5f0f\u8f6c\u6362\u3002<\/p>\n<p>\u5217\u503c\u4f1a\u88ab\u8f6c\u6362\u6210\u6d6e\u70b9\u6570\u7c7b\u578b\uff0c\u5373 <code>CAST(col_name AS DOUBLE) = XXX<\/code>\uff0c\u5bf9\u5217\u503c\u8fdb\u884c\u4e86\u8ba1\u7b97\uff0c<strong>\u65e0\u6cd5\u4f7f\u7528\u7d22\u5f15<\/strong>\u3002<\/p>\n<h2 id=\"\u89e3\u51b3\u65b9\u6848\">\u89e3\u51b3\u65b9\u6848<\/h2>\n<p>\u7a0b\u5e8f\u4e2d\u5f3a\u5236\u8f6c\u6362\u503c\u7684\u7c7b\u578b\uff0c\u4e0e\u6570\u636e\u5e93\u5b57\u6bb5\u7c7b\u578b\u4fdd\u6301\u5b8c\u5168\u4e00\u81f4\uff0c\u907f\u514d\u9690\u5f0f\u8f6c\u6362\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sql\" data-lang=\"sql\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">SELECT<\/span><span class=\"w\"> <\/span><span class=\"o\">*<\/span><span class=\"w\"> <\/span><span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"n\">task_engine_base_data<\/span><span class=\"w\"> <\/span><span class=\"k\">WHERE<\/span><span class=\"w\"> <\/span><span class=\"n\">outer_task_id<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"s1\">&#39;1001871&#39;<\/span><span class=\"w\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6216\u8005\u4f7f\u7528 <code>CAST<\/code> \u8f6c\u6362\u67e5\u8be2\u503c\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sql\" data-lang=\"sql\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">SELECT<\/span><span class=\"w\"> <\/span><span class=\"o\">*<\/span><span class=\"w\"> <\/span><span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"n\">task_engine_base_data<\/span><span class=\"w\"> <\/span><span class=\"k\">WHERE<\/span><span class=\"w\"> <\/span><span class=\"n\">outer_task_id<\/span><span class=\"o\">=<\/span><span class=\"k\">CAST<\/span><span class=\"p\">(<\/span><span class=\"mi\">1001871<\/span><span class=\"w\"> <\/span><span class=\"k\">AS<\/span><span class=\"w\"> <\/span><span class=\"nb\">CHAR<\/span><span class=\"p\">)<\/span><span class=\"w\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u4f18\u5316\u540e\u7684-sql\">\u4f18\u5316\u540e\u7684 SQL<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sql\" data-lang=\"sql\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">SELECT<\/span><span class=\"w\"> <\/span><span class=\"o\">*<\/span><span class=\"w\"> <\/span><span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"n\">task_engine_base_data<\/span><span class=\"w\"> <\/span><span class=\"k\">WHERE<\/span><span class=\"w\"> <\/span><span class=\"n\">outer_task_id<\/span><span class=\"w\"> <\/span><span class=\"o\">=<\/span><span class=\"w\"> <\/span><span class=\"s1\">&#39;1001871&#39;<\/span><span class=\"w\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p>\u518d\u770b\u4f18\u5316\u540e\u7684EXPLAIN<\/p>\n<\/blockquote>\n<p><img src=\"media\/16293605115880.jpg\" alt=\"\u4f18\u5316\u540eSQL\u7684EXPLAIN\"><\/p>\n<h2 id=\"\u77e5\u8bc6\u603b\u7ed3\">\u77e5\u8bc6\u603b\u7ed3<\/h2>\n<p>\u4e24\u4e2a\u9700\u8981\u6bd4\u8f83\u7684\u503c\uff0c\u57fa\u672c\u7c7b\u578b\u4e0d\u4e00\u6837\u65f6\uff0c\u4f1a\u53d1\u751f\u8f6c\u6362\u3002<\/p>\n<p>\u6574\u578b\u4e0e\u5b57\u7b26\u4e32\u7684\u6bd4\u8f83\uff0c\u4e24\u4e2a\u503c\u90fd\u4f1a\u88ab\u8f6c\u6362\u6210\u6d6e\u70b9\u6570\u540e\u518d\u6bd4\u8f83\u3002<\/p>\n<p>\u5bf9\u7d22\u5f15\u5217\u8fdb\u884c\u8ba1\u7b97\uff0c\u4f1a\u5bfc\u81f4\u65e0\u6cd5\u4f7f\u7528\u7d22\u5f15\u3002<\/p>\n<h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/type-conversion.html\">\u300aMySQL 5.7 Reference Manual\u300bType Conversion in Expression Evaluation<\/a><\/li>\n<\/ul>"},{"title":"MySQL \u5168\u5c40\u914d\u7f6e --secure-file-priv","link":"https:\/\/shockerli.net\/post\/mysql-secure-file-priv\/","pubDate":"Thu, 19 Aug 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/mysql-secure-file-priv\/","description":"<h2 id=\"\u4e00\u5219\u95ee\u9898\">\u4e00\u5219\u95ee\u9898<\/h2>\n<p>\u5728\u6267\u884c\u5bfc\u51fa <code>INFORMATION_SCHEMA.OPTIMIZER_TRACE<\/code> \u5185\u5bb9\u5230\u672c\u5730\u6587\u4ef6\u65f6\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sql\" data-lang=\"sql\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">SELECT<\/span><span class=\"w\"> <\/span><span class=\"n\">TRACE<\/span><span class=\"w\"> <\/span><span class=\"k\">INTO<\/span><span class=\"w\"> <\/span><span class=\"n\">DUMPFILE<\/span><span class=\"w\"> <\/span><span class=\"s2\">&#34;optimizer_trace.txt&#34;<\/span><span class=\"w\"> <\/span><span class=\"k\">FROM<\/span><span class=\"w\"> <\/span><span class=\"n\">INFORMATION_SCHEMA<\/span><span class=\"p\">.<\/span><span class=\"n\">OPTIMIZER_TRACE<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u62a5\u9519\u63d0\u793a\u5982\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">(1290, &#39;The MySQL server is running with the --secure-file-priv option so it cannot execute this statement&#39;)\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u539f\u56e0\u5206\u6790\">\u539f\u56e0\u5206\u6790<\/h2>\n<p>\u67e5\u770b\u7cfb\u7edf\u53d8\u91cf <code>secure_file_priv<\/code>\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sql\" data-lang=\"sql\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">SHOW<\/span><span class=\"w\"> <\/span><span class=\"n\">VARIABLES<\/span><span class=\"w\"> <\/span><span class=\"k\">LIKE<\/span><span class=\"w\"> <\/span><span class=\"s2\">&#34;secure_file_priv&#34;<\/span><span class=\"p\">;<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"><\/span><span class=\"o\">+<\/span><span class=\"c1\">------------------+-------+\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"o\">|<\/span><span class=\"w\"> <\/span><span class=\"n\">Variable_name<\/span><span class=\"w\">    <\/span><span class=\"o\">|<\/span><span class=\"w\"> <\/span><span class=\"n\">Value<\/span><span class=\"w\"> <\/span><span class=\"o\">|<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"><\/span><span class=\"o\">+<\/span><span class=\"c1\">------------------+-------+\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"o\">|<\/span><span class=\"w\"> <\/span><span class=\"n\">secure_file_priv<\/span><span class=\"w\"> <\/span><span class=\"o\">|<\/span><span class=\"w\"> <\/span><span class=\"k\">NULL<\/span><span class=\"w\">  <\/span><span class=\"o\">|<\/span><span class=\"w\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"w\"><\/span><span class=\"o\">+<\/span><span class=\"c1\">------------------+-------+\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>MySQL \u5bf9\u4e8e\u5bfc\u5165\u5bfc\u51fa\u7684\u76ee\u5f55\u662f\u6709\u9650\u5236\u7684\uff0c\u53ea\u5141\u8bb8\u6307\u5b9a\u7684\u76ee\u5f55\u624d\u80fd\u5bfc\u5165\u5bfc\u51fa\u3002<\/p>\n<p>\u6b64\u5904\u53d8\u91cf\u503c\u4e3a <code>NULL<\/code>\uff0c\u5373\u6ca1\u8bbe\u7f6e\u5141\u8bb8\u64cd\u4f5c\u7684\u76ee\u5f55\uff0c\u6240\u4ee5\u6ca1\u6cd5\u5bfc\u51fa\u5230\u6587\u4ef6\u3002<\/p>\n<h2 id=\"\u77e5\u8bc6\u89e3\u8bfb\">\u77e5\u8bc6\u89e3\u8bfb<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u540d\u8bcd<\/th>\n<th>\u542b\u4e49<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Command-Line Format<\/td>\n<td><code>--secure-file-priv=dir_name<\/code><\/td>\n<\/tr>\n<tr>\n<td>System Variable<\/td>\n<td><code>secure_file_priv<\/code><\/td>\n<\/tr>\n<tr>\n<td>Scope<\/td>\n<td><code>Global<\/code><\/td>\n<\/tr>\n<tr>\n<td>Dynamic<\/td>\n<td><code>No<\/code><\/td>\n<\/tr>\n<tr>\n<td>Type<\/td>\n<td><code>String<\/code><\/td>\n<\/tr>\n<tr>\n<td>Default Value<\/td>\n<td><code>platform specific<\/code><\/td>\n<\/tr>\n<tr>\n<td>Valid Values<\/td>\n<td><code>empty string<\/code>\u3001<code>dirname<\/code>\u3001<code>NULL<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><code>secure_file_priv<\/code> \u8fd9\u4e2a\u53d8\u91cf\u88ab\u7528\u4e8e\u9650\u5236\u5bfc\u5165\u548c\u5bfc\u51fa\u7684\u6570\u636e\u76ee\u5f55\uff0c\u6bd4\u5982 <code>LOAD DATA<\/code> \u548c <code>SELECT ... INTO OUTFILE<\/code> \u8bed\u53e5\uff0c\u4ee5\u53ca <code>LOAD_FILE()<\/code> \u51fd\u6570\u3002\u8fd9\u4e9b\u64cd\u4f5c\u9650\u5236\u4e86\u54ea\u4e9b\u7528\u6237\u62e5\u6709\u6587\u4ef6\u64cd\u4f5c\u6743\u9650\u3002<\/p>\n<p><code>secure_file_priv<\/code> \u6709\u4e9b\u8bbe\u7f6e\u9009\u9879:<\/p>\n<ul>\n<li>\u5982\u679c\u4e3a\u7a7a\uff0c\u4e0d\u505a\u76ee\u5f55\u9650\u5236\uff0c\u5373\u4efb\u4f55\u76ee\u5f55\u5747\u53ef\u4ee5\u3002<\/li>\n<li>\u5982\u679c\u6307\u5b9a\u4e86\u76ee\u5f55\uff0cMySQL \u4f1a\u9650\u5236\u53ea\u80fd\u4ece\u8be5\u76ee\u5f55\u5bfc\u5165\u3001\u6216\u5bfc\u51fa\u5230\u8be5\u76ee\u5f55\u3002\u76ee\u5f55\u5fc5\u987b\u5df2\u5b58\u5728\uff0cMySQL \u4e0d\u4f1a\u81ea\u52a8\u521b\u5efa\u8be5\u76ee\u5f55\u3002<\/li>\n<li>\u5982\u679c\u8bbe\u7f6e\u4e3a <code>NULL<\/code>\uff0cMySQL \u670d\u52a1\u5668\u7981\u6b62\u5bfc\u5165\u4e0e\u5bfc\u51fa\u529f\u80fd\u3002<\/li>\n<\/ul>\n<p>\u8be5\u53d8\u91cf\u7684\u9ed8\u8ba4\u503c\uff0c\u662f\u7531\u7f16\u8bd1\u65f6\u7684 <code>CMake<\/code> \u9009\u9879\u800c\u5b9a\uff0c\u5177\u4f53\u53ef\u53c2\u8003<a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/server-system-variables.html#sysvar_secure_file_priv\">\u5b98\u65b9\u6587\u6863<\/a>\u3002<\/p>\n<p>MySQL \u670d\u52a1\u5668\u5728\u542f\u52a8\u65f6\uff0c\u4f1a\u68c0\u67e5 <code>secure_file_priv<\/code> \u53d8\u91cf\u503c\uff0c\u5982\u679c\u503c\u4e0d\u5b89\u5168\u4f1a\u5728\u9519\u8bef\u65e5\u5fd7\u4e2d\u5199\u4e00\u4e2a WARNING \u7ea7\u522b\u7684\u65e5\u5fd7\u3002\u4ee5\u4e0b\u60c5\u51b5\u5c5e\u4e8e\u4e0d\u5b89\u5168\u7684\u8bbe\u7f6e\uff1a<\/p>\n<ul>\n<li>\u503c\u4e3a\u7a7a<\/li>\n<li>\u503c\u4e3a<code>--datadir<\/code>\u76ee\u5f55\u6216\u5176\u5b50\u76ee\u5f55<\/li>\n<li>\u6240\u6709\u7528\u6237\u5747\u6709\u6743\u9650\u8bbf\u95ee\u7684\u76ee\u5f55<\/li>\n<\/ul>\n<p>\u6bd4\u5982\u5f53\u6211\u8bbe\u7f6e\u4e3a\u7a7a\u65f6\uff0c\u9519\u8bef\u65e5\u5fd7\u4e2d\u5c31\u591a\u4e86\u8fd9\u4e48\u6761\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">[Warning] Insecure configuration for --secure-file-priv: Current value does not restrict location of generated files. Consider setting it to a valid, non-empty path.\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5982\u679c\u914d\u7f6e\u7684\u76ee\u5f55\u5e76\u4e0d\u5b58\u5728\uff0cMySQL \u670d\u52a1\u5668\u4e5f\u4f1a\u5199\u4e00\u6761\u9519\u8bef\u65e5\u5fd7\u3002\u4f8b\u5982\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">[ERROR] Failed to access directory for --secure-file-priv. Please make sure that directory exists and is accessible by MySQL Server. Supplied value : \/path\/not\/exist\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u89e3\u51b3\u65b9\u6848\">\u89e3\u51b3\u65b9\u6848<\/h2>\n<ul>\n<li>\n<p>\u5982\u679c\u53d8\u91cf\u503c\u4e3a <code>NULL<\/code>\uff0c\u90a3\u4e48\u53ea\u80fd\u4fee\u6539\u670d\u52a1\u5668\u914d\u7f6e\uff1a<\/p>\n<blockquote>\n<p>\u4fee\u6539 <code>my.cnf<\/code> \u6587\u4ef6\uff0c\u5728 <code>[mysqld]<\/code> \u5757\u4e0b\uff0c\u5982\u679c\u6ca1\u6709 <code>secure_file_priv<\/code> \u5219\u65b0\u589e<\/p>\n<p>\u6307\u5b9a\u76ee\u5f55\uff1a<code>secure_file_priv=\/path\/to\/data<\/code><\/p>\n<p>\u4e0d\u9650\u76ee\u5f55\uff1a<code>secure_file_priv=<\/code><\/p>\n<p>\u7981\u6b62\u64cd\u4f5c\uff1a<code>secure_file_priv=NULL<\/code><\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>\u5982\u679c\u53d8\u91cf\u503c\u4e3a\u5177\u4f53\u76ee\u5f55\uff0c\u5219\u53ef\u4ee5\u8003\u8651\u5bfc\u51fa\u5230\u6307\u5b9a\u76ee\u5f55\uff0c\u6216\u8005\u4ece\u6307\u5b9a\u76ee\u5f55\u5bfc\u51fa\u3002<\/p>\n<\/li>\n<li>\n<p>\u5982\u679c\u53d8\u91cf\u503c\u4e3a\u7a7a\uff0c\u5219\u53ef\u4ee5\u4f7f\u7528\u4efb\u610f\u76ee\u5f55\u3002<\/p>\n<\/li>\n<\/ul>\n<h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/server-system-variables.html#sysvar_secure_file_priv\">MySQL 5.7 Reference Manual: Server System Variables<\/a><\/li>\n<\/ul>"},{"title":"PHP Homebrew \u7248\u672c\u95ee\u9898 dyld: Library not load","link":"https:\/\/shockerli.net\/post\/php-homebrew-dyld-library-not-load\/","pubDate":"Mon, 16 Aug 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/php-homebrew-dyld-library-not-load\/","description":"<h2 id=\"\u73af\u5883\">\u73af\u5883<\/h2>\n<p><code>macOS<\/code>\u3001<code>Homebrew<\/code>\u3001<code>PHP 7.1.x<\/code><\/p>\n<h2 id=\"\u95ee\u9898\">\u95ee\u9898<\/h2>\n<p>\u6267\u884c <code>php<\/code> \u65f6\u62a5\u9519\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">dyld: Library not loaded: \/usr\/local\/opt\/openldap\/lib\/libldap-2.4.2.dylib\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Referenced from: \/usr\/local\/opt\/php@7.1\/bin\/php\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  Reason: image not found\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">[<\/span>1<span class=\"o\">]<\/span>    <span class=\"m\">24650<\/span> abort      php\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u8d77\u56e0\">\u8d77\u56e0<\/h2>\n<p>\u901a\u8fc7 <code>brew<\/code> \u66f4\u65b0\u4e86\u5176\u4ed6\u6709\u4f9d\u8d56\u6b64 <code>Library<\/code> \u7684\u8f6f\u4ef6<\/p>\n<h2 id=\"\u539f\u56e0\">\u539f\u56e0<\/h2>\n<p>\u66f4\u65b0\u5176\u4ed6\u8f6f\u4ef6\u65f6\uff0c\u4e5f\u4e00\u5e76\u66f4\u65b0\u4e86\u4f9d\u8d56\uff0c\u5bfc\u81f4 PHP \u4f9d\u8d56\u7684\u8f6f\u4ef6\u7248\u672c\u4e0d\u7b26\u3002<\/p>\n<p>\u6bd4\u5982\u6b64\u6848\u4f8b\u4e2d\uff0cPHP \u4f9d\u8d56\u7684 <code>openldap<\/code> \u7248\u672c\u662f <code>2.4.2<\/code>\uff0c\u800c\u5b9e\u9645\u6700\u65b0\u5b89\u88c5\u7684\u662f <code>2.5.6<\/code>\u3002<\/p>\n<h2 id=\"\u89e3\u51b3\">\u89e3\u51b3<\/h2>\n<p>\u91cd\u65b0\u5b89\u88c5 PHP\u3002\u4f8b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">brew reinstall shivammathur\/php\/php@7.1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"\u4f18\u79c0\u5185\u5bb9\u5206\u4eab","link":"https:\/\/shockerli.net\/share\/","pubDate":"Thu, 12 Aug 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/share\/","description":"<h1 id=\"\u6587\u7ae0\">\u6587\u7ae0<\/h1>\n<ul>\n<li><a href=\"https:\/\/tonsky.me\/blog\/disenchantment\/zh\/\">\u8f6f\u4ef6\u5e7b\u706d\uff08\u8bd1\uff09<\/a> - by <strong>tonsky<\/strong><\/li>\n<li><a href=\"https:\/\/ryougifujino.com\/post\/10\">[\u8bd1] \u7ba1\u7406\u6e90\u7801\u5206\u652f\u7684\u6a21\u5f0f<\/a> - by <strong>ryougifujino<\/strong><\/li>\n<li><a href=\"https:\/\/lailin.xyz\/post\/go-training-03.html\">Go\u9519\u8bef\u5904\u7406\u6700\u4f73\u5b9e\u8df5<\/a> - by <strong>mohuishou<\/strong><\/li>\n<li><a href=\"https:\/\/mp.weixin.qq.com\/s\/eAptnygPQcQ5Ex8-6l0byA\">Golang \u5355\u5143\u6d4b\u8bd5\u8be6\u5c3d\u6307\u5f15<\/a> - by <strong>yukkizhang<\/strong><\/li>\n<li><a href=\"https:\/\/mp.weixin.qq.com\/s\/tN27osC6K0NM-Laj9MbtsA\">Golang \u6c47\u7f16\u5165\u95e8\u77e5\u8bc6\u603b\u7ed3<\/a> - by <strong>ivansli<\/strong><\/li>\n<li><a href=\"http:\/\/kaelzhang81.github.io\/2017\/06\/18\/%E8%AF%A6%E8%A7%A3%E5%9C%88%E5%A4%8D%E6%9D%82%E5%BA%A6\/\">\u8be6\u89e3\u5708\u590d\u6742\u5ea6<\/a> - by <strong>Kaelzhang<\/strong><\/li>\n<li><a href=\"https:\/\/www.infoq.cn\/article\/change-driven-orthogonal-design\">\u53d8\u5316\u9a71\u52a8\uff1a\u6b63\u4ea4\u8bbe\u8ba1<\/a> - by <strong>\u8881\u82f1\u6770<\/strong><\/li>\n<li><a href=\"https:\/\/draveness.me\/whys-the-design-database-data-loss\/\">\u4e3a\u4ec0\u4e48\u6570\u636e\u5e93\u4f1a\u4e22\u5931\u6570\u636e<\/a> - by <strong>draveness<\/strong><\/li>\n<\/ul>\n"},{"title":"\u5173\u4e8e","link":"https:\/\/shockerli.net\/about\/","pubDate":"Tue, 10 Aug 2021 00:00:00 +0000","guid":"https:\/\/shockerli.net\/about\/","description":"<h1 id=\"\u5173\u4e8e\u6211\">\u5173\u4e8e\u6211<\/h1>\n<p><strong>Jioby<\/strong><\/p>\n<p>\u7269\u7406\u5b66\u4e0d\u4f1a\uff0c\u7f16\u7a0b\u6df7\u996d\u5403\u3002<\/p>\n<p>\u8bb0\u5f55\u662f\u4e3a\u4e86\u8ba9\u81ea\u5df1\u6ca1\u90a3\u4e48\u61d2\u3002<\/p>\n<blockquote>\n<p>\u65e0\u5584\u65e0\u6076\u5fc3\u4e4b\u4f53\uff0c\u6709\u5584\u6709\u6076\u610f\u4e4b\u52a8\u3002\u77e5\u5584\u77e5\u6076\u662f\u826f\u77e5\uff0c\u4e3a\u5584\u53bb\u6076\u662f\u683c\u7269\u3002<\/p>\n<\/blockquote>\n<h2 id=\"\u8054\u7cfb\u6211\">\u8054\u7cfb\u6211<\/h2>\n<ul>\n<li>Email: c2hvY2tlcmxpW2F0XWZveG1haWwuY29t<\/li>\n<li><a href=\"https:\/\/github.com\/shockerli\">GitHub<\/a><\/li>\n<li><a href=\"https:\/\/segmentfault.com\/u\/shockerli\">SegmentFault<\/a><\/li>\n<li><a href=\"https:\/\/stackoverflow.com\">Stack Overflow<\/a><\/li>\n<li>\u8bc4\u8bba\u533a<\/li>\n<\/ul>\n<h2 id=\"\u5206\u4eab\u8fc7\">\u5206\u4eab\u8fc7<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/shockerli\/etcq\">ETCQ<\/a> - \u8f7b\u91cf\u3001\u7f8e\u89c2\u3001\u5168\u529f\u80fd ETCD \u8de8\u5e73\u53f0\u684c\u9762\u5ba2\u6237\u7aef\uff0c\u652f\u6301 macOS\u3001Windows\u3001Linux<\/li>\n<li><a href=\"https:\/\/github.com\/upfor\/juggler\">Juggler<\/a> - \u5c0f\u5de7\u4f46\u529f\u80fd\u5b9e\u7528\u7684 PHP MySQL \u64cd\u4f5c\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/upfor\/upforphp\">Upfor<\/a> - PHP \u5b9e\u73b0\u7684\u8f7b\u91cf\u7ea7 API \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/upfor\/forkman\">ForkMan<\/a> - \u57fa\u4e8e pipe \u5b9e\u73b0\u7684\u8f7b\u91cf\u7ea7 PHP \u591a\u8fdb\u7a0b\u4efb\u52a1\u7ba1\u7406\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/shockerli\/spiker\">Spiker<\/a> - \u7eaf Go \u65e0\u4f9d\u8d56\u7684\u5b9e\u65f6\u89c4\u5219\u8ba1\u7b97\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/shockerli\/cvt\">cvt<\/a> - Go \u8bed\u8a00\u7b80\u5355\u3001\u5b89\u5168\u7684\u8f6c\u6362\u4efb\u610f\u7c7b\u578b\u503c\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u7c7b\u578b<\/li>\n<li><a href=\"https:\/\/github.com\/shockerli\/dingtalk\">dingtalk<\/a> - \u9489\u9489 Go SDK\uff08\u7fa4\u673a\u5668\u4eba\uff09<\/li>\n<\/ul>\n<h2 id=\"\u597d\u8d44\u6e90\">\u597d\u8d44\u6e90<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/shockerli\/go-awesome\">go-awesome<\/a> - Go \u6559\u7a0b\u3001\u6587\u6863\u3001\u5927\u4f6c\u3001\u5305\u3001\u5de5\u5177\u7b49\u4e00\u5343\u591a\u4e2a\u4f18\u79c0\u8d44\u6e90<\/li>\n<li><a href=\"https:\/\/github.com\/shockerli\/php-awesome\">php-awesome<\/a> - PHP \u6559\u7a0b\u3001\u6587\u7ae0\u3001\u5f00\u6e90\u5e93\u3001\u5de5\u5177\u7b49\u8fd1\u5343\u4e2a\u4f18\u79c0\u8d44\u6e90<\/li>\n<\/ul>\n"},{"title":"Go \u8bed\u8a00\u89c4\u8303 - \u7f16\u7801\u98ce\u683c\uff082020\uff09","link":"https:\/\/shockerli.net\/post\/go-code-guide-style\/","pubDate":"Fri, 06 Nov 2020 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/go-code-guide-style\/","description":"<blockquote>\n<p>\u5f53\u524d\u7248\u672c: v1.0.20201106<\/p>\n<p>GitHub: <a href=\"https:\/\/github.com\/shockerli\/go-code-guide\">shockerli\/go-code-guide<\/a><\/p>\n<\/blockquote>\n<h2 id=\"\u547d\u540d\u89c4\u5219\">\u547d\u540d\u89c4\u5219<\/h2>\n<ul>\n<li>\u7ad9\u5728\u8c03\u7528\u8005\u7684\u89d2\u5ea6\uff0c\u5305\u4e0d\u662f\u7ed9\u4f60\u81ea\u5df1\u7528\u7684<\/li>\n<li>\u7b80\u6d01\u3001\u4e14\u89c1\u540d\u77e5\u4e49<\/li>\n<li>\u91c7\u7528\u901a\u7528\u3001\u5927\u4f17\u719f\u77e5\u7684\u7f29\u5199\u547d\u540d\u3002\u6bd4\u5982<code>buf<\/code>\u800c\u4e0d\u662f<code>bufio<\/code><\/li>\n<li>\u5982\u679c\u7f29\u5199\u7684\u540d\u5b57\u4f1a\u4ea7\u751f\u6b67\u4e49\uff0c\u5219\u653e\u5f03\u6216\u6362\u4e2a<\/li>\n<\/ul>\n<h3 id=\"\u6587\u4ef6\u540d\">\u6587\u4ef6\u540d<\/h3>\n<p>\u6574\u4e2a\u5e94\u7528\u6216\u5305\u7684\u4e3b\u5165\u53e3\u6587\u4ef6\u5e94\u5f53\u662f <code>main.go<\/code>\uff0c\u6216\u4e0e\u5e94\u7528\u540d\u79f0\u7b80\u5199\u76f8\u540c\u3002<\/p>\n<p>\u6bd4\u5982\uff1a<code>spiker<\/code> \u5305\u7684\u4e3b\u5165\u53e3\u6587\u4ef6\u662f <code>spiker.go<\/code>\uff0c\u5e94\u7528\u7684\u4e3b\u5165\u53e3\u6587\u4ef6\u662f <code>main.go<\/code><\/p>\n<h3 id=\"\u5305\u540d\">\u5305\u540d<\/h3>\n<ul>\n<li>\n<p>\u5305\u540d\u4e0e\u76ee\u5f55\u540d\u4e00\u81f4<\/p>\n<p>\u5982\u679c\u4e00\u4e2a\u76ee\u5f55\u4e0b\u540c\u65f6\u51fa\u73b0\u591a\u4e2a <code>package<\/code>\uff0c\u5219\u7f16\u8bd1\u5931\u8d25\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">found packages pkg (a.go) and pb (b.go) in XXX\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><\/li>\n<li>\n<p>\u5927\u591a\u6570\u4f7f\u7528\u547d\u540d\u5bfc\u5165\u7684\u60c5\u51b5\u4e0b\uff0c\u4e0d\u9700\u8981\u91cd\u547d\u540d<\/p>\n<p>\u5c11\u8ba9\u8c03\u7528\u8005\u53bb\u8d77\u522b\u540d\uff0c\u9664\u975e\u540d\u5b57\u592a\u70c2<\/p>\n<\/li>\n<li>\n<p>\u5168\u90e8\u5c0f\u5199\uff0c\u6ca1\u6709\u4e0b\u5212\u7ebf\u3001\u5927\u5199\u3002\u9519\u8bef\u793a\u4f8b<code>MyPackage<\/code>\u3001<code>my_package<\/code>\u3001<code>myPackage<\/code><\/p>\n<\/li>\n<li>\n<p>\u4e0d\u7528\u590d\u6570\u3002\u4f8b\u5982<code>net\/url<\/code>\uff0c\u800c\u4e0d\u662f<code>net\/urls<\/code><\/p>\n<\/li>\n<li>\n<p>\u4e0d\u7528\u4fe1\u606f\u91cf\u4e0d\u8db3\u7684\u540d\u5b57\u3002\u9519\u8bef\u793a\u4f8b<code>common<\/code>\u3001<code>lib<\/code>\u3001<code>util<\/code><\/p>\n<\/li>\n<\/ul>\n<h3 id=\"\u5bfc\u5165\u5305\">\u5bfc\u5165\u5305<\/h3>\n<ul>\n<li>\u5982\u679c\u7a0b\u5e8f\u5305\u540d\u79f0\u4e0e\u5bfc\u5165\u8def\u5f84\u7684\u6700\u540e\u4e00\u4e2a\u5143\u7d20\u4e0d\u5339\u914d\uff0c\u5219\u5fc5\u987b\u4f7f\u7528\u5bfc\u5165\u522b\u540d<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">client<\/span> <span class=\"s\">&#34;example.com\/client-go&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">trace<\/span> <span class=\"s\">&#34;example.com\/trace\/v2&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5728\u6240\u6709\u5176\u4ed6\u60c5\u51b5\u4e0b\uff0c\u9664\u975e\u5bfc\u5165\u4e4b\u95f4\u6709\u76f4\u63a5\u51b2\u7a81\uff0c\u5426\u5219\u5e94\u907f\u514d\u5bfc\u5165\u522b\u540d<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;net\/http\/pprof&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">gpprof<\/span> <span class=\"s\">&#34;github.com\/google\/pprof&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\n<p>\u5982\u9047\u91cd\u540d\uff0c\u8bf7\u4fdd\u7559\u6807\u51c6\u5305\u800c\u522b\u540d\u81ea\u5b9a\u4e49\u6216\u7b2c\u4e09\u65b9\u5305<\/p>\n<\/li>\n<li>\n<p>\u5728\u975e\u6d4b\u8bd5\u6587\u4ef6\uff08<code>*_test.go<\/code>\uff09\u4e2d\uff0c\u7981\u6b62\u4f7f\u7528 <code>.<\/code> \u6765\u7b80\u5316\u5bfc\u5165\u5305\u7684\u5bf9\u8c61\u8c03\u7528<\/p>\n<\/li>\n<li>\n<p>\u7981\u6b62\u4f7f\u7528\u76f8\u5bf9\u8def\u5f84\u5bfc\u5165\uff08<code>.\/subpackage<\/code>\uff09\uff0c\u6240\u6709\u5bfc\u5165\u8def\u5f84\u5fc5\u987b\u7b26\u5408 <code>go get<\/code> \u6807\u51c6<\/p>\n<\/li>\n<\/ul>\n<h3 id=\"\u9a7c\u5cf0\u547d\u540d\u6cd5\">\u9a7c\u5cf0\u547d\u540d\u6cd5<\/h3>\n<p>\u5e38\u91cf\u3001\u53d8\u91cf\u3001\u7c7b\u578b\u3001\u7ed3\u6784\u4f53\u3001\u63a5\u53e3\u3001\u51fd\u6570\u3001\u65b9\u6cd5\u3001\u5c5e\u6027\u7b49\uff0c\u5168\u90e8\u4f7f\u7528\u9a7c\u5cf0\u6cd5 MixedCaps \u6216 mixedCaps\u3002<\/p>\n<p>\u4e0b\u5212\u7ebf\u5f00\u5934\u7684\u547d\u540d\u66f4\u4e0d\u5141\u8bb8\uff0cGo \u8bed\u8a00\u7684\u516c\u79c1\u6709\u7edf\u4e00\u7528\u5927\u5c0f\u5199\u5f00\u5934\u6765\u533a\u5206\u3002<\/p>\n<p>\u4f46\u6709\u4e2a\u4f8b\u5916\uff0c\u4e3a\u4e86\u5bf9\u76f8\u5173\u7684\u6d4b\u8bd5\u7528\u4f8b\u8fdb\u884c\u5206\u7ec4\uff0c\u51fd\u6570\u540d\u53ef\u80fd\u5305\u542b\u4e0b\u5212\u7ebf\uff0c\u5982\uff1aTestMyFunction_WhatIsBeingTested\u3002<\/p>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"nx\">ROLE_NAME<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">10<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"nx\">RoleName<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">10<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5e38\u91cf\">\u5e38\u91cf<\/h3>\n<ul>\n<li>\u5982\u679c\u662f\u679a\u4e3e\u7c7b\u578b\u7684\u5e38\u91cf\uff0c\u9700\u8981\u5148\u521b\u5efa\u76f8\u5e94\u7c7b\u578b<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">Scheme<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Http<\/span>  <span class=\"nx\">Scheme<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;http&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Https<\/span> <span class=\"nx\">Scheme<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;https&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5982\u679c\u6a21\u5757\u7684\u529f\u80fd\u8f83\u4e3a\u590d\u6742\u3001\u5e38\u91cf\u540d\u79f0\u5bb9\u6613\u6df7\u6dc6\u7684\u60c5\u51b5\u4e0b\uff0c\u4e3a\u4e86\u66f4\u597d\u5730\u533a\u5206\u679a\u4e3e\u7c7b\u578b\uff0c\u53ef\u4ee5\u4f7f\u7528\u5b8c\u6574\u7684\u524d\u7f00<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">Symbol<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">SymbolAdd<\/span> <span class=\"nx\">Symbol<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;+&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">SymbolSub<\/span> <span class=\"nx\">Symbol<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;-&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u53d8\u91cf\">\u53d8\u91cf<\/h3>\n<ul>\n<li>\n<p>\u5728\u76f8\u5bf9\u7b80\u5355\u7684\u73af\u5883\uff08\u5bf9\u8c61\u6570\u91cf\u5c11\u3001\u9488\u5bf9\u6027\u5f3a\uff09\u4e2d\uff0c\u53ef\u4ee5\u5c06\u4e00\u4e9b\u540d\u79f0\u7531\u5b8c\u6574\u5355\u8bcd\u7b80\u5199\u4e3a\u5355\u4e2a\u5b57\u6bcd<\/p>\n<ul>\n<li><code>user<\/code> \u53ef\u4ee5\u7b80\u5199\u4e3a <code>u<\/code><\/li>\n<li><code>userId<\/code> \u53ef\u4ee5\u7b80\u5199 <code>uid<\/code><\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u82e5\u53d8\u91cf\u7c7b\u578b\u4e3a <code>bool<\/code> \u7c7b\u578b\uff0c\u5219\u540d\u79f0\u5e94\u4ee5 <code>Has<\/code>\u3001<code>Is<\/code>\u3001<code>Can<\/code> \u6216 <code>Allow<\/code> \u5f00\u5934<\/p>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">isExist<\/span> <span class=\"kt\">bool<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">hasConflict<\/span> <span class=\"kt\">bool<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">canManage<\/span> <span class=\"kt\">bool<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">allowGitHook<\/span> <span class=\"kt\">bool<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"url\">URL<\/h3>\n<ul>\n<li>URL \u547d\u540d\u5168\u90e8\u5c0f\u5199<\/li>\n<li>\u7528\u6b63\u659c\u6760 <code>\/<\/code> \u8868\u660e\u5c42\u7ea7\u5173\u7cfb<\/li>\n<li>\u4f7f\u7528\u8fde\u5b57\u7b26 <code>-<\/code> \u6765\u63d0\u9ad8\u957f\u8def\u5f84\u4e2d\u540d\u79f0\u7684\u53ef\u8bfb\u6027<\/li>\n<li>\u4e0d\u5f97\u5728 URL \u4e2d\u4f7f\u7528\u4e0b\u5212\u7ebf <code>_<\/code><\/li>\n<li>URL \u7ed3\u5c3e\u4e0d\u5e94\u5305\u542b\u6b63\u659c\u6760 <code>\/<\/code><\/li>\n<li>\u6587\u4ef6\u6269\u5c55\u540d\u4e0d\u5e94\u5305\u542b\u5728 URL \u4e2d<\/li>\n<li>URL \u9700\u89c1\u540d\u77e5\u610f\uff0c\u4f46\u4e0d\u53ef\u66b4\u9732\u670d\u52a1\u5668\u67b6\u6784<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\/GetUserInfo\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/photos_path\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/My-Folder\/my-doc\/\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/user\/user-list\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">\/user\/list\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/user\/operator-logs\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u51fd\u6570\u65b9\u6cd5\u540d\">\u51fd\u6570\/\u65b9\u6cd5\u540d<\/h3>\n<ul>\n<li>\n<p>\u4e0d\u8981\u753b\u86c7\u6dfb\u8db3<\/p>\n<\/li>\n<li>\n<p>\u957f\u547d\u540d\u5e76\u4e0d\u4f1a\u4f7f\u5176\u66f4\u5177\u53ef\u8bfb\u6027\uff0c\u4e00\u4efd\u6709\u7528\u7684\u8bf4\u660e\u6587\u6863\u901a\u5e38\u6bd4\u989d\u5916\u7684\u957f\u540d\u66f4\u6709\u4ef7\u503c<\/p>\n<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">once<\/span><span class=\"p\">.<\/span><span class=\"nf\">DoOrWaitUntilDone<\/span><span class=\"p\">(<\/span><span class=\"nx\">f<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">once<\/span><span class=\"p\">.<\/span><span class=\"nf\">Do<\/span><span class=\"p\">(<\/span><span class=\"nx\">f<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5728 pkg \u5305\u4e2d\u540d\u4e3a New \u7684\u51fd\u6570\u4f1a\u8fd4\u56de\u4e00\u4e2a pkg.Pkg \u7c7b\u578b\u7684\u503c<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">q<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">list<\/span><span class=\"p\">.<\/span><span class=\"nf\">New<\/span><span class=\"p\">()<\/span>  <span class=\"c1\">\/\/ q is a *list.List\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5f53 pkg \u5305\u4e2d\u67d0\u4e2a\u51fd\u6570\u7684\u8fd4\u56de\u503c\u7c7b\u578b\u4e3a pkg.Pkg \uff08\u6216 *pkg.Pkg \uff09\u65f6\uff0c\u51fd\u6570\u540d\u5e94\u7701\u7565\u7c7b\u578b\u540d<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">start<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">Now<\/span><span class=\"p\">()<\/span>                                  <span class=\"c1\">\/\/ start is a time.Time\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"nx\">t<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">Parse<\/span><span class=\"p\">(<\/span><span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nx\">Kitchen<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;6:06PM&#34;<\/span><span class=\"p\">)<\/span>         <span class=\"c1\">\/\/ t is a time.Time\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5f53\u51fd\u6570\u8fd4\u56de\u7684\u503c\u7c7b\u578b\u4e3a pkg.T \u4e14 T \u4e0d\u4e3a Pkg \u65f6\uff0c\u51fd\u6570\u540d\u5e94\u5305\u542b T \u4ee5\u4fbf\u8ba9\u7528\u6237\u4ee3\u7801\u66f4\u6613\u7406\u89e3<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">ticker<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewTicker<\/span><span class=\"p\">(<\/span><span class=\"nx\">d<\/span><span class=\"p\">)<\/span>          <span class=\"c1\">\/\/ ticker is a *time.Ticker\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"nx\">timer<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">time<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewTimer<\/span><span class=\"p\">(<\/span><span class=\"nx\">d<\/span><span class=\"p\">)<\/span>            <span class=\"c1\">\/\/ timer is a *time.Timer\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\n<p>\u83b7\u53d6\u5668\/\u8bbe\u7f6e\u5668<\/p>\n<p>Go \u5e76\u4e0d\u5bf9\u83b7\u53d6\u5668\uff08getter\uff09\u548c\u8bbe\u7f6e\u5668\uff08setter\uff09\u63d0\u4f9b\u81ea\u52a8\u652f\u6301\u3002\u9488\u5bf9\u67d0\u4e2a\u53d8\u91cf\u6216\u5b57\u6bb5\uff0c\u83b7\u53d6\u5668\u540d\u5b57\u65e0\u9700\u643a\u5e26 <code>Get<\/code>\uff0c\u8bbe\u7f6e\u5668\u540d\u5b57\u4ee5 <code>Set<\/code> \u5f00\u5934\u3002<\/p>\n<p>\u82e5\u4f60\u6709\u4e2a\u540d\u4e3a owner \uff08\u5c0f\u5199\uff0c\u672a\u5bfc\u51fa\uff09\u7684\u5b57\u6bb5\uff0c\u5176\u83b7\u53d6\u5668\u5e94\u5f53\u540d\u4e3a Owner\uff08\u5927\u5199\uff0c\u53ef\u5bfc\u51fa\uff09\u800c\u975e GetOwner\u3002<\/p>\n<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">owner<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">obj<\/span><span class=\"p\">.<\/span><span class=\"nf\">GetOwner<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">owner<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">user<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">obj<\/span><span class=\"p\">.<\/span><span class=\"nf\">SettingOwner<\/span><span class=\"p\">(<\/span><span class=\"nx\">user<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">owner<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">obj<\/span><span class=\"p\">.<\/span><span class=\"nf\">Owner<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">owner<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">user<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">obj<\/span><span class=\"p\">.<\/span><span class=\"nf\">SetOwner<\/span><span class=\"p\">(<\/span><span class=\"nx\">user<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u82e5\u51fd\u6570\u6216\u65b9\u6cd5\u4e3a\u5224\u65ad\u7c7b\u578b\uff08\u8fd4\u56de\u503c\u4e3b\u8981\u4e3a bool \u7c7b\u578b\uff09\uff0c\u5219\u540d\u79f0\u5e94\u4ee5 <code>Has<\/code>\u3001<code>Is<\/code>\u3001<code>Can<\/code> \u6216 <code>Allow<\/code> \u7b49\u5224\u65ad\u6027\u52a8\u8bcd\u5f00\u5934<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">HasPrefix<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span> <span class=\"kt\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">prefixes<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"kt\">bool<\/span> <span class=\"p\">{<\/span> <span class=\"o\">...<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">IsEntry<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span> <span class=\"kt\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">entries<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"kt\">bool<\/span> <span class=\"p\">{<\/span> <span class=\"o\">...<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">CanManage<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"kt\">bool<\/span> <span class=\"p\">{<\/span> <span class=\"o\">...<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">AllowGitHook<\/span><span class=\"p\">()<\/span> <span class=\"kt\">bool<\/span> <span class=\"p\">{<\/span> <span class=\"o\">...<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u63a5\u53e3\u540d\">\u63a5\u53e3\u540d<\/h3>\n<p>\u6309\u7167\u7ea6\u5b9a\uff0c\u53ea\u5305\u542b\u4e00\u4e2a\u65b9\u6cd5\u7684\u63a5\u53e3\u5e94\u5f53\u4ee5\u8be5\u65b9\u6cd5\u7684\u540d\u79f0\u52a0\u4e0a -er \u540e\u7f00\u6765\u547d\u540d\uff0c\u5982 Reader\u3001Writer\u3001Formatter\/CloseNotifier \u7b49\u3002<\/p>\n<p>\u540d\u8bcd\u7528\u4e8e\u63a5\u53e3\u540d\uff0c\u52a8\u8bcd\u7528\u4e8e\u63a5\u53e3\u7684\u65b9\u6cd5\u540d\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">Reader<\/span> <span class=\"kd\">interface<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nf\">Read<\/span><span class=\"p\">(<\/span><span class=\"nx\">p<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"nx\">n<\/span> <span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"error\">Error<\/h3>\n<ul>\n<li><code>Error<\/code> \u7c7b\u578b\u7684\u547d\u540d\u4ee5 <code>Error<\/code> \u7ed3\u5c3e<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">ParseError<\/span> <span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Line<\/span><span class=\"p\">,<\/span> <span class=\"nx\">Col<\/span> <span class=\"kt\">int<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li><code>Error<\/code> \u7c7b\u578b\u7684\u53d8\u91cf\uff0c\u4ee5 <code>Err<\/code>\u5f00\u5934<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">ErrBadAction<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">errors<\/span><span class=\"p\">.<\/span><span class=\"nf\">New<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;somepkg: a bad action was performed&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u8fd4\u56de\u7c7b\u578b\u4e3a <code>Error<\/code> \u7684\u53d8\u91cf\u7f29\u5199\u91c7\u7528 <code>err<\/code><\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">foo<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">res<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nf\">somepkgAction<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">==<\/span> <span class=\"nx\">somepkg<\/span><span class=\"p\">.<\/span><span class=\"nx\">ErrBadAction<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"nx\">pe<\/span><span class=\"p\">,<\/span> <span class=\"nx\">ok<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">err<\/span><span class=\"p\">.(<\/span><span class=\"o\">*<\/span><span class=\"nx\">somepkg<\/span><span class=\"p\">.<\/span><span class=\"nx\">ParseError<\/span><span class=\"p\">);<\/span> <span class=\"nx\">ok<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">             <span class=\"nx\">line<\/span><span class=\"p\">,<\/span> <span class=\"nx\">col<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">pe<\/span><span class=\"p\">.<\/span><span class=\"nx\">Line<\/span><span class=\"p\">,<\/span> <span class=\"nx\">pe<\/span><span class=\"p\">.<\/span><span class=\"nx\">Col<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">             <span class=\"c1\">\/\/ ....\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5176\u4ed6\">\u5176\u4ed6<\/h3>\n<h4 id=\"\u5305\u5185\u5bb9\u7684\u540d\u5b57\u4e0d\u53ef\u4ee5\u5305\u540d\u5f00\u5934\u56e0\u4e3a\u65e0\u9700\u91cd\u590d\u5305\u540d\">\u5305\u5185\u5bb9\u7684\u540d\u5b57\u4e0d\u53ef\u4ee5\u5305\u540d\u5f00\u5934\uff0c\u56e0\u4e3a\u65e0\u9700\u91cd\u590d\u5305\u540d<\/h4>\n<p><code>http<\/code> \u5305\u63d0\u4f9b\u7684 HTTP \u670d\u52a1\u540d\u4e3a <code>http.Server<\/code> \uff0c\u800c\u975e <code>HTTPServer<\/code> \u3002\u7528\u6237\u4ee3\u7801\u901a\u8fc7 <code>http.Server<\/code> \u5f15\u7528\u8be5\u7c7b\u578b\uff0c\u56e0\u6b64\u6ca1\u6709\u6b67\u4e49\u3002<\/p>\n<h4 id=\"\u4e0d\u540c\u5305\u4e2d\u7684\u7c7b\u578b\u540d\u53ef\u4ee5\u76f8\u540c\u56e0\u4e3a\u5ba2\u6237\u7aef\u53ef\u901a\u8fc7\u5305\u540d\u533a\u5206\u5b83\u4eec\">\u4e0d\u540c\u5305\u4e2d\u7684\u7c7b\u578b\u540d\u53ef\u4ee5\u76f8\u540c\uff0c\u56e0\u4e3a\u5ba2\u6237\u7aef\u53ef\u901a\u8fc7\u5305\u540d\u533a\u5206\u5b83\u4eec<\/h4>\n<p>\u4f8b\u5982\uff0c\u6807\u51c6\u5e93\u4e2d\u542b\u6709\u591a\u4e2a\u540d\u4e3a Reader \u7684\u7c7b\u578b\uff0c\u5305\u62ec <code>jpeg.Reader<\/code> \u3001 <code>bufio.Reader<\/code> \u548c <code>csv.Reader<\/code>\u3002\u6bcf\u4e2a\u5305\u540d\u642d\u914d Reader \u90fd\u662f\u4e2a\u4e0d\u9519\u7684\u7c7b\u578b\u540d\u3002<\/p>\n<h2 id=\"\u540d\u8bcd\u7f29\u5199\u8868\">\u540d\u8bcd\u7f29\u5199\u8868<\/h2>\n<table>\n<thead>\n<tr>\n<th style=\"text-align:center\">\u7f29\u5199\u540d<\/th>\n<th>\u8bf4\u660e<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align:center\"><code>ctx<\/code><\/td>\n<td><code>Context<\/code> \u6216\u76f8\u5173\uff0c\u6bd4\u5982 <code>gin.Context<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"\u5206\u53f7\">\u5206\u53f7<\/h2>\n<p>Go \u5176\u5b9e\u4e5f\u662f\u7528\u5206\u53f7\uff08<code>;<\/code>\uff09\u6765\u7ed3\u675f\u8bed\u53e5\uff0c\u4f46 Go \u4e0e JavaScript \u4e00\u6837\u4e0d\u5efa\u8bae\u7ed9\u5355\u4e00\u8bed\u53e5\u672b\u5c3e\u52a0\u5206\u53f7\uff0c\u56e0\u4e3a\u7f16\u8bd1\u5668\u4f1a\u81ea\u52a8\u52a0\u5206\u53f7\u3002<\/p>\n<p>\u50cf\u5982\u4e0b\u8bed\u53e5\u662f\u5b8c\u5168\u53ef\u4ee5\u7684\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">go<\/span> <span class=\"kd\">func<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span> <span class=\"k\">for<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">dst<\/span> <span class=\"o\">&lt;-<\/span> <span class=\"o\">&lt;-<\/span><span class=\"nx\">src<\/span> <span class=\"p\">}<\/span> <span class=\"p\">}()<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u901a\u5e38 Go \u7a0b\u5e8f\u53ea\u5728\u8bf8\u5982 for \u5faa\u73af\u5b50\u53e5\u8fd9\u6837\u7684\u5730\u65b9\u4f7f\u7528\u5206\u53f7\uff0c\u4ee5\u6b64\u6765\u5c06\u521d\u59cb\u5316\u5668\u3001\u6761\u4ef6\u53ca\u589e\u91cf\u5143\u7d20\u5206\u5f00\u3002\u5982\u679c\u4f60\u5728\u4e00\u884c\u4e2d\u5199\u591a\u4e2a\u8bed\u53e5\uff0c\u4e5f\u9700\u8981\u7528\u5206\u53f7\u9694\u5f00\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nf\">f<\/span><span class=\"p\">();<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nf\">g<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4e5f\u662f\u56e0\u4e3a\u8fd9\u4e2a\u539f\u56e0\uff0c\u51fd\u6570\u6216\u63a7\u5236\u8bed\u53e5\u7684\u5de6\u5927\u62ec\u53f7\u7edd\u4e0d\u80fd\u653e\u5728\u4e0b\u4e00\u884c\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">i<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nf\">f<\/span><span class=\"p\">()<\/span>  <span class=\"c1\">\/\/ \u62a5\u9519\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">{<\/span>           <span class=\"c1\">\/\/ \u62a5\u9519\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nf\">g<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u5706\u62ec\u53f7\">\u5706\u62ec\u53f7<\/h2>\n<p>\u63a7\u5236\u7ed3\u6784\uff08if\u3001for \u548c switch\uff09\u4e0d\u9700\u8981\u5706\u62ec\u53f7\uff0c\u8bed\u6cd5\u4e0a\u5c31\u4e0d\u9700\u8981<\/p>\n<h2 id=\"\u6587\u6863\">\u6587\u6863<\/h2>\n<p><code>README<\/code>\u3001\u9879\u76ee\u6587\u6863\u3001\u63a5\u53e3\u6587\u6863\u7b49\uff0c<strong>\u4e2d\u6587<\/strong>\u6587\u6863\u7684\u6392\u7248\u53c2\u8003\uff1a<a href=\"https:\/\/github.com\/sparanoid\/chinese-copywriting-guidelines\">\u4e2d\u6587\u6587\u6848\u6392\u7248\u6307\u5317<\/a><\/p>\n<h2 id=\"\u6ce8\u91ca\">\u6ce8\u91ca<\/h2>\n<ul>\n<li>\n<p>\u6240\u6709\u5bfc\u51fa\u5bf9\u8c61\u5fc5\u987b\u6ce8\u91ca\u8bf4\u660e\u5176\u7528\u9014\uff0c\u975e\u5bfc\u51fa\u5bf9\u8c61\u6839\u636e\u60c5\u51b5\u8fdb\u884c\u6ce8\u91ca<\/p>\n<\/li>\n<li>\n<p>\u5982\u679c\u5bf9\u8c61\u53ef\u6570\u4e14\u65e0\u660e\u786e\u6307\u5b9a\u6570\u91cf\u7684\u60c5\u51b5\u4e0b\uff0c\u4e00\u5f8b\u4f7f\u7528\u5355\u6570\u5f62\u5f0f\u548c\u4e00\u822c\u8fdb\u884c\u65f6\u63cf\u8ff0\uff0c\u5426\u5219\u4f7f\u7528\u590d\u6570\u5f62\u5f0f<\/p>\n<\/li>\n<li>\n<p>\u5305\u3001\u51fd\u6570\u3001\u65b9\u6cd5\u548c\u7c7b\u578b\u7684\u6ce8\u91ca\u8bf4\u660e\u90fd\u662f\u4e00\u4e2a\u5b8c\u6574\u7684\u53e5\u5b50<\/p>\n<\/li>\n<li>\n<p>\u53e5\u5b50\u7c7b\u578b\u7684\u6ce8\u91ca\u9996\u5b57\u6bcd\u5747\u9700\u5927\u5199\uff0c\u77ed\u8bed\u7c7b\u578b\u7684\u6ce8\u91ca\u9996\u5b57\u6bcd\u9700\u5c0f\u5199<\/p>\n<\/li>\n<li>\n<p>\u6ce8\u91ca\u7684\u5355\u884c\u957f\u5ea6\u4e0d\u80fd\u8d85\u8fc7 80 \u4e2a\u5b57\u7b26\uff0c\u8d85\u8fc7\u8bf7\u5f3a\u5236\u6362\u884c<\/p>\n<\/li>\n<li>\n<p>\u53ef\u5bfc\u51fa\u5bf9\u8c61\u7684\u6ce8\u91ca\uff0c\u5fc5\u987b\u4ee5\u5bf9\u8c61\u7684\u540d\u79f0\u4f5c\u4e3a\u5f00\u5934<\/p>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ FileInfo is the interface that describes a file and is returned by Stat and Lstat\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">type<\/span> <span class=\"nx\">FileInfo<\/span> <span class=\"kd\">interface<\/span> <span class=\"p\">{<\/span> <span class=\"o\">...<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ HasPrefix returns true if name has any string in given slice as prefix\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">func<\/span> <span class=\"nf\">HasPrefix<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span> <span class=\"kt\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">prefixes<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"kt\">bool<\/span> <span class=\"p\">{<\/span> <span class=\"o\">...<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5355\u884c\u6ce8\u91ca\u591a\u884c\u6ce8\u91ca\">\u5355\u884c\u6ce8\u91ca&amp;\u591a\u884c\u6ce8\u91ca<\/h3>\n<ul>\n<li>\n<p>\u4e24\u79cd\u6ce8\u91ca\u98ce\u683c\uff0c\u5355\u884c\u6ce8\u91ca <code>\/\/<\/code>\uff0c\u591a\u884c\u6ce8\u91ca <code>\/* ... *\/<\/code><\/p>\n<\/li>\n<li>\n<p>\u591a\u884c\u6ce8\u91ca\u4ec5\u7528\u4e8e\u5305\u7ea7\u522b\u7684\u6587\u6863\u6ce8\u91ca\uff0c\u9664\u6b64\u4e4b\u5916\u8bf7\u7528\u5355\u884c\u6ce8\u91ca\u3002\u5305\u6ce8\u91ca\u4e00\u822c\u653e\u7f6e\u5230 <code>doc.go<\/code> \u6587\u4ef6\uff0c\u4e14\u8be5\u6587\u4ef6\u4ec5\u5305\u542b\u6587\u6863\u6ce8\u91ca\u5185\u5bb9<\/p>\n<\/li>\n<li>\n<p>\u5355\u884c\u6ce8\u91ca\u7b26\u53f7\u4e0e\u5185\u5bb9\u4e4b\u95f4\uff0c\u8bf7\u7528<strong>\u4e00\u4e2a\u7a7a\u683c<\/strong>\u9694\u5f00<\/p>\n<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/Comments\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ Comments\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>GoLand \u53ef\u8bbe\u7f6e\u81ea\u52a8\u683c\u5f0f\u5316\uff1a<\/strong><\/p>\n<p><code>Preferences &gt; Editor &gt; Code Style &gt; Go &gt; Other<\/code> \u52fe\u9009\u4e0a <code>Add leading space to comments<\/code><\/p>\n<h3 id=\"\u5305\u6ce8\u91ca\">\u5305\u6ce8\u91ca<\/h3>\n<ul>\n<li>\n<p>\u5305\u7ea7\u522b\u7684\u6ce8\u91ca\u5c31\u662f\u5bf9\u5305\u7684\u4ecb\u7ecd\uff0c\u53ea\u9700\u5728\u540c\u4e2a\u5305\u7684\u4efb\u4e00\u6e90\u6587\u4ef6\u4e2d\u8bf4\u660e\u5373\u53ef\u6709\u6548<\/p>\n<\/li>\n<li>\n<p>\u5bf9\u4e8e <code>main<\/code> \u5305\uff0c\u4e00\u822c\u53ea\u6709\u4e00\u884c\u7b80\u77ed\u7684\u6ce8\u91ca\u7528\u4ee5\u8bf4\u660e\u5305\u7684\u7528\u9014\uff0c\u4e14\u4ee5\u9879\u76ee\u540d\u79f0\u5f00\u5934<\/p>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ Write project description\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kn\">package<\/span> <span class=\"nx\">main<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\n<p>\u5bf9\u4e8e\u4e00\u4e2a\u590d\u6742\u9879\u76ee\u7684\u5b50\u5305\uff0c\u4e00\u822c\u60c5\u51b5\u4e0b\u4e0d\u9700\u8981\u5305\u7ea7\u522b\u6ce8\u91ca\uff0c\u9664\u975e\u662f\u4ee3\u8868\u67d0\u4e2a\u7279\u5b9a\u529f\u80fd\u7684\u6a21\u5757<\/p>\n<\/li>\n<li>\n<p>\u5bf9\u4e8e\u7b80\u5355\u7684\u975e <code>main<\/code> \u5305\uff0c\u4e5f\u53ef\u7528\u4e00\u884c\u6ce8\u91ca\u6982\u62ec<\/p>\n<\/li>\n<li>\n<p>\u5bf9\u4e8e\u76f8\u5bf9\u529f\u80fd\u590d\u6742\u7684\u975e <code>main<\/code> \u5305\uff0c\u4e00\u822c\u90fd\u4f1a\u589e\u52a0\u4e00\u4e9b\u4f7f\u7528\u793a\u4f8b\u6216\u57fa\u672c\u8bf4\u660e\uff0c\u4e14\u4ee5 <code>Package &lt;name&gt;<\/code> \u5f00\u5934<\/p>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"cm\">\/*\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">Package http provides HTTP client and server implementations.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"cm\">*\/<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">package<\/span> <span class=\"nx\">http<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u7279\u522b\u590d\u6742\u7684\u5305\u8bf4\u660e\uff0c\u53ef\u5355\u72ec\u521b\u5efa <code>doc.go<\/code> \u6587\u4ef6\u6765\u52a0\u4ee5\u8bf4\u660e<\/li>\n<\/ul>\n<h3 id=\"\u51fd\u6570\u4e0e\u65b9\u6cd5\">\u51fd\u6570\u4e0e\u65b9\u6cd5<\/h3>\n<ul>\n<li>\u5982\u679c\u4e00\u53e5\u8bdd\u4e0d\u8db3\u4ee5\u8bf4\u660e\u5168\u90e8\u95ee\u9898\uff0c\u5219\u53ef\u6362\u884c\u7ee7\u7eed\u8fdb\u884c\u66f4\u52a0\u7ec6\u81f4\u7684\u63cf\u8ff0<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ Copy copies file from source to target path.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ It returns false and error when error occurs in underlying function calls.\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u82e5\u51fd\u6570\u6216\u65b9\u6cd5\u4e3a\u5224\u65ad\u7c7b\u578b\uff08\u8fd4\u56de\u503c\u4e3b\u8981\u4e3a <code>bool<\/code> \u7c7b\u578b\uff09\uff0c\u5219\u4ee5 <code>&lt;name&gt; returns true if<\/code> \u5f00\u5934<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ HasPrefix returns true if name has any string in given slice as prefix.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">func<\/span> <span class=\"nf\">HasPrefix<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span> <span class=\"kt\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">prefixes<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"kt\">bool<\/span> <span class=\"p\">{<\/span> <span class=\"o\">...<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u7ed3\u6784\u63a5\u53e3\u53ca\u5176\u5b83\u7c7b\u578b\">\u7ed3\u6784\u3001\u63a5\u53e3\u53ca\u5176\u5b83\u7c7b\u578b<\/h3>\n<ul>\n<li>\u7c7b\u578b\u7684\u5b9a\u4e49\u4e00\u822c\u90fd\u4ee5\u5355\u6570\u5f62\u5f0f\u63cf\u8ff0\uff1a<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ Request represents a request to run a command.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">type<\/span> <span class=\"nx\">Request<\/span> <span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span> <span class=\"o\">...<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5982\u679c\u4e3a\u63a5\u53e3\uff0c\u5219\u4e00\u822c\u4ee5\u4ee5\u4e0b\u5f62\u5f0f\u63cf\u8ff0\uff1a<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ FileInfo is the interface that describes a file and is returned by Stat and Lstat.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">type<\/span> <span class=\"nx\">FileInfo<\/span> <span class=\"kd\">interface<\/span> <span class=\"p\">{<\/span> <span class=\"o\">...<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5982\u679c\u7ed3\u6784\u4f53\u5c5e\u6027\u8f83\u591a\uff0c\u9700\u5bf9\u5c5e\u6027\u6dfb\u52a0\u6ce8\u91ca<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ Var variable for expression\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">type<\/span> <span class=\"nx\">Var<\/span> <span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Key<\/span>   <span class=\"kt\">string<\/span>      <span class=\"s\">`json:&#34;key&#34;`<\/span>   <span class=\"c1\">\/\/ variable key\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nx\">Value<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{}<\/span> <span class=\"s\">`json:&#34;value&#34;`<\/span> <span class=\"c1\">\/\/ value\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nx\">Desc<\/span>  <span class=\"kt\">string<\/span>      <span class=\"s\">`json:&#34;desc&#34;`<\/span>  <span class=\"c1\">\/\/ variable description\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5176\u4ed6\u8bf4\u660e\">\u5176\u4ed6\u8bf4\u660e<\/h3>\n<ul>\n<li>\n<p>\u5f53\u67d0\u4e2a\u90e8\u5206\u7b49\u5f85\u5b8c\u6210\u65f6\uff0c\u53ef\u7528 <code>TODO:<\/code> \u5f00\u5934\u7684\u6ce8\u91ca\u6765\u63d0\u9192\u7ef4\u62a4\u4eba\u5458\u3002<\/p>\n<\/li>\n<li>\n<p>\u5f53\u67d0\u4e2a\u90e8\u5206\u5b58\u5728\u5df2\u77e5\u95ee\u9898\u8fdb\u884c\u9700\u8981\u4fee\u590d\u6216\u6539\u8fdb\u65f6\uff0c\u53ef\u7528 <code>FIXME:<\/code> \u5f00\u5934\u7684\u6ce8\u91ca\u6765\u63d0\u9192\u7ef4\u62a4\u4eba\u5458\u3002<\/p>\n<\/li>\n<li>\n<p>\u5f53\u9700\u8981\u7279\u522b\u8bf4\u660e\u67d0\u4e2a\u95ee\u9898\u65f6\uff0c\u53ef\u7528 <code>NOTE:<\/code> \u5f00\u5934\u7684\u6ce8\u91ca\uff1a<\/p>\n<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ NOTE: os.Chmod and os.Chtimes don&#39;t recognize symbolic link,\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ which will lead &#34;no such file or directory&#34; error.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"k\">return<\/span> <span class=\"nx\">os<\/span><span class=\"p\">.<\/span><span class=\"nf\">Symlink<\/span><span class=\"p\">(<\/span><span class=\"nx\">target<\/span><span class=\"p\">,<\/span> <span class=\"nx\">dest<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u683c\u5f0f\u5316\">\u683c\u5f0f\u5316<\/h2>\n<p>\u6211\u4eec\u6ca1\u6709\u592a\u591a\u53ef\u9009\u7684\u4f59\u5730\uff0c\u56e0\u4e3a Go \u5df2\u7ecf\u89c4\u8303\u597d\u4e86\uff0c\u5728 Go \u4e16\u754c\u6ca1\u6709\u6b64\u7c7b\u6218\u4e89\u3002<\/p>\n<h3 id=\"\u7f29\u8fdb\">\u7f29\u8fdb<\/h3>\n<p>\u7f29\u8fdb\u7edf\u4e00\u91c7\u7528<strong>4\u4e2a\u7a7a\u683c<\/strong>\uff0c\u7981\u7528\u5236\u8868\u7b26\u3002<\/p>\n<p>EditorConfig \u8bbe\u7f6e\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">[{Makefile,go.mod,go.sum,*.go}]\n<\/span><\/span><span class=\"line\"><span class=\"cl\">indent_style = tab\n<\/span><\/span><span class=\"line\"><span class=\"cl\">indent_size = 4\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6216 <strong>GoLand<\/strong> \u8bbe\u7f6e\uff1a<\/p>\n<p><code>Preferences &gt; Editor &gt; Code Style &gt; Go &gt; Tabs and Indents<\/code><\/p>\n<p><img src=\"media\/16046421571738.jpg\" alt=\"goland-tab-indent-w600\"><\/p>\n<h3 id=\"\u7a7a\u884c\">\u7a7a\u884c<\/h3>\n<ul>\n<li>\u9002\u5f53\u589e\u52a0\u7a7a\u884c\u4ee5\u4fdd\u6301\u4ee3\u7801\u6bb5\u843d\u6e05\u6670<\/li>\n<\/ul>\n<h2 id=\"\u5176\u4ed6-1\">\u5176\u4ed6<\/h2>\n<h3 id=\"\u51fd\u6570\u5206\u7ec4\u4e0e\u987a\u5e8f\">\u51fd\u6570\u5206\u7ec4\u4e0e\u987a\u5e8f<\/h3>\n<blockquote>\n<ul>\n<li>\u51fd\u6570\u5e94\u6309\u7c97\u7565\u7684\u8c03\u7528\u987a\u5e8f\u6392\u5e8f<\/li>\n<li>\u540c\u4e00\u6587\u4ef6\u4e2d\u7684\u51fd\u6570\u5e94\u6309\u63a5\u6536\u8005\u5206\u7ec4<\/li>\n<\/ul>\n<\/blockquote>\n<ul>\n<li>\u5bfc\u51fa\u7684\u51fd\u6570\u5e94\u5148\u51fa\u73b0\u5728\u6587\u4ef6\u4e2d\uff0c\u653e\u5728 <code>struct<\/code>\u3001<code>const<\/code> \u548c <code>var<\/code> \u5b9a\u4e49\u7684\u540e\u9762\u3002<\/li>\n<li>\u5728\u5b9a\u4e49\u7c7b\u578b\u4e4b\u540e\uff0c\u4f46\u5728\u63a5\u6536\u8005\u7684\u5176\u4f59\u65b9\u6cd5\u4e4b\u524d\uff0c\u53ef\u80fd\u4f1a\u51fa\u73b0\u4e00\u4e2a <code>newXYZ()<\/code> \/ <code>NewXYZ()<\/code>\u3002<\/li>\n<li>\u7531\u4e8e\u51fd\u6570\u662f\u6309\u63a5\u6536\u8005\u5206\u7ec4\u7684\uff0c\u56e0\u6b64\u666e\u901a\u5de5\u5177\u51fd\u6570\u5e94\u5728\u6587\u4ef6\u672b\u5c3e\u51fa\u73b0\u3002<\/li>\n<li>\u56e0\u6b64\uff0c\u4e00\u822c\u4e00\u4e2a <code>struct<\/code> \u53ca\u76f8\u5173\u65b9\u6cd5\u7ec4\u7ec7\u4e3a\u4e00\u4e2a\u6587\u4ef6\u3002<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">s<\/span> <span class=\"o\">*<\/span><span class=\"nx\">something<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Cost<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nf\">calcCost<\/span><span class=\"p\">(<\/span><span class=\"nx\">s<\/span><span class=\"p\">.<\/span><span class=\"nx\">weights<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">something<\/span> <span class=\"kd\">struct<\/span><span class=\"p\">{<\/span> <span class=\"o\">...<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">calcCost<\/span><span class=\"p\">(<\/span><span class=\"nx\">n<\/span> <span class=\"kt\">int<\/span><span class=\"p\">[])<\/span> <span class=\"kt\">int<\/span> <span class=\"p\">{<\/span><span class=\"o\">...<\/span><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">s<\/span> <span class=\"o\">*<\/span><span class=\"nx\">something<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Stop<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span><span class=\"o\">...<\/span><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">newSomething<\/span><span class=\"p\">()<\/span> <span class=\"o\">*<\/span><span class=\"nx\">something<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"o\">&amp;<\/span><span class=\"nx\">something<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">something<\/span> <span class=\"kd\">struct<\/span><span class=\"p\">{<\/span> <span class=\"o\">...<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">newSomething<\/span><span class=\"p\">()<\/span> <span class=\"o\">*<\/span><span class=\"nx\">something<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"o\">&amp;<\/span><span class=\"nx\">something<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">s<\/span> <span class=\"o\">*<\/span><span class=\"nx\">something<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Cost<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nf\">calcCost<\/span><span class=\"p\">(<\/span><span class=\"nx\">s<\/span><span class=\"p\">.<\/span><span class=\"nx\">weights<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">s<\/span> <span class=\"o\">*<\/span><span class=\"nx\">something<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Stop<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span><span class=\"o\">...<\/span><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">calcCost<\/span><span class=\"p\">(<\/span><span class=\"nx\">n<\/span> <span class=\"kt\">int<\/span><span class=\"p\">[])<\/span> <span class=\"kt\">int<\/span> <span class=\"p\">{<\/span><span class=\"o\">...<\/span><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u51cf\u5c11\u5d4c\u5957\">\u51cf\u5c11\u5d4c\u5957<\/h3>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">for<\/span> <span class=\"nx\">_<\/span><span class=\"p\">,<\/span> <span class=\"nx\">v<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"nx\">data<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">v<\/span><span class=\"p\">.<\/span><span class=\"nx\">F1<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">1<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">v<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">process<\/span><span class=\"p\">(<\/span><span class=\"nx\">v<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">v<\/span><span class=\"p\">.<\/span><span class=\"nf\">Call<\/span><span class=\"p\">();<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nx\">v<\/span><span class=\"p\">.<\/span><span class=\"nf\">Send<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"k\">return<\/span> <span class=\"nx\">err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">log<\/span><span class=\"p\">.<\/span><span class=\"nf\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Invalid v: %v&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">v<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">for<\/span> <span class=\"nx\">_<\/span><span class=\"p\">,<\/span> <span class=\"nx\">v<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"nx\">data<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">v<\/span><span class=\"p\">.<\/span><span class=\"nx\">F1<\/span> <span class=\"o\">!=<\/span> <span class=\"mi\">1<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">log<\/span><span class=\"p\">.<\/span><span class=\"nf\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Invalid v: %v&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">v<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">continue<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">v<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">process<\/span><span class=\"p\">(<\/span><span class=\"nx\">v<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">v<\/span><span class=\"p\">.<\/span><span class=\"nf\">Call<\/span><span class=\"p\">();<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"nx\">err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">v<\/span><span class=\"p\">.<\/span><span class=\"nf\">Send<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u4e0d\u5fc5\u8981\u7684-else\">\u4e0d\u5fc5\u8981\u7684 else<\/h3>\n<ul>\n<li>\u591a\u6570\u65f6\u5019\uff0c\u6211\u4eec\u53ef\u4ee5\u628a else \u5206\u652f\u91cc\u7684\u4ee3\u7801\u63d0\u53d6\u4e3a\u521d\u59cb\u5316\u3002<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">a<\/span> <span class=\"kt\">int<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">b<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">a<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">100<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">a<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">10<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">a<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">10<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">b<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">a<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">100<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5168\u5c40\u53d8\u91cf\u58f0\u660e\">\u5168\u5c40\u53d8\u91cf\u58f0\u660e<\/h3>\n<ul>\n<li>\u5168\u5c40\u53d8\u91cf\uff0c\u5fc5\u987b\u4f7f\u7528 <code>var<\/code> \u5173\u952e\u5b57<\/li>\n<li>\u8bf7\u52ff\u6307\u5b9a\u7c7b\u578b\uff0c\u9664\u975e\u5b83\u4e0e\u8868\u8fbe\u5f0f\u7684\u7c7b\u578b\u4e0d\u540c<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">a<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;abc&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">s<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">F<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">F<\/span><span class=\"p\">()<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">{<\/span> <span class=\"k\">return<\/span> <span class=\"s\">&#34;A&#34;<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">a<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;abc&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u7531\u4e8e F() \u5df2\u7ecf\u660e\u786e\u4e86\u8fd4\u56de\u4e00\u4e2a\u5b57\u7b26\u4e32\u7c7b\u578b\uff0c\u56e0\u6b64\u6211\u4eec\u6ca1\u6709\u5fc5\u8981\u663e\u5f0f\u6307\u5b9a s \u7684\u7c7b\u578b\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">var<\/span> <span class=\"nx\">s<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">F<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">F<\/span><span class=\"p\">()<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">{<\/span> <span class=\"k\">return<\/span> <span class=\"s\">&#34;A&#34;<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5982\u679c\u8868\u8fbe\u5f0f\u7684\u7c7b\u578b\u4e0e\u6240\u9700\u7684\u7c7b\u578b\u4e0d\u5b8c\u5168\u5339\u914d\uff0c\u8bf7\u6307\u5b9a\u7c7b\u578b<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">myError<\/span> <span class=\"kd\">struct<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">myError<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Error<\/span><span class=\"p\">()<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">{<\/span> <span class=\"k\">return<\/span> <span class=\"s\">&#34;error&#34;<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">F<\/span><span class=\"p\">()<\/span> <span class=\"nx\">myError<\/span> <span class=\"p\">{<\/span> <span class=\"k\">return<\/span> <span class=\"nx\">myError<\/span><span class=\"p\">{}<\/span> <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">err<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">F<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ F() \u8fd4\u56de\u4e00\u4e2a myError \u7c7b\u578b\u7684\u5b9e\u4f8b\uff0c\u4f46\u662f\u6211\u4eec\u8981 error \u7c7b\u578b\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u5c40\u90e8\u53d8\u91cf\u58f0\u660e\">\u5c40\u90e8\u53d8\u91cf\u58f0\u660e<\/h3>\n<ul>\n<li>\u5982\u679c\u5c06\u53d8\u91cf\u660e\u786e\u8bbe\u7f6e\u4e3a\u67d0\u4e2a\u503c\uff0c\u5219\u5e94\u4f7f\u7528\u77ed\u53d8\u91cf\u58f0\u660e\u5f62\u5f0f\uff08<code>:=<\/code>\uff09<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">s<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;abc&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">s<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">&#34;abc&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5982\u679c\u53d8\u91cf\u4e13\u7528\u4e8e\u5f15\u7528\uff0c\u5219\u4f7f\u7528 <code>var<\/code> \u5173\u952e\u5b57\u66f4\u5408\u9002<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">s<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">s<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nf\">f<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"nx\">s<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5982\u679c\u53d8\u91cf\u662f\u8fd4\u56de\u503c\uff0c\u5219\u5b9a\u4e49\u5728\u51fd\u6570\u8fd4\u56de\u7c7b\u578b\u4e2d<\/li>\n<\/ul>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">f<\/span><span class=\"p\">(<\/span><span class=\"nx\">list<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">int<\/span><span class=\"p\">)<\/span> <span class=\"p\">(<\/span><span class=\"nx\">filtered<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">int<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"nx\">_<\/span><span class=\"p\">,<\/span> <span class=\"nx\">v<\/span> <span class=\"o\">:=<\/span> <span class=\"k\">range<\/span> <span class=\"nx\">list<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"nx\">v<\/span> <span class=\"p\">&gt;<\/span> <span class=\"mi\">10<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nx\">filtered<\/span> <span class=\"p\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"nx\">filtered<\/span><span class=\"p\">,<\/span> <span class=\"nx\">v<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"import-\u5305\u5bfc\u5165\u5206\u7ec4\u4e0e\u6392\u5e8f\">import \u5305\u5bfc\u5165\u5206\u7ec4\u4e0e\u6392\u5e8f<\/h3>\n<ul>\n<li>\u540c\u4e00\u6587\u4ef6\uff0c\u5982\u679c\u5bfc\u5165\u591a\u4e2a\u5305\uff0c\u5bf9\u5176\u8fdb\u884c\u5206\u7ec4<\/li>\n<li><strong>\u6807\u51c6\u5305<\/strong>\u3001<strong>\u7b2c\u4e09\u65b9\u5305<\/strong>\u3001<strong>\u81ea\u5b9a\u4e49\u5305<\/strong>\uff0c\u5206\u522b\u5206\u7ec4\u3001\u7a7a\u884c\u5206\u9694\u3001\u6392\u5e8f<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"s\">&#34;a&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"s\">&#34;golang.org\/x\/sys&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"s\">&#34;runtime&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"s\">&#34;github.com\/gin-gonic\/gin&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"s\">&#34;b&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"s\">&#34;fmt&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;fmt&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;runtime&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;a&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;b&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;github.com\/gin-gonic\/gin&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;golang.org\/x\/sys&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>GoLand<\/strong> \u8bbe\u7f6e\u5982\u4e0b\uff1a<\/p>\n<p><img src=\"media\/16046425157364.jpg\" alt=\"goland-import-w600\"><\/p>\n<h3 id=\"\u76f8\u4f3c\u7684\u58f0\u660e\u8fdb\u884c\u5206\u7ec4\">\u76f8\u4f3c\u7684\u58f0\u660e\u8fdb\u884c\u5206\u7ec4<\/h3>\n<p>\u5bf9\u4e8e <code>var<\/code>\u3001<code>const<\/code>\u3001<code>type<\/code> \u7b49\u58f0\u660e\u8bed\u53e5\uff1a<\/p>\n<ul>\n<li>\u5c06\u76f8\u4f3c\u7684\u58f0\u660e\u653e\u5728\u4e00\u4e2a\u7ec4\u5185<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"nx\">a<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"nx\">b<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">2<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">a<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">b<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">2<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">Area<\/span> <span class=\"kt\">float64<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">Volume<\/span> <span class=\"kt\">float64<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">a<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">2<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">a<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">2<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Area<\/span> <span class=\"kt\">float64<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Volume<\/span> <span class=\"kt\">float64<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u4ec5\u5c06\u76f8\u5173\u7684\u58f0\u660e\u653e\u5728\u4e00\u7ec4\uff0c\u4e0d\u8981\u5c06\u4e0d\u76f8\u5173\u7684\u58f0\u660e\u653e\u5728\u4e00\u7ec4<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">Operation<\/span> <span class=\"kt\">int<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Add<\/span> <span class=\"nx\">Operation<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">iota<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Subtract<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Multiply<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">RoleName<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;Role Name&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><span class=\"lnt\">9\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">Operation<\/span> <span class=\"kt\">int<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Add<\/span> <span class=\"nx\">Operation<\/span> <span class=\"p\">=<\/span> <span class=\"kc\">iota<\/span> <span class=\"o\">+<\/span> <span class=\"mi\">1<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Subtract<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Multiply<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"nx\">RoleName<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;Role Name&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5206\u7ec4\u4f7f\u7528\u7684\u4f4d\u7f6e\u6ca1\u6709\u9650\u5236\uff0c\u51fd\u6570\u5185\u4e5f\u53ef\u4f7f\u7528\u5206\u7ec4<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">f<\/span><span class=\"p\">()<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">red<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">color<\/span><span class=\"p\">.<\/span><span class=\"nf\">New<\/span><span class=\"p\">(<\/span><span class=\"mh\">0xff0000<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">green<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">color<\/span><span class=\"p\">.<\/span><span class=\"nf\">New<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x00ff00<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">blue<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">color<\/span><span class=\"p\">.<\/span><span class=\"nf\">New<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x0000ff<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\">\/\/ ...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><span class=\"lnt\">9\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">f<\/span><span class=\"p\">()<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">red<\/span>   <span class=\"p\">=<\/span> <span class=\"nx\">color<\/span><span class=\"p\">.<\/span><span class=\"nf\">New<\/span><span class=\"p\">(<\/span><span class=\"mh\">0xff0000<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">green<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">color<\/span><span class=\"p\">.<\/span><span class=\"nf\">New<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x00ff00<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">blue<\/span>  <span class=\"p\">=<\/span> <span class=\"nx\">color<\/span><span class=\"p\">.<\/span><span class=\"nf\">New<\/span><span class=\"p\">(<\/span><span class=\"mh\">0x0000ff<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\">\/\/ ...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u51fd\u6570\u65b9\u6cd5\u7684\u53c2\u6570\u8fd4\u56de\u7c7b\u578b\u987a\u5e8f\">\u51fd\u6570\/\u65b9\u6cd5\u7684\u53c2\u6570\/\u8fd4\u56de\u7c7b\u578b\u987a\u5e8f<\/h3>\n<ul>\n<li>\u7b80\u5355\u7c7b\u578b\u4f18\u5148\u4e8e\u590d\u6742\u7c7b\u578b<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">F<\/span><span class=\"p\">(<\/span><span class=\"nx\">u<\/span> <span class=\"nx\">User<\/span><span class=\"p\">,<\/span> <span class=\"nx\">n<\/span> <span class=\"kt\">int<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">F<\/span><span class=\"p\">(<\/span><span class=\"nx\">n<\/span> <span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"nx\">u<\/span> <span class=\"nx\">User<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5c3d\u53ef\u80fd\u5c06\u540c\u79cd\u7c7b\u578b\u7684\u53c2\u6570\u653e\u5728\u76f8\u90bb\u4f4d\u7f6e\uff0c\u5219\u53ea\u9700\u5199\u4e00\u6b21\u7c7b\u578b<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">F<\/span><span class=\"p\">(<\/span><span class=\"nx\">a<\/span> <span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"nx\">c<\/span> <span class=\"kt\">string<\/span><span class=\"p\">,<\/span> <span class=\"nx\">b<\/span> <span class=\"kt\">int<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">F<\/span><span class=\"p\">(<\/span><span class=\"nx\">a<\/span><span class=\"p\">,<\/span> <span class=\"nx\">b<\/span> <span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"nx\">c<\/span> <span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li><code>error<\/code> \u6c38\u8fdc\u5728\u6700\u540e\u4e00\u4e2a\u8fd4\u56de\u7c7b\u578b<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">F<\/span><span class=\"p\">()<\/span> <span class=\"p\">(<\/span><span class=\"kt\">error<\/span><span class=\"p\">,<\/span> <span class=\"kt\">int<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">F<\/span><span class=\"p\">()<\/span> <span class=\"p\">(<\/span><span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"kt\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u7ed3\u6784\u4f53\u5c5e\u6027\u987a\u5e8f\">\u7ed3\u6784\u4f53\u5c5e\u6027\u987a\u5e8f<\/h3>\n<p>\u6211\u4eec\u5148\u770b\u4e0b\u793a\u4f8b\uff1a<\/p>\n<p>\u7ed3\u6784\u4f53A - \u5b9a\u4e49\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">a<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">c<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">b<\/span> <span class=\"kt\">bool<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">d<\/span> <span class=\"kt\">bool<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7ed3\u6784\u4f53A - \u5927\u5c0f\u4e3a40\uff0c\u5185\u5b58\u5e03\u5c40\u56fe\uff1a<\/p>\n<p><img src=\"media\/15742176090003.jpg\" alt=\"-w333\"><\/p>\n<p>\u5bf9\u6bd4\uff0c\u7ed3\u6784\u4f53B - \u5b9a\u4e49\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">a<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">b<\/span> <span class=\"kt\">bool<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">c<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">d<\/span> <span class=\"kt\">bool<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7ed3\u6784\u4f53B - \u5927\u5c0f\u4e3a48\uff0c\u5185\u5b58\u5e03\u5c40\u56fe\uff1a<\/p>\n<p><img src=\"media\/15742178125147.jpg\" alt=\"-w329\"><\/p>\n<p>\u6211\u4eec\u53d1\u73b0\uff0c<strong>\u7ed3\u6784\u4f53\u7684\u5c5e\u6027\u987a\u5e8f\u4e0d\u540c\uff0c\u5360\u7528\u7684\u5185\u5b58\u5927\u5c0f\u548c\u5e03\u5c40\u662f\u5b8c\u5168\u4e0d\u540c\u7684<\/strong>\u3002<\/p>\n<p>\u90a3\u6211\u4eec\u56e0\u6b64<strong>\u7ea6\u5b9a\uff1a\u5c06\u76f8\u540c\u7c7b\u578b\u7684\u5c5e\u6027\u5c3d\u91cf\u653e\u7f6e\u5728\u4e00\u8d77<\/strong>\u3002\u5373\uff0c\u63a8\u8350\u7ed3\u6784\u4f53A\u4e2d\u7684\u5b9a\u4e49\u987a\u5e8f\u3002<\/p>\n<h3 id=\"\u7ed3\u6784\u4f53\u4e2d\u7684\u5d4c\u5165\">\u7ed3\u6784\u4f53\u4e2d\u7684\u5d4c\u5165<\/h3>\n<blockquote>\n<p>\u5d4c\u5165\u5f0f\u7c7b\u578b\uff08\u4f8b\u5982mutex\uff09\u5e94\u4f4d\u4e8e\u7ed3\u6784\u4f53\u5185\u7684\u5b57\u6bb5\u5217\u8868\u7684\u9876\u90e8\uff0c\u5e76\u4e14\u5fc5\u987b\u6709\u4e00\u4e2a\u7a7a\u884c\u5c06\u5d4c\u5165\u5f0f\u5b57\u6bb5\u4e0e\u5e38\u89c4\u5b57\u6bb5\u5206\u9694\u5f00\u3002<\/p>\n<\/blockquote>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">Client<\/span> <span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">version<\/span> <span class=\"kt\">int<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">Client<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">Client<\/span> <span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">Client<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">version<\/span> <span class=\"kt\">int<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u521d\u59cb\u5316\u7ed3\u6784\u4f53\u65f6\u5fc5\u987b\u6307\u5b9a\u5b57\u6bb5\u540d\">\u521d\u59cb\u5316\u7ed3\u6784\u4f53\u65f6\u5fc5\u987b\u6307\u5b9a\u5b57\u6bb5\u540d<\/h3>\n<blockquote>\n<p><strong>\u5fc5\u987b<\/strong>\u5728\u521d\u59cb\u5316\u7ed3\u6784\u4f53\u65f6\u6307\u5b9a\u5b57\u6bb5\u540d\uff0c\u5426\u5219\u76f8\u5173\u5de5\u5177\u548c Review \u90fd\u4e0d\u7ed9\u8fc7\u3002\u5982\u679c\u4e0d\u6307\u5b9a\uff0c\u4f1a\u5bf9\u4ee3\u7801\u91cd\u6784\u9020\u6210\u4e0d\u53ef\u9884\u671f\u7684\u540e\u679c\u3002<\/p>\n<\/blockquote>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">k<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">User<\/span><span class=\"p\">{<\/span><span class=\"s\">&#34;John&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;Doe&#34;<\/span><span class=\"p\">,<\/span> <span class=\"kc\">true<\/span><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">k<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">User<\/span><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">FirstName<\/span><span class=\"p\">:<\/span> <span class=\"s\">&#34;John&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">LastName<\/span><span class=\"p\">:<\/span> <span class=\"s\">&#34;Doe&#34;<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Admin<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p><strong>\u552f\u4e00\u4f8b\u5916<\/strong>\uff1a\u5982\u679c\u67093\u4e2a\u6216\u66f4\u5c11\u7684\u5b57\u6bb5\uff0c\u5219\u53ef\u4ee5\u5728\u6d4b\u8bd5\u8868\u4e2d\u7701\u7565\u5b57\u6bb5\u540d<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">tests<\/span> <span class=\"o\">:=<\/span> <span class=\"p\">[]<\/span><span class=\"kd\">struct<\/span><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">op<\/span> <span class=\"nx\">Operation<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">want<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">{<\/span><span class=\"nx\">Add<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;add&#34;<\/span><span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">{<\/span><span class=\"nx\">Subtract<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;subtract&#34;<\/span><span class=\"p\">},<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u7f29\u5c0f\u53d8\u91cf\u4f5c\u7528\u57df\">\u7f29\u5c0f\u53d8\u91cf\u4f5c\u7528\u57df<\/h3>\n<ul>\n<li>\u5982\u679c\u6709\u53ef\u80fd\uff0c\u5c3d\u91cf\u7f29\u5c0f\u53d8\u91cf\u4f5c\u7528\u8303\u56f4\uff0c\u9664\u975e\u5b83\u4e0e\u51cf\u5c11\u5d4c\u5957\u7684\u89c4\u5219\u51b2\u7a81<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">ioutil<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteFile<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span><span class=\"p\">,<\/span> <span class=\"nx\">data<\/span><span class=\"p\">,<\/span> <span class=\"mo\">0644<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nx\">err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">ioutil<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteFile<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span><span class=\"p\">,<\/span> <span class=\"nx\">data<\/span><span class=\"p\">,<\/span> <span class=\"mo\">0644<\/span><span class=\"p\">);<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nx\">err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5982\u679c\u9700\u8981\u5728 if \u4e4b\u5916\u4f7f\u7528\u51fd\u6570\u8c03\u7528\u7684\u7ed3\u679c\uff0c\u5219\u4e0d\u5e94\u5c1d\u8bd5\u7f29\u5c0f\u8303\u56f4<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">data<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">ioutil<\/span><span class=\"p\">.<\/span><span class=\"nf\">ReadFile<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span><span class=\"p\">);<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">err<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">cfg<\/span><span class=\"p\">.<\/span><span class=\"nf\">Decode<\/span><span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nx\">err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Println<\/span><span class=\"p\">(<\/span><span class=\"nx\">cfg<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"kc\">nil<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nx\">err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">data<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">ioutil<\/span><span class=\"p\">.<\/span><span class=\"nf\">ReadFile<\/span><span class=\"p\">(<\/span><span class=\"nx\">name<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nx\">err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">cfg<\/span><span class=\"p\">.<\/span><span class=\"nf\">Decode<\/span><span class=\"p\">(<\/span><span class=\"nx\">data<\/span><span class=\"p\">);<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nx\">err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Println<\/span><span class=\"p\">(<\/span><span class=\"nx\">cfg<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">return<\/span> <span class=\"kc\">nil<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"error-\u4fe1\u606f\u4e0d\u5e94\u5927\u5199\u6216\u6807\u70b9\u7b26\u53f7\u7ed3\u675f\">Error \u4fe1\u606f\u4e0d\u5e94\u5927\u5199\u6216\u6807\u70b9\u7b26\u53f7\u7ed3\u675f<\/h3>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Something bad.&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;something bad&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>Error \u63cf\u8ff0\u4fe1\u606f\u662f\u9700\u8981\u88ab\u5305\u88f9\u6216\u5f15\u7528\u63cf\u8ff0\u7684\uff0c\u90a3\u4e48\u4e0b\u9762\u7684\u4ee3\u7801\u5c06\u544a\u8bc9\u6211\u4eec\u4e3a\u4f55\u4e0d\u5e94\u5982\u6b64\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">log<\/span><span class=\"p\">.<\/span><span class=\"nf\">Printf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;Reading %s: %v&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">filename<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"slice\">slice<\/h3>\n<blockquote>\n<p><code>nil<\/code> \u662f\u4e00\u4e2a\u6709\u6548\u957f\u5ea6\u4e3a 0 \u7684 slice<\/p>\n<\/blockquote>\n<ul>\n<li>\u96f6\u503c\u5207\u7247\u53ef\u7acb\u5373\u4f7f\u7528\uff0c\u65e0\u9700\u8c03\u7528make\u521b\u5efa<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">nums<\/span> <span class=\"o\">:=<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">int<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ or, nums := make([]int, 0)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">add1<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">nums<\/span> <span class=\"p\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"nx\">nums<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">nums<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">int<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"nx\">add1<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">nums<\/span> <span class=\"p\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"nx\">nums<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u8981\u68c0\u67e5\u5207\u7247\u662f\u5426\u4e3a\u7a7a\uff0c\u8bf7\u59cb\u7ec8\u4f7f\u7528 <code>len(s) == 0<\/code>\uff0c\u4e0d\u8981\u68c0\u67e5 <code>nil<\/code><\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">isEmpty<\/span><span class=\"p\">(<\/span><span class=\"nx\">s<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"kt\">bool<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nx\">s<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">nil<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">isEmpty<\/span><span class=\"p\">(<\/span><span class=\"nx\">s<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">string<\/span><span class=\"p\">)<\/span> <span class=\"kt\">bool<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"nx\">s<\/span><span class=\"p\">)<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li>\u5bf9\u4e8e\u9700\u8981\u5e8f\u5217\u5316\u7684\u5207\u7247\uff0c\u5219\u5fc5\u987b\u4f7f\u7528make\u521d\u59cb\u5316<\/li>\n<\/ul>\n<p><strong>Bad<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">v<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">int<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">s<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nf\">Marshal<\/span><span class=\"p\">(<\/span><span class=\"nx\">v<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">println<\/span><span class=\"p\">(<\/span><span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">s<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ output: null\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>Good<\/strong>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">v<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">make<\/span><span class=\"p\">([]<\/span><span class=\"kt\">int<\/span><span class=\"p\">,<\/span> <span class=\"mi\">0<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">s<\/span><span class=\"p\">,<\/span> <span class=\"nx\">_<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nf\">Marshal<\/span><span class=\"p\">(<\/span><span class=\"nx\">v<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nb\">println<\/span><span class=\"p\">(<\/span><span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">s<\/span><span class=\"p\">))<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ output: []\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/golang\/blog\/blob\/master\/content\/package-names.article\">Package names - Go Blog<\/a><\/li>\n<li><a href=\"https:\/\/rakyll.org\/style-packages\">Style guideline for Go packages<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/golang\/blog\/blob\/master\/content\/organizing-go-code.article\">Organizing Go code - Go Blog<\/a><\/li>\n<li><a href=\"https:\/\/golang.org\/doc\/code.html\">How to Write Go Code - Go Blog<\/a><\/li>\n<li><a href=\"https:\/\/golang.org\/doc\/effective_go.html\">Effective Go<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/unknwon\/go-code-convention\">Go Code Convention<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/golang\/go\/wiki\/Errors\">Go Wiki - Errors<\/a><\/li>\n<\/ul>"},{"title":"\u89e3\u51b3 CSDN \u6076\u5fc3\u4eba\u7684\u4e00\u4e9b\u529e\u6cd5","link":"https:\/\/shockerli.net\/post\/fuck-csdn\/","pubDate":"Sun, 25 Oct 2020 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/fuck-csdn\/","description":"<p>\u539f\u56e0\u4e0d\u8bf4\u4e86\u3002\u3002\u3002<\/p>\n<h2 id=\"\u5c4f\u853d\u641c\u7d22\u7ed3\u679c\">\u5c4f\u853d\u641c\u7d22\u7ed3\u679c<\/h2>\n<p>\u65e0\u8bba\u54ea\u4e2a\u641c\u7d22\u5f15\u64ce\uff0c\u5728\u641c\u7d22\u4e00\u4e9b\u6280\u672f\u95ee\u9898\u65f6\uff0c\u6b64\u7ad9\u90fd\u4f1a\u5360\u636e\u592a\u591a\u5165\u53e3\uff0c\u5c24\u5176\u662f\u67d0\u5ea6\u3002\u4e3a\u4e86\u7701\u5fc3\u7701\u529b\uff0c\u641c\u7d22\u65f6\u6dfb\u52a0 <code>-csdn<\/code> \u5173\u952e\u5b57\uff0c\u76f4\u63a5\u5c4f\u853d\u5bf9\u6b64\u7ad9\u7684\u641c\u7d22\u7ed3\u679c\u3002<\/p>\n<p>\u4f8b\u5982\u9700\u8981\u641c\u7d22 <code>python<\/code> \u65f6\uff0c\u52a0\u4e2a <code>-csdn<\/code>\uff0c\u53d8\u6210 <code>python -csdn<\/code> \u6216 <code>-csdn python<\/code><\/p>\n<p><code>Alfred<\/code>\u3001<code>uTools<\/code> \u7b49\u5de5\u5177\u6216\u8005\u6d4f\u89c8\u5668\u4e2d\u7684\u641c\u7d22\u5f15\u64ce\uff0c\u53ef\u914d\u7f6e\u7c7b\u4f3c\u4e8e <code>https:\/\/www.google.com\/search?q={query} -csdn<\/code>\uff0c\u4e00\u52b3\u6c38\u9038\u3002<\/p>\n<h2 id=\"\u7eff\u5316\u5185\u5bb9\u9875\u9762\">\u7eff\u5316\u5185\u5bb9\u9875\u9762<\/h2>\n<p>\u7334\u6cb9\u811a\u672c\uff1a<a href=\"https:\/\/greasyfork.org\/zh-CN\/scripts\/378351\">CSDNGreener<\/a><\/p>\n<p>\u8be5\u811a\u672c\u5230 2021.10.25 \u4e3a\u6b62\uff0c\u4f9d\u7136\u5728\u4e0d\u65ad\u66f4\u65b0\u7ef4\u62a4\uff0c\u5f00\u6e90\u3001\u65e0\u540e\u95e8\uff0c<a href=\"https:\/\/github.com\/adlered\/CSDNGreener\">GitHub<\/a>\u3002\u5982\u679c\u6b64\u811a\u672c\u65e0\u6cd5\u4f7f\u7528\uff0c\u4e5f\u53ef\u5728 <a href=\"https:\/\/greasyfork.org\">GreasyFork<\/a> \u4e0a\u627e\u5176\u4ed6 CSDN \u7684\u811a\u672c\u4ee3\u66ff\u3002<\/p>\n<p>\u6559\u7a0b\u770b\u811a\u672c\u5b98\u65b9\u8bf4\u660e\u5373\u53ef\u3002\u5148\u5b89\u88c5 Chrome \u811a\u672c\u7ba1\u7406\u63d2\u4ef6 <a href=\"https:\/\/www.tampermonkey.net\">Tampermonkey<\/a>\uff0c\u518d\u5b89\u88c5 <a href=\"https:\/\/greasyfork.org\/zh-CN\/scripts\/378351\">CSDNGreener<\/a><\/p>"},{"title":"Gin \u6846\u67b6\u7ed1\u5b9a JSON \u53c2\u6570\u4f7f\u7528 jsoniter","link":"https:\/\/shockerli.net\/post\/gin-binding-jsoniter\/","pubDate":"Sun, 26 Jul 2020 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/gin-binding-jsoniter\/","description":"<p>Gin \u6846\u67b6\u4e2d\uff0c\u5904\u7406 JSON \u683c\u5f0f\u7684\u53c2\u6570\u7ed1\u5b9a\u65f6\uff0c\u9ed8\u8ba4\u91c7\u7528\u7684\u6807\u51c6\u5305 <code>encoding\/json<\/code>\uff0c\u7136\u800c\u6807\u51c6\u5305\u4e0d\u80fd\u6ee1\u8db3\u6211\u4eec\u7684\u4e00\u4e9b\u8981\u6c42\uff0c\u6bd4\u5982\u517c\u5bb9\u5b57\u7b26\u4e32\u6574\u578b\u3001PHP\u7a7a\u6570\u7ec4\u3001\u65f6\u95f4\u683c\u5f0f\u7b49\u3002<\/p>\n<h2 id=\"\u6700\u7b80\u5355\u7684\u65b9\u5f0f\">\u6700\u7b80\u5355\u7684\u65b9\u5f0f<\/h2>\n<p>\u5f00\u53d1 API \u65f6\uff0c\u9700\u8981\u7528\u5230 ShouldBindJSON \u7ed1\u5b9a\u4f20\u5165\u7684\u53c2\u6570\u5230\u7ed3\u6784\u4f53\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ github.com\/gin-gonic\/gin@v1.6.3\/context.go:643\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ ShouldBindJSON is a shortcut for c.ShouldBindWith(obj, binding.JSON).\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">c<\/span> <span class=\"o\">*<\/span><span class=\"nx\">Context<\/span><span class=\"p\">)<\/span> <span class=\"nf\">ShouldBindJSON<\/span><span class=\"p\">(<\/span><span class=\"nx\">obj<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">return<\/span> <span class=\"nx\">c<\/span><span class=\"p\">.<\/span><span class=\"nf\">ShouldBindWith<\/span><span class=\"p\">(<\/span><span class=\"nx\">obj<\/span><span class=\"p\">,<\/span> <span class=\"nx\">binding<\/span><span class=\"p\">.<\/span><span class=\"nx\">JSON<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>Gin \u9ed8\u8ba4\u91c7\u7528 <code>encoding\/json<\/code> \u5305\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ github.com\/gin-gonic\/gin@v1.6.3\/internal\/json\/json.go\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ +build !jsoniter\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">package<\/span> <span class=\"nx\">json<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"s\">&#34;encoding\/json&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ Marshal is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">Marshal<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">Marshal<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ Unmarshal is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">Unmarshal<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">Unmarshal<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ MarshalIndent is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">MarshalIndent<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">MarshalIndent<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ NewDecoder is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">NewDecoder<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">NewDecoder<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ NewEncoder is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">NewEncoder<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">NewEncoder<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u540c\u65f6\u6211\u4eec\u770b\u5230\u8fd8\u652f\u6301\u4e86 <code>jsoniter<\/code><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ github.com\/gin-gonic\/gin@v1.6.3\/internal\/json\/jsoniter.go\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ +build jsoniter\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">package<\/span> <span class=\"nx\">json<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"s\">&#34;github.com\/json-iterator\/go&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">json<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">jsoniter<\/span><span class=\"p\">.<\/span><span class=\"nx\">ConfigCompatibleWithStandardLibrary<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ Marshal is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">Marshal<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">Marshal<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ Unmarshal is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">Unmarshal<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">Unmarshal<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ MarshalIndent is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">MarshalIndent<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">MarshalIndent<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ NewDecoder is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">NewDecoder<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">NewDecoder<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ NewEncoder is exported by gin\/json package.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\t<span class=\"nx\">NewEncoder<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nx\">NewEncoder<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u90a3\u6211\u4eec\u600e\u4e48\u624d\u80fd\u4f7f\u7528\u5230 <code>jsoniter<\/code> \u5462\uff1f\u6e90\u7801\u4e2d\u5df2\u7ecf\u660e\u786e\u4e86\u7f16\u8bd1tag\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ +build jsoniter\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6240\u4ee5\uff0c\u6211\u4eec\u53ea\u9700\u5728\u7f16\u8bd1\u65f6\u5e26\u4e0a\u8fd9\u4e2a tag \u5c31\u53ef\u4ee5\u4e86\uff0c\u4f8b\u5982\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">go build -tags<span class=\"o\">=<\/span>jsoniter main.go\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/\/ \u6216\u8005\n<\/span><\/span><span class=\"line\"><span class=\"cl\">go run -tags<span class=\"o\">=<\/span>jsoniter main.go\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u81ea\u5b9a\u4e49\u7684\u65b9\u5f0f\">\u81ea\u5b9a\u4e49\u7684\u65b9\u5f0f<\/h2>\n<p>Gin \u6846\u67b6\u652f\u6301\u7684 <code>jsoniter<\/code> \u662f\u9ed8\u8ba4\u914d\u7f6e <code>jsoniter.ConfigCompatibleWithStandardLibrary<\/code>\u3002\u5f53\u6211\u4eec\u9700\u8981\u5176\u4ed6\u914d\u7f6e\u6216\u6dfb\u52a0\u4e00\u4e9b\u81ea\u5b9a\u4e49\u6269\u5c55\uff08\u6bd4\u5982\u65f6\u95f4\u5904\u7406\uff09\u65f6\uff0c\u5c31\u96be\u53d7\u4e86\u3002\u4e8e\u662f\u6211\u4eec\u5c31\u8981\u81ea\u5df1\u52a8\u624b\u4e86~<\/p>\n<p>\u7ffb\u5f00\u6e90\u7801\uff0c\u6211\u4eec\u80fd\u770b\u5230 <code>binding.JSON<\/code> \u5176\u5b9e\u4f7f\u7528\u7684\u662f <code>jsonBinding{}<\/code> \u8fd9\u4e2a\u7ed3\u6784\u4f53\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ github.com\/gin-gonic\/gin@v1.6.3\/binding\/binding.go:73\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ These implement the Binding interface and can be used to bind the data\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ present in the request to struct instances.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">var<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">JSON<\/span>          <span class=\"p\">=<\/span> <span class=\"nx\">jsonBinding<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"c1\">\/\/ \u5176\u4ed6\u7701\u7565\u4e86...\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7ffb\u5f00 <code>jsonBinding<\/code> \u6e90\u7801\u770b\u770b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ github.com\/gin-gonic\/gin@v1.6.3\/binding\/json.go\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">jsonBinding<\/span> <span class=\"kd\">struct<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">jsonBinding<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Name<\/span><span class=\"p\">()<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">return<\/span> <span class=\"s\">&#34;json&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">jsonBinding<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Bind<\/span><span class=\"p\">(<\/span><span class=\"nx\">req<\/span> <span class=\"o\">*<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">Request<\/span><span class=\"p\">,<\/span> <span class=\"nx\">obj<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">if<\/span> <span class=\"nx\">req<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">nil<\/span> <span class=\"o\">||<\/span> <span class=\"nx\">req<\/span><span class=\"p\">.<\/span><span class=\"nx\">Body<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"k\">return<\/span> <span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;invalid request&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">return<\/span> <span class=\"nf\">decodeJSON<\/span><span class=\"p\">(<\/span><span class=\"nx\">req<\/span><span class=\"p\">.<\/span><span class=\"nx\">Body<\/span><span class=\"p\">,<\/span> <span class=\"nx\">obj<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">jsonBinding<\/span><span class=\"p\">)<\/span> <span class=\"nf\">BindBody<\/span><span class=\"p\">(<\/span><span class=\"nx\">body<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">,<\/span> <span class=\"nx\">obj<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">return<\/span> <span class=\"nf\">decodeJSON<\/span><span class=\"p\">(<\/span><span class=\"nx\">bytes<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewReader<\/span><span class=\"p\">(<\/span><span class=\"nx\">body<\/span><span class=\"p\">),<\/span> <span class=\"nx\">obj<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u53d1\u73b0\u5b9e\u73b0\u4e86 <code>BindingBody<\/code> \u8fd9\u4e2a\u63a5\u53e3\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ github.com\/gin-gonic\/gin@v1.6.3\/binding\/binding.go:36\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ Binding describes the interface which needs to be implemented for binding the\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ data present in the request such as JSON request body, query parameters or\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ the form POST.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">type<\/span> <span class=\"nx\">Binding<\/span> <span class=\"kd\">interface<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nf\">Name<\/span><span class=\"p\">()<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nf\">Bind<\/span><span class=\"p\">(<\/span><span class=\"o\">*<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">Request<\/span><span class=\"p\">,<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"kt\">error<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ BindingBody adds BindBody method to Binding. BindBody is similar with Bind,\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ but it reads the body from supplied bytes instead of req.Body.\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">type<\/span> <span class=\"nx\">BindingBody<\/span> <span class=\"kd\">interface<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">Binding<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nf\">BindBody<\/span><span class=\"p\">([]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">,<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"kt\">error<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u90a3\u63a5\u4e0b\u6765\u5c31\u7b80\u5355\u4e86\uff0c\u6211\u4eec\u53ea\u8981\u5b9e\u73b0\u4e86\u8fd9\u4e2a\u63a5\u53e3\u5373\u53ef\uff0c\u4f8b\u5982\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><span class=\"lnt\">54\n<\/span><span class=\"lnt\">55\n<\/span><span class=\"lnt\">56\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">package<\/span> <span class=\"nx\">custom<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"s\">&#34;bytes&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"s\">&#34;fmt&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"s\">&#34;io&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"s\">&#34;net\/http&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">jsoniter<\/span> <span class=\"s\">&#34;github.com\/json-iterator\/go&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"s\">&#34;github.com\/gin-gonic\/gin\/binding&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ BindingJSON \u66ff\u6362Gin\u9ed8\u8ba4\u7684binding\uff0c\u652f\u6301\u66f4\u4e30\u5bccJSON\u529f\u80fd\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">var<\/span> <span class=\"nx\">BindingJSON<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">jsonBinding<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u53ef\u4ee5\u81ea\u5b9a\u4e49jsoniter\u914d\u7f6e\u6216\u8005\u6dfb\u52a0\u63d2\u4ef6\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"kd\">var<\/span> <span class=\"nx\">json<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">jsoniter<\/span><span class=\"p\">.<\/span><span class=\"nx\">ConfigCompatibleWithStandardLibrary<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">jsonBinding<\/span> <span class=\"kd\">struct<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">jsonBinding<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Name<\/span><span class=\"p\">()<\/span> <span class=\"kt\">string<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">return<\/span> <span class=\"s\">&#34;json&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">jsonBinding<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Bind<\/span><span class=\"p\">(<\/span><span class=\"nx\">req<\/span> <span class=\"o\">*<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">Request<\/span><span class=\"p\">,<\/span> <span class=\"nx\">obj<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">if<\/span> <span class=\"nx\">req<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">nil<\/span> <span class=\"o\">||<\/span> <span class=\"nx\">req<\/span><span class=\"p\">.<\/span><span class=\"nx\">Body<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"k\">return<\/span> <span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;invalid request&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">return<\/span> <span class=\"nf\">decodeJSON<\/span><span class=\"p\">(<\/span><span class=\"nx\">req<\/span><span class=\"p\">.<\/span><span class=\"nx\">Body<\/span><span class=\"p\">,<\/span> <span class=\"nx\">obj<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">jsonBinding<\/span><span class=\"p\">)<\/span> <span class=\"nf\">BindBody<\/span><span class=\"p\">(<\/span><span class=\"nx\">body<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">,<\/span> <span class=\"nx\">obj<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">return<\/span> <span class=\"nf\">decodeJSON<\/span><span class=\"p\">(<\/span><span class=\"nx\">bytes<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewReader<\/span><span class=\"p\">(<\/span><span class=\"nx\">body<\/span><span class=\"p\">),<\/span> <span class=\"nx\">obj<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">decodeJSON<\/span><span class=\"p\">(<\/span><span class=\"nx\">r<\/span> <span class=\"nx\">io<\/span><span class=\"p\">.<\/span><span class=\"nx\">Reader<\/span><span class=\"p\">,<\/span> <span class=\"nx\">obj<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"nx\">decoder<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">json<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewDecoder<\/span><span class=\"p\">(<\/span><span class=\"nx\">r<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">if<\/span> <span class=\"nx\">binding<\/span><span class=\"p\">.<\/span><span class=\"nx\">EnableDecoderUseNumber<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"nx\">decoder<\/span><span class=\"p\">.<\/span><span class=\"nf\">UseNumber<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">if<\/span> <span class=\"nx\">binding<\/span><span class=\"p\">.<\/span><span class=\"nx\">EnableDecoderDisallowUnknownFields<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"nx\">decoder<\/span><span class=\"p\">.<\/span><span class=\"nf\">DisallowUnknownFields<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">if<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">decoder<\/span><span class=\"p\">.<\/span><span class=\"nf\">Decode<\/span><span class=\"p\">(<\/span><span class=\"nx\">obj<\/span><span class=\"p\">);<\/span> <span class=\"nx\">err<\/span> <span class=\"o\">!=<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"k\">return<\/span> <span class=\"nx\">err<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">return<\/span> <span class=\"nf\">validate<\/span><span class=\"p\">(<\/span><span class=\"nx\">obj<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">validate<\/span><span class=\"p\">(<\/span><span class=\"nx\">obj<\/span> <span class=\"kd\">interface<\/span><span class=\"p\">{})<\/span> <span class=\"kt\">error<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">if<\/span> <span class=\"nx\">binding<\/span><span class=\"p\">.<\/span><span class=\"nx\">Validator<\/span> <span class=\"o\">==<\/span> <span class=\"kc\">nil<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t\t<span class=\"k\">return<\/span> <span class=\"kc\">nil<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\t<span class=\"k\">return<\/span> <span class=\"nx\">binding<\/span><span class=\"p\">.<\/span><span class=\"nx\">Validator<\/span><span class=\"p\">.<\/span><span class=\"nf\">ValidateStruct<\/span><span class=\"p\">(<\/span><span class=\"nx\">obj<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u81ea\u5b9a\u4e49 <code>jsonBinding<\/code> \u5df2\u7ecf\u5199\u597d\u4e86\uff0c\u53ef\u4f7f\u7528\u67092\u79cd\u65b9\u5f0f\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ binding.JSON \u66ff\u6362\u6210\u81ea\u5b9a\u4e49\u7684\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"nx\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">ShouldBindWith<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"nx\">params<\/span><span class=\"p\">,<\/span> <span class=\"nx\">binding<\/span><span class=\"p\">.<\/span><span class=\"nx\">JSON<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">ctx<\/span><span class=\"p\">.<\/span><span class=\"nf\">ShouldBindBodyWith<\/span><span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"nx\">params<\/span><span class=\"p\">,<\/span> <span class=\"nx\">binding<\/span><span class=\"p\">.<\/span><span class=\"nx\">JSON<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4e0a\u8ff0\u81ea\u5b9a\u4e49\u7684\u65b9\u5f0f\uff0c\u8fd8\u53ef\u4ee5\u7528\u4e8e\u5176\u4ed6\u5305\uff0c\u4e0d\u4ec5\u9650\u4e8e <code>iterator<\/code>\u3002\u4ece\u8fd9\u4e2a\u65b9\u9762\u4f53\u73b0\u51fa\u4e86 Gin \u6846\u67b6\u826f\u597d\u7684\u63a5\u53e3\u8bbe\u8ba1\ud83d\udc4d<\/p>"},{"title":"Go \u5b57\u7b26\u4e32\u62fc\u63a5\u7684 7 \u79cd\u59ff\u52bf","link":"https:\/\/shockerli.net\/post\/golang-concat-string\/","pubDate":"Thu, 19 Dec 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/golang-concat-string\/","description":"<h2 id=\"\u59ff\u52bf\u4e00\u89c8\">\u59ff\u52bf\u4e00\u89c8<\/h2>\n<h3 id=\"string-concat\">String Concat<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">str<\/span> <span class=\"o\">+=<\/span> <span class=\"s\">&#34;test-string&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"string-sprintf\">String Sprintf<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">str<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Sprintf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;%s%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">str<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;test-string&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"string-join\">String Join<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">str<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">strings<\/span><span class=\"p\">.<\/span><span class=\"nf\">Join<\/span><span class=\"p\">([]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"nx\">str<\/span><span class=\"p\">,<\/span> <span class=\"s\">&#34;test-string&#34;<\/span><span class=\"p\">},<\/span> <span class=\"s\">&#34;&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"buffer-write\">Buffer Write<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">buf<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"nx\">bytes<\/span><span class=\"p\">.<\/span><span class=\"nx\">Buffer<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">buf<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteString<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;test-string&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">str<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">buf<\/span><span class=\"p\">.<\/span><span class=\"nf\">String<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"bytes-append\">Bytes Append<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">b<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">byte<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">s<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">&#34;test-string&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">b<\/span> <span class=\"p\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"nx\">b<\/span><span class=\"p\">,<\/span> <span class=\"nx\">s<\/span><span class=\"o\">...<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">str<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">b<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"string-copy\">String Copy<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">ts<\/span> <span class=\"o\">:=<\/span> <span class=\"s\">&#34;test-string&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">n<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">tsl<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"nx\">ts<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">n<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">bs<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">make<\/span><span class=\"p\">([]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">,<\/span> <span class=\"nx\">tsl<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">bl<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">for<\/span> <span class=\"nx\">bl<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">tsl<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">bl<\/span> <span class=\"o\">+=<\/span> <span class=\"nb\">copy<\/span><span class=\"p\">(<\/span><span class=\"nx\">bs<\/span><span class=\"p\">[<\/span><span class=\"nx\">bl<\/span><span class=\"p\">:],<\/span> <span class=\"nx\">ts<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">str<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">bs<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"string-builder\">String Builder<\/h3>\n<blockquote>\n<p>\u4ece Go 1.10 \u7248\u672c\u5f00\u59cb\uff0c\u6807\u51c6\u5305 <code>strings<\/code> \u63d0\u4f9b <code>strings.Builder<\/code>\uff1a<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">builder<\/span> <span class=\"nx\">strings<\/span><span class=\"p\">.<\/span><span class=\"nx\">Builder<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteString<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;test-string&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">str<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">String<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"benchmark\">Benchmark<\/h2>\n<p>\u6027\u80fd\u6d4b\u8bd5:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">  1\n<\/span><span class=\"lnt\">  2\n<\/span><span class=\"lnt\">  3\n<\/span><span class=\"lnt\">  4\n<\/span><span class=\"lnt\">  5\n<\/span><span class=\"lnt\">  6\n<\/span><span class=\"lnt\">  7\n<\/span><span class=\"lnt\">  8\n<\/span><span class=\"lnt\">  9\n<\/span><span class=\"lnt\"> 10\n<\/span><span class=\"lnt\"> 11\n<\/span><span class=\"lnt\"> 12\n<\/span><span class=\"lnt\"> 13\n<\/span><span class=\"lnt\"> 14\n<\/span><span class=\"lnt\"> 15\n<\/span><span class=\"lnt\"> 16\n<\/span><span class=\"lnt\"> 17\n<\/span><span class=\"lnt\"> 18\n<\/span><span class=\"lnt\"> 19\n<\/span><span class=\"lnt\"> 20\n<\/span><span class=\"lnt\"> 21\n<\/span><span class=\"lnt\"> 22\n<\/span><span class=\"lnt\"> 23\n<\/span><span class=\"lnt\"> 24\n<\/span><span class=\"lnt\"> 25\n<\/span><span class=\"lnt\"> 26\n<\/span><span class=\"lnt\"> 27\n<\/span><span class=\"lnt\"> 28\n<\/span><span class=\"lnt\"> 29\n<\/span><span class=\"lnt\"> 30\n<\/span><span class=\"lnt\"> 31\n<\/span><span class=\"lnt\"> 32\n<\/span><span class=\"lnt\"> 33\n<\/span><span class=\"lnt\"> 34\n<\/span><span class=\"lnt\"> 35\n<\/span><span class=\"lnt\"> 36\n<\/span><span class=\"lnt\"> 37\n<\/span><span class=\"lnt\"> 38\n<\/span><span class=\"lnt\"> 39\n<\/span><span class=\"lnt\"> 40\n<\/span><span class=\"lnt\"> 41\n<\/span><span class=\"lnt\"> 42\n<\/span><span class=\"lnt\"> 43\n<\/span><span class=\"lnt\"> 44\n<\/span><span class=\"lnt\"> 45\n<\/span><span class=\"lnt\"> 46\n<\/span><span class=\"lnt\"> 47\n<\/span><span class=\"lnt\"> 48\n<\/span><span class=\"lnt\"> 49\n<\/span><span class=\"lnt\"> 50\n<\/span><span class=\"lnt\"> 51\n<\/span><span class=\"lnt\"> 52\n<\/span><span class=\"lnt\"> 53\n<\/span><span class=\"lnt\"> 54\n<\/span><span class=\"lnt\"> 55\n<\/span><span class=\"lnt\"> 56\n<\/span><span class=\"lnt\"> 57\n<\/span><span class=\"lnt\"> 58\n<\/span><span class=\"lnt\"> 59\n<\/span><span class=\"lnt\"> 60\n<\/span><span class=\"lnt\"> 61\n<\/span><span class=\"lnt\"> 62\n<\/span><span class=\"lnt\"> 63\n<\/span><span class=\"lnt\"> 64\n<\/span><span class=\"lnt\"> 65\n<\/span><span class=\"lnt\"> 66\n<\/span><span class=\"lnt\"> 67\n<\/span><span class=\"lnt\"> 68\n<\/span><span class=\"lnt\"> 69\n<\/span><span class=\"lnt\"> 70\n<\/span><span class=\"lnt\"> 71\n<\/span><span class=\"lnt\"> 72\n<\/span><span class=\"lnt\"> 73\n<\/span><span class=\"lnt\"> 74\n<\/span><span class=\"lnt\"> 75\n<\/span><span class=\"lnt\"> 76\n<\/span><span class=\"lnt\"> 77\n<\/span><span class=\"lnt\"> 78\n<\/span><span class=\"lnt\"> 79\n<\/span><span class=\"lnt\"> 80\n<\/span><span class=\"lnt\"> 81\n<\/span><span class=\"lnt\"> 82\n<\/span><span class=\"lnt\"> 83\n<\/span><span class=\"lnt\"> 84\n<\/span><span class=\"lnt\"> 85\n<\/span><span class=\"lnt\"> 86\n<\/span><span class=\"lnt\"> 87\n<\/span><span class=\"lnt\"> 88\n<\/span><span class=\"lnt\"> 89\n<\/span><span class=\"lnt\"> 90\n<\/span><span class=\"lnt\"> 91\n<\/span><span class=\"lnt\"> 92\n<\/span><span class=\"lnt\"> 93\n<\/span><span class=\"lnt\"> 94\n<\/span><span class=\"lnt\"> 95\n<\/span><span class=\"lnt\"> 96\n<\/span><span class=\"lnt\"> 97\n<\/span><span class=\"lnt\"> 98\n<\/span><span class=\"lnt\"> 99\n<\/span><span class=\"lnt\">100\n<\/span><span class=\"lnt\">101\n<\/span><span class=\"lnt\">102\n<\/span><span class=\"lnt\">103\n<\/span><span class=\"lnt\">104\n<\/span><span class=\"lnt\">105\n<\/span><span class=\"lnt\">106\n<\/span><span class=\"lnt\">107\n<\/span><span class=\"lnt\">108\n<\/span><span class=\"lnt\">109\n<\/span><span class=\"lnt\">110\n<\/span><span class=\"lnt\">111\n<\/span><span class=\"lnt\">112\n<\/span><span class=\"lnt\">113\n<\/span><span class=\"lnt\">114\n<\/span><span class=\"lnt\">115\n<\/span><span class=\"lnt\">116\n<\/span><span class=\"lnt\">117\n<\/span><span class=\"lnt\">118\n<\/span><span class=\"lnt\">119\n<\/span><span class=\"lnt\">120\n<\/span><span class=\"lnt\">121\n<\/span><span class=\"lnt\">122\n<\/span><span class=\"lnt\">123\n<\/span><span class=\"lnt\">124\n<\/span><span class=\"lnt\">125\n<\/span><span class=\"lnt\">126\n<\/span><span class=\"lnt\">127\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">package<\/span> <span class=\"nx\">main<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kn\">import<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;bytes&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;fmt&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;strings&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"s\">&#34;testing&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">const<\/span> <span class=\"p\">(<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">sss<\/span> <span class=\"p\">=<\/span> <span class=\"s\">&#34;hello world!&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">cnt<\/span> <span class=\"p\">=<\/span> <span class=\"mi\">10000<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">var<\/span> <span class=\"nx\">expected<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">strings<\/span><span class=\"p\">.<\/span><span class=\"nf\">Repeat<\/span><span class=\"p\">(<\/span><span class=\"nx\">sss<\/span><span class=\"p\">,<\/span> <span class=\"nx\">cnt<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">BenchmarkStringConcat<\/span><span class=\"p\">(<\/span><span class=\"nx\">b<\/span> <span class=\"o\">*<\/span><span class=\"nx\">testing<\/span><span class=\"p\">.<\/span><span class=\"nx\">B<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">result<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"nx\">n<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nx\">N<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"kd\">var<\/span> <span class=\"nx\">str<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">cnt<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nx\">str<\/span> <span class=\"o\">+=<\/span> <span class=\"nx\">sss<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">result<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">str<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">StopTimer<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">expected<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;unexpected result; got=%s, want=%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">),<\/span> <span class=\"nx\">expected<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">BenchmarkStringSprintf<\/span><span class=\"p\">(<\/span><span class=\"nx\">b<\/span> <span class=\"o\">*<\/span><span class=\"nx\">testing<\/span><span class=\"p\">.<\/span><span class=\"nx\">B<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">result<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"nx\">n<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nx\">N<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"kd\">var<\/span> <span class=\"nx\">str<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">cnt<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nx\">str<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">fmt<\/span><span class=\"p\">.<\/span><span class=\"nf\">Sprintf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;%s%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">str<\/span><span class=\"p\">,<\/span> <span class=\"nx\">sss<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">result<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">str<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">StopTimer<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">expected<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;unexpected result; got=%s, want=%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">),<\/span> <span class=\"nx\">expected<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">BenchmarkStringJoin<\/span><span class=\"p\">(<\/span><span class=\"nx\">b<\/span> <span class=\"o\">*<\/span><span class=\"nx\">testing<\/span><span class=\"p\">.<\/span><span class=\"nx\">B<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">result<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"nx\">n<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nx\">N<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"kd\">var<\/span> <span class=\"nx\">str<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">cnt<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nx\">str<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">strings<\/span><span class=\"p\">.<\/span><span class=\"nf\">Join<\/span><span class=\"p\">([]<\/span><span class=\"kt\">string<\/span><span class=\"p\">{<\/span><span class=\"nx\">str<\/span><span class=\"p\">,<\/span> <span class=\"nx\">sss<\/span><span class=\"p\">},<\/span> <span class=\"s\">&#34;&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">result<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">str<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">StopTimer<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">expected<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;unexpected result; got=%s, want=%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">),<\/span> <span class=\"nx\">expected<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">BenchmarkBufferWrite<\/span><span class=\"p\">(<\/span><span class=\"nx\">b<\/span> <span class=\"o\">*<\/span><span class=\"nx\">testing<\/span><span class=\"p\">.<\/span><span class=\"nx\">B<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">result<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"nx\">n<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nx\">N<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">buf<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">new<\/span><span class=\"p\">(<\/span><span class=\"nx\">bytes<\/span><span class=\"p\">.<\/span><span class=\"nx\">Buffer<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">cnt<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nx\">buf<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteString<\/span><span class=\"p\">(<\/span><span class=\"nx\">sss<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">result<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">buf<\/span><span class=\"p\">.<\/span><span class=\"nf\">String<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">StopTimer<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">expected<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;unexpected result; got=%s, want=%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">),<\/span> <span class=\"nx\">expected<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">BenchmarkBytesAppend<\/span><span class=\"p\">(<\/span><span class=\"nx\">b<\/span> <span class=\"o\">*<\/span><span class=\"nx\">testing<\/span><span class=\"p\">.<\/span><span class=\"nx\">B<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">result<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"nx\">n<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nx\">N<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"kd\">var<\/span> <span class=\"nx\">bbb<\/span> <span class=\"p\">[]<\/span><span class=\"kt\">byte<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">cnt<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nx\">bbb<\/span> <span class=\"p\">=<\/span> <span class=\"nb\">append<\/span><span class=\"p\">(<\/span><span class=\"nx\">bbb<\/span><span class=\"p\">,<\/span> <span class=\"nx\">sss<\/span><span class=\"o\">...<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">result<\/span> <span class=\"p\">=<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">bbb<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">StopTimer<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">expected<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;unexpected result; got=%s, want=%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">),<\/span> <span class=\"nx\">expected<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">BenchmarkStringCopy<\/span><span class=\"p\">(<\/span><span class=\"nx\">b<\/span> <span class=\"o\">*<\/span><span class=\"nx\">testing<\/span><span class=\"p\">.<\/span><span class=\"nx\">B<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">result<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"nx\">n<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nx\">N<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">tsl<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">len<\/span><span class=\"p\">(<\/span><span class=\"nx\">sss<\/span><span class=\"p\">)<\/span> <span class=\"o\">*<\/span> <span class=\"nx\">cnt<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">bs<\/span> <span class=\"o\">:=<\/span> <span class=\"nb\">make<\/span><span class=\"p\">([]<\/span><span class=\"kt\">byte<\/span><span class=\"p\">,<\/span> <span class=\"nx\">tsl<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">bl<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"nx\">bl<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">tsl<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nx\">bl<\/span> <span class=\"o\">+=<\/span> <span class=\"nb\">copy<\/span><span class=\"p\">(<\/span><span class=\"nx\">bs<\/span><span class=\"p\">[<\/span><span class=\"nx\">bl<\/span><span class=\"p\">:],<\/span> <span class=\"nx\">sss<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">result<\/span> <span class=\"p\">=<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">bs<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">StopTimer<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">expected<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;unexpected result; got=%s, want=%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">),<\/span> <span class=\"nx\">expected<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">BenchmarkStringBuilder<\/span><span class=\"p\">(<\/span><span class=\"nx\">b<\/span> <span class=\"o\">*<\/span><span class=\"nx\">testing<\/span><span class=\"p\">.<\/span><span class=\"nx\">B<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"kd\">var<\/span> <span class=\"nx\">result<\/span> <span class=\"kt\">string<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"nx\">n<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nx\">N<\/span><span class=\"p\">;<\/span> <span class=\"nx\">n<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"kd\">var<\/span> <span class=\"nx\">builder<\/span> <span class=\"nx\">strings<\/span><span class=\"p\">.<\/span><span class=\"nx\">Builder<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">for<\/span> <span class=\"nx\">i<\/span> <span class=\"o\">:=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span> <span class=\"p\">&lt;<\/span> <span class=\"nx\">cnt<\/span><span class=\"p\">;<\/span> <span class=\"nx\">i<\/span><span class=\"o\">++<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nx\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">WriteString<\/span><span class=\"p\">(<\/span><span class=\"nx\">sss<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">result<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">String<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">StopTimer<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"nx\">result<\/span> <span class=\"o\">!=<\/span> <span class=\"nx\">expected<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nx\">b<\/span><span class=\"p\">.<\/span><span class=\"nf\">Errorf<\/span><span class=\"p\">(<\/span><span class=\"s\">&#34;unexpected result; got=%s, want=%s&#34;<\/span><span class=\"p\">,<\/span> <span class=\"nb\">string<\/span><span class=\"p\">(<\/span><span class=\"nx\">result<\/span><span class=\"p\">),<\/span> <span class=\"nx\">expected<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6d4b\u8bd5\u7ed3\u679c:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">BenchmarkStringConcat-4               19          61431933 ns\/op        632845167 B\/op     10005 allocs\/op\n<\/span><\/span><span class=\"line\"><span class=\"cl\">BenchmarkStringSprintf-4              10         109283838 ns\/op        1075688336 B\/op    29688 allocs\/op\n<\/span><\/span><span class=\"line\"><span class=\"cl\">BenchmarkStringJoin-4                 15          75854431 ns\/op        632844905 B\/op     10003 allocs\/op\n<\/span><\/span><span class=\"line\"><span class=\"cl\">BenchmarkBufferWrite-4             10743            113597 ns\/op          441616 B\/op         13 allocs\/op\n<\/span><\/span><span class=\"line\"><span class=\"cl\">BenchmarkBytesAppend-4             15578             73796 ns\/op          645104 B\/op         24 allocs\/op\n<\/span><\/span><span class=\"line\"><span class=\"cl\">BenchmarkStringCopy-4              21416             55761 ns\/op          245760 B\/op          2 allocs\/op\n<\/span><\/span><span class=\"line\"><span class=\"cl\">BenchmarkStringBuilder-4           15961             74010 ns\/op          522224 B\/op         23 allocs\/op\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4ece\u6d4b\u8bd5\u7ed3\u679c\u6765\u770b\uff0c\u8bed\u6cd5\u4e2d\u7684\u5b57\u7b26\u4e32\u62fc\u63a5\u64cd\u4f5c\u6027\u80fd\u662f\u6781\u5176\u4f4e\u4e0b\u7684\uff0c\u5bf9\u4e8e\u64cd\u4f5c\u9891\u7e41\u7684\u5927\u5b57\u7b26\u4e32\uff0c\u6211\u4eec\u9700\u8003\u8651\u7528\u66f4\u9ad8\u6548\u7684\u65b9\u5f0f\u66ff\u4ee3\u3002<\/p>\n<h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/1760757\/how-to-efficiently-concatenate-strings\">How to efficiently concatenate strings<\/a><\/li>\n<\/ul>"},{"title":"Go \u6316\u5751\u6307\u5357: \u201ccannot take the address of XXX\u201d and \u201ccannot call pointer method on XXX\u201d","link":"https:\/\/shockerli.net\/post\/golang-faq-cannot-take-the-address\/","pubDate":"Thu, 28 Nov 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/golang-faq-cannot-take-the-address\/","description":"<h2 id=\"\u5148\u770b\u4ee3\u7801\">\u5148\u770b\u4ee3\u7801<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><span class=\"lnt\">54\n<\/span><span class=\"lnt\">55\n<\/span><span class=\"lnt\">56\n<\/span><span class=\"lnt\">57\n<\/span><span class=\"lnt\">58\n<\/span><span class=\"lnt\">59\n<\/span><span class=\"lnt\">60\n<\/span><span class=\"lnt\">61\n<\/span><span class=\"lnt\">62\n<\/span><span class=\"lnt\">63\n<\/span><span class=\"lnt\">64\n<\/span><span class=\"lnt\">65\n<\/span><span class=\"lnt\">66\n<\/span><span class=\"lnt\">67\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-go\" data-lang=\"go\"><span class=\"line\"><span class=\"cl\"><span class=\"kn\">package<\/span> <span class=\"nx\">main<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">type<\/span> <span class=\"nx\">B<\/span> <span class=\"kd\">struct<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">Id<\/span> <span class=\"kt\">int<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">New<\/span><span class=\"p\">()<\/span> <span class=\"nx\">B<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nx\">B<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">New2<\/span><span class=\"p\">()<\/span> <span class=\"o\">*<\/span><span class=\"nx\">B<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"o\">&amp;<\/span><span class=\"nx\">B<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">b<\/span> <span class=\"o\">*<\/span><span class=\"nx\">B<\/span><span class=\"p\">)<\/span> <span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"p\">(<\/span><span class=\"nx\">b<\/span> <span class=\"nx\">B<\/span><span class=\"p\">)<\/span> <span class=\"nf\">World<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"kd\">func<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\">\/\/ \u65b9\u6cd5\u7684\u63a5\u6536\u5668\u4e3a *T \u7c7b\u578b\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nf\">New<\/span><span class=\"p\">().<\/span><span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u4e0d\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b1<\/span> <span class=\"o\">:=<\/span> <span class=\"nf\">New<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b1<\/span><span class=\"p\">.<\/span><span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b2<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">B<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b2<\/span><span class=\"p\">.<\/span><span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">(<\/span><span class=\"nx\">B<\/span><span class=\"p\">{}).<\/span><span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u4e0d\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nx\">B<\/span><span class=\"p\">{}.<\/span><span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span>   <span class=\"c1\">\/\/ \u7f16\u8bd1\u4e0d\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nf\">New2<\/span><span class=\"p\">().<\/span><span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b3<\/span> <span class=\"o\">:=<\/span> <span class=\"nf\">New2<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b3<\/span><span class=\"p\">.<\/span><span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b4<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"nx\">B<\/span><span class=\"p\">{}<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nx\">b4<\/span><span class=\"p\">.<\/span><span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"nx\">B<\/span><span class=\"p\">{}).<\/span><span class=\"nf\">Hello<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\">\/\/ \u65b9\u6cd5\u7684\u63a5\u6536\u5668\u4e3a T \u7c7b\u578b\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nf\">New<\/span><span class=\"p\">().<\/span><span class=\"nf\">World<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b5<\/span> <span class=\"o\">:=<\/span> <span class=\"nf\">New<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b5<\/span><span class=\"p\">.<\/span><span class=\"nf\">World<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b6<\/span> <span class=\"o\">:=<\/span> <span class=\"nx\">B<\/span><span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b6<\/span><span class=\"p\">.<\/span><span class=\"nf\">World<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">(<\/span><span class=\"nx\">B<\/span><span class=\"p\">{}).<\/span><span class=\"nf\">World<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nx\">B<\/span><span class=\"p\">{}.<\/span><span class=\"nf\">World<\/span><span class=\"p\">()<\/span>   <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nf\">New2<\/span><span class=\"p\">().<\/span><span class=\"nf\">World<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b7<\/span> <span class=\"o\">:=<\/span> <span class=\"nf\">New2<\/span><span class=\"p\">()<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b7<\/span><span class=\"p\">.<\/span><span class=\"nf\">World<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">b8<\/span> <span class=\"o\">:=<\/span> <span class=\"o\">&amp;<\/span><span class=\"nx\">B<\/span><span class=\"p\">{}<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nx\">b8<\/span><span class=\"p\">.<\/span><span class=\"nf\">World<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">(<\/span><span class=\"o\">&amp;<\/span><span class=\"nx\">B<\/span><span class=\"p\">{}).<\/span><span class=\"nf\">World<\/span><span class=\"p\">()<\/span> <span class=\"c1\">\/\/ \u7f16\u8bd1\u901a\u8fc7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u8f93\u51fa\u7ed3\u679c\">\u8f93\u51fa\u7ed3\u679c<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">.\/main.go:25:10: cannot call pointer method on New()\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.\/main.go:25:10: cannot take the address of New()\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.\/main.go:33:10: cannot call pointer method on B literal\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.\/main.go:33:10: cannot take the address of B literal\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.\/main.go:34:8: cannot call pointer method on B literal\n<\/span><\/span><span class=\"line\"><span class=\"cl\">.\/main.go:34:8: cannot take the address of B literal\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u95ee\u9898\u603b\u7ed3\">\u95ee\u9898\u603b\u7ed3<\/h2>\n<blockquote>\n<p>\u5047\u8bbe <code>T<\/code> \u7c7b\u578b\u7684\u65b9\u6cd5\u4e0a\u63a5\u6536\u5668\u65e2\u6709 <code>T<\/code> \u7c7b\u578b\u7684\uff0c\u53c8\u6709 <code>*T<\/code> \u6307\u9488\u7c7b\u578b\u7684\uff0c\u90a3\u4e48\u5c31\u4e0d\u53ef\u4ee5\u5728\u4e0d\u80fd\u5bfb\u5740\u7684 <code>T<\/code> \u503c\u4e0a\u8c03\u7528 <code>*T<\/code> \u63a5\u6536\u5668\u7684\u65b9\u6cd5<\/p>\n<\/blockquote>\n<ul>\n<li><code>&amp;B{}<\/code> \u662f\u6307\u9488\uff0c\u53ef\u5bfb\u5740<\/li>\n<li><code>B{}<\/code> \u662f\u503c\uff0c\u4e0d\u53ef\u5bfb\u5740<\/li>\n<li><code>b := B{}<\/code> b\u662f\u53d8\u91cf\uff0c\u53ef\u5bfb\u5740<\/li>\n<\/ul>\n<h2 id=\"\u5ef6\u4f38\u601d\u8003\">\u5ef6\u4f38\u601d\u8003<\/h2>\n<p><a href=\"https:\/\/golang.org\/ref\/spec#Address_operators\">Go \u8bed\u8a00\u89c4\u8303<\/a>\u4e2d\u89c4\u5b9a\u4e86\u53ef\u5bfb\u5740(addressable)\u5bf9\u8c61\u7684\u5b9a\u4e49\uff1a<\/p>\n<blockquote>\n<p>For an operand x of type T, the address operation &amp;x generates a pointer of type *T to x. The operand must be addressable, that is, either a variable, pointer indirection, or slice indexing operation; or a field selector of an addressable struct operand; or an array indexing operation of an addressable array. As an exception to the addressability requirement, x may also be a (possibly parenthesized) composite literal. If the evaluation of x would cause a run-time panic, then the evaluation of &amp;x does too.<\/p>\n<p>\u5bf9\u4e8e\u7c7b\u578b\u4e3a <code>T<\/code> \u7684\u64cd\u4f5c\u6570 <code>x<\/code>\uff0c\u5730\u5740\u64cd\u4f5c\u7b26 <code>&amp;x<\/code> \u5c06\u751f\u6210\u4e00\u4e2a\u7c7b\u578b\u4e3a <code>*T<\/code> \u7684\u6307\u9488\u6307\u5411 <code>x<\/code>\u3002\u64cd\u4f5c\u6570\u5fc5\u987b\u53ef\u5bfb\u5740\uff0c\u5373\uff0c\u53d8\u91cf\u3001\u95f4\u63a5\u6307\u9488\u3001\u5207\u7247\u7d22\u5f15\u64cd\u4f5c\uff0c\u6216\u53ef\u5bfb\u5740\u7ed3\u6784\u4f53\u7684\u5b57\u6bb5\u9009\u62e9\u5668\uff0c\u6216\u53ef\u5bfb\u5740\u6570\u7ec4\u7684\u6570\u7ec4\u7d22\u5f15\u64cd\u4f5c\u3002\u4f5c\u4e3a\u53ef\u5bfb\u5740\u6027\u8981\u6c42\u7684\u4f8b\u5916\uff0c<code>x<\/code> \u4e5f\u53ef\u4e3a\uff08\u5706\u62ec\u53f7\u62ec\u8d77\u6765\u7684\uff09\u590d\u5408\u5b57\u9762\u91cf\u3002\u5982\u679c\u5bf9 <code>x<\/code> \u7684\u6c42\u503c\u4f1a\u5f15\u8d77\u8fd0\u884c\u65f6\u6050\u614c\uff0c\u90a3\u4e48\u5bf9 <code>&amp;x<\/code> \u7684\u6c42\u503c\u4e5f\u4f1a\u5f15\u8d77\u6050\u614c\u3002<\/p>\n<p>For an operand x of pointer type *T, the pointer indirection *x denotes the variable of type T pointed to by x. If x is nil, an attempt to evaluate *x will cause a run-time panic.<\/p>\n<p>\u5bf9\u4e8e\u6307\u9488\u7c7b\u578b\u4e3a <code>*T<\/code> \u7684\u64cd\u4f5c\u6570 <code>x<\/code>\uff0c\u95f4\u63a5\u6307\u9488 <code>*x<\/code> \u8868\u793a\u7c7b\u578b\u4e3a <code>T<\/code> \u7684\u503c\u6307\u5411 <code>x<\/code>\u3002\u82e5 <code>x<\/code> \u4e3a <code>nil<\/code>\uff0c\u5c1d\u8bd5\u6c42\u503c <code>*x<\/code> \u5c06\u4f1a\u5f15\u53d1\u8fd0\u884c\u65f6\u6050\u614c\u3002<\/p>\n<\/blockquote>\n<p>\u4ee5\u4e0b\u51e0\u79cd\u662f\u53ef\u5bfb\u5740\u7684\uff1a<\/p>\n<ul>\n<li>\u4e00\u4e2a\u53d8\u91cf: <code>&amp;x<\/code><\/li>\n<li>\u6307\u9488\u5f15\u7528(pointer indirection): <code>&amp;*x<\/code><\/li>\n<li>slice \u7d22\u5f15\u64cd\u4f5c(\u4e0d\u7ba1 slice \u662f\u5426\u53ef\u5bfb\u5740): <code>&amp;s[1]<\/code><\/li>\n<li>\u53ef\u5bfb\u5740 struct \u7684\u5b57\u6bb5: <code>&amp;point.X<\/code><\/li>\n<li>\u53ef\u5bfb\u5740\u6570\u7ec4\u7684\u7d22\u5f15\u64cd\u4f5c: <code>&amp;a[0]<\/code><\/li>\n<li>composite literal \u7c7b\u578b: <code>&amp;struct{ X int }{1}<\/code><\/li>\n<\/ul>\n<p>\u4e0b\u5217\u60c5\u51b5 <code>x<\/code> \u662f\u4e0d\u53ef\u4ee5\u5bfb\u5740\u7684\uff0c\u4e0d\u80fd\u4f7f\u7528 <code>&amp;x<\/code> \u53d6\u5f97\u6307\u9488\uff1a<\/p>\n<ul>\n<li>\u5b57\u7b26\u4e32\u4e2d\u7684\u5b57\u8282<\/li>\n<li>map \u5bf9\u8c61\u4e2d\u7684\u5143\u7d20<\/li>\n<li>\u63a5\u53e3\u5bf9\u8c61\u7684\u52a8\u6001\u503c(\u901a\u8fc7 type assertions \u83b7\u5f97)<\/li>\n<li>\u5e38\u6570<\/li>\n<li>literal \u503c(\u975e composite literal)<\/li>\n<li>package \u7ea7\u522b\u7684\u51fd\u6570<\/li>\n<li>\u65b9\u6cd5 method(\u7528\u4f5c\u51fd\u6570\u503c)<\/li>\n<li>\u4e2d\u95f4\u503c(intermediate value):\n<ul>\n<li>\u51fd\u6570\u8c03\u7528<\/li>\n<li>\u663e\u5f0f\u7c7b\u578b\u8f6c\u6362<\/li>\n<li>\u5404\u79cd\u7c7b\u578b\u7684\u64cd\u4f5c\uff08\u9664\u4e86\u6307\u9488\u5f15\u7528 pointer dereference \u64cd\u4f5c <code>*x<\/code>):\n<ul>\n<li>channel receive operations<\/li>\n<li>sub-string operations<\/li>\n<li>sub-slice operations<\/li>\n<li>\u52a0\u51cf\u4e58\u9664\u7b49\u8fd0\u7b97\u7b26<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u6709\u51e0\u4e2a\u70b9\u9700\u8981\u89e3\u91ca\u4e0b\uff1a<\/p>\n<ul>\n<li>\u5e38\u6570\u4e3a\u4ec0\u4e48\u4e0d\u53ef\u4ee5\u5bfb\u5740?<\/li>\n<\/ul>\n<blockquote>\n<p>\u5982\u679c\u53ef\u4ee5\u5bfb\u5740\u7684\u8bdd\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7\u6307\u9488\u4fee\u6539\u5e38\u6570\u7684\u503c\uff0c\u7834\u574f\u4e86\u5e38\u6570\u7684\u5b9a\u4e49\u3002<\/p>\n<\/blockquote>\n<ul>\n<li>map \u7684\u5143\u7d20\u4e3a\u4ec0\u4e48\u4e0d\u53ef\u4ee5\u5bfb\u5740\uff1f<\/li>\n<\/ul>\n<blockquote>\n<p>\u4e24\u4e2a\u539f\u56e0\uff0c\u5982\u679c\u5bf9\u8c61\u4e0d\u5b58\u5728\uff0c\u5219\u8fd4\u56de\u96f6\u503c\uff0c\u96f6\u503c\u662f\u4e0d\u53ef\u53d8\u5bf9\u8c61\uff0c\u6240\u4ee5\u4e0d\u80fd\u5bfb\u5740\uff0c\u5982\u679c\u5bf9\u8c61\u5b58\u5728\uff0c\u56e0\u4e3a Go \u4e2d map \u5b9e\u73b0\u4e2d\u5143\u7d20\u7684\u5730\u5740\u662f\u53d8\u5316\u7684\uff0c\u8fd9\u610f\u5473\u7740\u5bfb\u5740\u7684\u7ed3\u679c\u662f\u65e0\u610f\u4e49\u7684\u3002<\/p>\n<\/blockquote>\n<ul>\n<li>\u4e3a\u4ec0\u4e48 slice \u4e0d\u7ba1\u662f\u5426\u53ef\u5bfb\u5740\uff0c\u5b83\u7684\u5143\u7d20\u8bfb\u662f\u53ef\u4ee5\u5bfb\u5740\u7684\uff1f<\/li>\n<\/ul>\n<blockquote>\n<p>\u56e0\u4e3a slice \u5e95\u5c42\u5b9e\u73b0\u4e86\u4e00\u4e2a\u6570\u7ec4\uff0c\u5b83\u662f\u53ef\u4ee5\u5bfb\u5740\u7684\u3002<\/p>\n<\/blockquote>\n<ul>\n<li>\u4e3a\u4ec0\u4e48\u5b57\u7b26\u4e32\u4e2d\u7684\u5b57\u7b26\/\u5b57\u8282\u53c8\u4e0d\u80fd\u5bfb\u5740\u5462\uff1f<\/li>\n<\/ul>\n<blockquote>\n<p>\u56e0\u4e3a\u5b57\u7b26\u4e32\u662f\u4e0d\u53ef\u53d8\u7684\u3002<\/p>\n<\/blockquote>\n<p>\u89c4\u8303\u4e2d\u8fd8\u6709\u51e0\u5904\u63d0\u5230\u4e86 addressable:<\/p>\n<ul>\n<li>\u8c03\u7528\u4e00\u4e2a\u63a5\u6536\u8005\u4e3a\u6307\u9488\u7c7b\u578b\u7684\u65b9\u6cd5\u65f6\uff0c\u4f7f\u7528\u4e00\u4e2a\u53ef\u5bfb\u5740\u7684\u503c\u5c06\u81ea\u52a8\u83b7\u53d6\u8fd9\u4e2a\u503c\u7684\u6307\u9488<\/li>\n<li><code>++<\/code>\u3001<code>--<\/code> \u8bed\u53e5\u7684\u64cd\u4f5c\u5bf9\u8c61\u5fc5\u987b\u53ef\u5bfb\u5740\u6216\u8005\u662f map \u7684\u7d22\u5f15\u64cd\u4f5c<\/li>\n<li>\u8d4b\u503c\u8bed\u53e5 <code>=<\/code> \u7684\u5de6\u8fb9\u5bf9\u8c61\u5fc5\u987b\u53ef\u5bfb\u5740\uff0c\u6216\u8005\u662f map \u7684\u7d22\u5f15\u64cd\u4f5c\uff0c\u6216\u8005\u662f <code>_<\/code><\/li>\n<li>\u4e0a\u6761\u540c\u6837\u4f7f\u7528 <code>for ... range<\/code> \u8bed\u53e5<\/li>\n<\/ul>\n<h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"https:\/\/golang.org\/ref\/spec#Address_operators\">Spec: Address operators<\/a><\/li>\n<li><a href=\"https:\/\/stackoverflow.com\/questions\/44543374\/cannot-take-the-address-of-and-cannot-call-pointer-method-on\">\u201ccannot take the address of\u201d and \u201ccannot call pointer method on\u201d - stackoverflow<\/a><\/li>\n<li><a href=\"https:\/\/colobu.com\/2018\/02\/27\/go-addressable\/\">go addressable \u8be6\u89e3<\/a><\/li>\n<\/ul>"},{"title":"Go \u8bed\u8a00\u4f18\u79c0\u8d44\u6e90\u6574\u7406\uff0c\u4e3a\u9879\u76ee\u843d\u5730\u52a0\u901f\ud83c\udfc3[2023.12.28\u66f4\u65b0]","link":"https:\/\/shockerli.net\/post\/go-awesome\/","pubDate":"Thu, 31 Oct 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/go-awesome\/","description":"<blockquote>\n<p>Go \u8bed\u8a00\u4f18\u79c0\u8d44\u6e90\u6574\u7406\uff0c\u4e3a\u9879\u76ee\u843d\u5730\u52a0\u901f\ud83c\udfc3<\/p>\n<p>\u5728 <a href=\"https:\/\/github.com\/shockerli\/go-awesome\">GitHub<\/a> \u4e0a\u7a33\u5b9a\u66f4\u65b0\uff0c\u89c9\u5f97\u4e0d\u9519\u8bf7\u70b9\u4e2a Star \u2764\ufe0f<\/p>\n<p>\u5982\u8f6c\u8f7d\u5206\u4eab\uff0c\u8bf7\u4fdd\u7559\u51fa\u5904\uff0c\u8c22\u8c22 \ud83d\ude06<\/p>\n<p>\u539f\u6587\u5730\u5740: <a href=\"https:\/\/shockerli.net\/post\/go-awesome\">https:\/\/shockerli.net\/post\/go-awesome<\/a><\/p>\n<p>GitHub: <a href=\"https:\/\/github.com\/shockerli\/go-awesome\">https:\/\/github.com\/shockerli\/go-awesome<\/a><\/p>\n<\/blockquote>\n<hr>\n<blockquote>\n<p>\u5b98\u7f51: <a href=\"https:\/\/golang.org\">https:\/\/golang.org<\/a><\/p>\n<p>\u56fd\u5185\u5b98\u7f51\u955c\u50cf(\u8bbf\u95ee\u5feb): <a href=\"https:\/\/golang.google.cn\">https:\/\/golang.google.cn<\/a><\/p>\n<p>GitHub: <a href=\"https:\/\/github.com\/golang\/go\">https:\/\/github.com\/golang\/go<\/a><\/p>\n<p>\u5f00\u53d1\u8005\u5e73\u53f0: <a href=\"https:\/\/go.dev\">https:\/\/go.dev<\/a><\/p>\n<p>Wiki: <a href=\"https:\/\/github.com\/golang\/go\/wiki\">https:\/\/github.com\/golang\/go\/wiki<\/a><\/p>\n<p>\u5b98\u65b9\u535a\u5ba2: <a href=\"https:\/\/blog.golang.org\">https:\/\/blog.golang.org<\/a><\/p>\n<\/blockquote>\n<h2 id=\"\u6307\u5bfc\u539f\u5219\">\u6307\u5bfc\u539f\u5219<\/h2>\n<ul>\n<li>\n<p>\u7b80\u5355\u6027<\/p>\n<blockquote>\n<p>\u590d\u6742\u6027\u628a\u53ef\u8bfb\u7684\u7a0b\u5e8f\u53d8\u5f97\u4e0d\u53ef\u8bfb\uff0c\u590d\u6742\u6027\u7ec8\u7ed3\u4e86\u5f88\u591a\u8f6f\u4ef6\u9879\u76ee\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>\u53ef\u8bfb\u6027<\/p>\n<blockquote>\n<p>\u4ee3\u7801\u662f\u7ed9\u4eba\u770b\u7684\uff0c\u4ee3\u7801\u9605\u8bfb\u65f6\u957f\u8fdc\u8d85\u7f16\u5199\u3002\u7a0b\u5e8f\u5fc5\u987b\u53ef\u7ef4\u62a4\uff0c\u90a3\u53ef\u8bfb\u662f\u7b2c\u4e00\u6b65\u3002<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p>\u751f\u4ea7\u7387<\/p>\n<blockquote>\n<p>\u62e5\u6709\u4f17\u591a\u7684\u5de5\u5177\u96c6\u548c\u57fa\u7840\u5e93\uff0c\u53ef\u4ee5\u5f88\u7b80\u5355\u65b9\u4fbf\u7684\u5b8c\u6210\u7edd\u5927\u591a\u6570\u5de5\u4f5c\u3002\n\u7f16\u8bd1\u901f\u5ea6\u8db3\u591f\u5feb\uff0c\u62e5\u6709\u52a8\u6001\u8bed\u8a00\u7684\u9ad8\u6548\uff0c\u4f46\u5374\u4e0d\u4f1a\u9762\u4e34\u52a8\u6001\u8bed\u8a00\u4e0d\u53ef\u9760\u7684\u95ee\u9898\u3002\n\u81ea\u5e26\u7f16\u7a0b\u89c4\u8303\uff0c\u4f7f\u5f97\u56e2\u961f\u4ee3\u7801\u4e00\u81f4\uff0c\u4e5f\u5e2e\u52a9\u5f00\u53d1\u8005\u53d1\u73b0\u548c\u907f\u514d\u6f5c\u5728\u7684\u9519\u8bef\u3002<\/p>\n<\/blockquote>\n<\/li>\n<\/ul>\n<h2 id=\"awesome\">Awesome<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/topics\/golang\"><strong>GitHub Topic for Go<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/github.com\/avelino\/awesome-go\"><strong>Awesome Go<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hackstoic\/golang-open-source-projects\">golang-open-source-projects<\/a> - \u542b\u63cf\u8ff0\u7684\u4e2d\u6587\u7248 Awesome Go<\/li>\n<li><a href=\"https:\/\/github.com\/gostor\/awesome-go-storage\">Awesome Go Storage<\/a> - Go \u5b58\u50a8\u76f8\u5173\u5f00\u6e90\u9879\u76ee<\/li>\n<li><a href=\"https:\/\/github.com\/hyper0x\/awesome-go-China\/blob\/master\/zh_CN\/README.md\">awesome-go-China<\/a> - \u4e13\u95e8\u6536\u96c6\u534e\u4eba\u5199\u7684\u5f00\u6e90\u9879\u76ee<\/li>\n<li><a href=\"https:\/\/github.com\/tmrts\/go-patterns\">Go Patterns<\/a> - Go \u7248\u672c\u7684\u8bbe\u8ba1\u6a21\u5f0f<\/li>\n<li><a href=\"https:\/\/github.com\/sevenelevenlee\/go-patterns\">sevenelevenlee\/go-patterns<\/a> - \u8bbe\u8ba1\u6a21\u5f0f<\/li>\n<li><a href=\"https:\/\/github.com\/qiualiang\/gof\">GoF \u8bbe\u8ba1\u6a21\u5f0f<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/greyireland\/algorithm-pattern\">greyireland\/algorithm-pattern<\/a> - \u7b97\u6cd5\u6a21\u677f<\/li>\n<li><a href=\"https:\/\/github.com\/0xAX\/go-algorithms\">go-algorithms<\/a> - Go \u7248\u672c\u7684\u6570\u636e\u7ed3\u6784\u548c\u7b97\u6cd5<\/li>\n<li><a href=\"https:\/\/github.com\/talkgo\/read\">Go \u5b66\u4e60\u4e4b\u8def<\/a> - Go \u5b66\u4e60\u8d44\u6599\u6c47\u96c6<\/li>\n<li><a href=\"https:\/\/github.com\/Alikhll\/golang-developer-roadmap\">Go \u5f00\u53d1\u8005\u8def\u7ebf\u56fe<\/a><\/li>\n<li><a href=\"https:\/\/reposhub.com\/go\">ReposHub-Go<\/a><\/li>\n<li><a href=\"https:\/\/visualgo.net\">VisuAlgo<\/a> - \u6570\u636e\u7ed3\u6784\u548c\u7b97\u6cd5\u52a8\u6001\u53ef\u89c6\u5316<\/li>\n<\/ul>\n<h2 id=\"\u5927\u725b\u7ec4\u7ec7\">\u5927\u725b\/\u7ec4\u7ec7<\/h2>\n<blockquote>\n<p>Go \u8bed\u8a00\u65b9\u9762\u7684\u5927\u725b\uff0c\u6216\u8005\u4f18\u79c0 Go \u9879\u76ee\u7684\u7ec4\u7ec7<\/p>\n<\/blockquote>\n<h3 id=\"\u5927\u725b\">\u5927\u725b<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/mattn?tab=repositories&amp;q=&amp;type=&amp;language=go\">mattn<\/a> - \u5199\u4e86\u6570\u767e\u4e2a Go \u9879\u76ee\uff0c\u76db\u4ea7\u4f18\u8d28\u9879\u76ee<\/li>\n<li><a href=\"https:\/\/github.com\/Unknwon\">Unknwon<\/a> - gogs\/macaron \u7b49\u9879\u76ee\u4f5c\u8005\uff0c\u300aThe Way to Go\u300b\u8bd1\u8005<\/li>\n<li><a href=\"https:\/\/github.com\/jinzhu\">Jinzhu<\/a> - gorm\/QOR \u7b49\u4f5c\u8005<\/li>\n<li><a href=\"https:\/\/github.com\/valyala\">valyala<\/a> - fasthttp\/fastjson \u7b49\u4f5c\u8005<\/li>\n<li><a href=\"https:\/\/github.com\/vmihailenco\">vmihailenco<\/a> - go-redis\/go-pg \u7b49\u4f5c\u8005<\/li>\n<li><a href=\"https:\/\/github.com\/kataras?utf8=%E2%9C%93&amp;tab=repositories&amp;q=&amp;type=source&amp;language=go\">kataras<\/a> - iris \u4f5c\u8005<\/li>\n<li><a href=\"https:\/\/github.com\/bep\">bep<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/spf13\">spf13<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\">tidwall<\/a><\/li>\n<\/ul>\n<h3 id=\"\u7ec4\u7ec7\">\u7ec4\u7ec7<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/gorilla\">Gorilla web toolkit<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/loov\">loov<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\">HashiCorp<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/lestrrat-go\">lestrrat-go<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/uber?q=&amp;type=&amp;language=go\">Uber<\/a> - Open Source Software at Uber<\/li>\n<li><a href=\"https:\/\/github.com\/stretchr\">Stretchr<\/a> - Tame your unstructured data<\/li>\n<li><a href=\"https:\/\/github.com\/containous\">Containous<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\">Charm<\/a> - \u63d0\u4f9b\u4e00\u7cfb\u5217\u4f18\u79c0\u7684\u547d\u4ee4\u884c\u5de5\u5177\u548c\u5e93<\/li>\n<\/ul>\n<h2 id=\"\u6587\u6863\">\u6587\u6863<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/golang\/proposal\">Proposing Changes to Go<\/a> - Go \u8bed\u8a00\u8bbe\u8ba1\u6587\u6863<\/li>\n<li><a href=\"https:\/\/draveness.me\/golang\/\"><strong>Go \u8bed\u8a00\u8bbe\u8ba1\u4e0e\u5b9e\u73b0<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/github.com\/changkun\/go-under-the-hood\"><strong>Go \u8bed\u8a00\u539f\u672c<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/github.com\/go101\/go101\"><strong>Go 101<\/strong><\/a> <a href=\"https:\/\/github.com\/golang101\/golang101\">\uff08\u4e2d\u6587\u7248\uff09<\/a><\/li>\n<li><a href=\"http:\/\/tour.studygolang.com\">Go \u5b98\u65b9\u5165\u95e8\u6307\u5357<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/chai2010\/advanced-go-programming-book\">Go \u8bed\u8a00\u9ad8\u7ea7\u7f16\u7a0b<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/RainbowMango\/GoExpertProgramming\">Go \u4e13\u5bb6\u7f16\u7a0b<\/a><\/li>\n<li><a href=\"http:\/\/docscn.studygolang.com\">Go \u7f16\u7a0b\u8bed\u8a00<\/a><\/li>\n<li><a href=\"https:\/\/studygolang.com\/pkgdoc\">Golang \u6807\u51c6\u5e93\u6587\u6863(\u5b98\u65b9\/\u4e2d\u6587)<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/polaris1119\/The-Golang-Standard-Library-by-Example\">Go \u8bed\u8a00\u6807\u51c6\u5e93<\/a> <em><a href=\"https:\/\/books.studygolang.com\/The-Golang-Standard-Library-by-Example\/\"><code>\u5728\u7ebf\u9605\u8bfb<\/code><\/a><\/em><\/li>\n<li><a href=\"https:\/\/github.com\/Unknwon\/the-way-to-go_ZH_CN\">\u300aThe Way to Go\u300b\u4e2d\u6587\u7248<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gopl-zh\/gopl-zh.github.com\">Go \u8bed\u8a00\u5723\u7ecf\uff08\u4e2d\u6587\u7248\uff09<\/a><\/li>\n<li><a href=\"http:\/\/c.biancheng.net\/golang\/\">Go\u8bed\u8a00\u5165\u95e8\u6559\u7a0b<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/astaxie\/Go-in-Action\">Go \u5b9e\u6218\u5f00\u53d1<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/astaxie\/build-web-application-with-golang\">Go Web \u5e94\u7528\u5f00\u53d1<\/a><\/li>\n<li><a href=\"http:\/\/yougg.github.io\/static\/gonote\/GolangStudy.html\">Go \u5b66\u4e60\u6280\u80fd\u6811<\/a><\/li>\n<li><a href=\"https:\/\/go-zh.org\/doc\/effective_go.html\">\u5b9e\u6548 Go \u7f16\u7a0b<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/yougg\/gonote\">Go \u8bed\u8a00\u8bed\u6cd5\u8be6\u89e3\u7b14\u8bb0<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Unknwon\/go-study-index\">Go \u8bed\u8a00\u5b66\u4e60\u8d44\u6599\u4e0e\u793e\u533a\u7d22\u5f15<\/a><\/li>\n<li><a href=\"http:\/\/go-database-sql.org\">Go database\/sql tutorial<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hyper0x\/go_command_tutorial\">GO \u547d\u4ee4\u6559\u7a0b<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/tiancaiamao\/go-internals\">\u6df1\u5165\u89e3\u6790 Go<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/achun\/Go-Blog-In-Action\">Go \u8bed\u8a00\u535a\u5ba2\u5b9e\u8df5<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/mikespook\/Learning-Go-zh-cn\">\u5b66\u4e60 Go \u8bed\u8a00<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/chai2010\/go2-book\">Go2\u7f16\u7a0b\u6307\u5357<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/VividCortex\/go-database-sql-tutorial\">Go database\/sql tutorial<\/a> - Go \u6570\u636e\u5e93(database\/sql)\u5f00\u53d1\u4f7f\u7528\u6559\u7a0b<\/li>\n<li><a href=\"https:\/\/github.com\/gowebexamples\/gowebexamples\">Go Web Examples<\/a> - Go Web \u5f00\u53d1\u793a\u4f8b<\/li>\n<li><a href=\"https:\/\/colobu.com\/goasm\/\">Go Assembly<\/a> - \u901a\u8fc7\u793a\u4f8b\u4ecb\u7ecd Go \u6c47\u7f16\u529f\u80fd<\/li>\n<li><a href=\"https:\/\/github.com\/hoanhan101\/ultimate-go\">Ultimate Go<\/a> - \u7ec8\u6781 Go \u5b66\u4e60\u6307\u5357\uff0c\u5305\u542b\u5927\u91cf\u6587\u6863\u5316\u7684\u4ee3\u7801\u548c\u7a0b\u5e8f\u5206\u6790<\/li>\n<li><a href=\"https:\/\/cloud.tencent.com\/developer\/doc\/1101\">Go \u6559\u7a0b<\/a> - \u817e\u8baf\u4e91\u5f00\u53d1\u8005\u624b\u518c<\/li>\n<li><a href=\"https:\/\/github.com\/guyan0319\/golang_development_notes\/blob\/master\/zh\/preface.md\">Golang \u5f00\u53d1\u7b14\u8bb0<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/cch123\/golang-notes\">golang-notes<\/a> - Go \u6e90\u7801\u9605\u8bfb\u7b14\u8bb0<\/li>\n<li><a href=\"https:\/\/github.com\/karlseguin\/the-little-go-book\">The Little Go Book<\/a> <a href=\"https:\/\/github.com\/songleo\/the-little-go-book_ZH_CN\">\uff08\u4e2d\u6587\u7248\uff09<\/a><\/li>\n<li><a href=\"https:\/\/www.freecodecamp.org\/news\/learning-go-from-zero-to-hero-d2a3223b3d86\/\">Learning Go\u200a\u2014\u200afrom zero to hero<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/teh-cmc\/go-internals\">go-internals<\/a> - \u6df1\u5165\u7406\u89e3 Go<\/li>\n<li><a href=\"https:\/\/github.com\/quii\/learn-go-with-tests\">Learn Go with Tests<\/a><\/li>\n<li><a href=\"http:\/\/www.topgoer.com\">Go\u57fa\u7840\u6559\u7a0b<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/geektutu\/7days-golang\">7\u5929\u7528Go\u4ece\u96f6\u5b9e\u73b0\u7cfb\u5217<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/geektutu\/high-performance-go\">Go \u8bed\u8a00\u9ad8\u6027\u80fd\u7f16\u7a0b<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rubyhan1314\/Golang-100-Days\">Golang - 100\u5929\u4ece\u65b0\u624b\u5230\u5927\u5e08<\/a> - \u67d0\u57f9\u8bad\u673a\u6784\u7684\u90e8\u5206\u6559\u7a0b\u5185\u5bb9<\/li>\n<li><a href=\"https:\/\/github.com\/hoanhan101\/algo\">hoanhan101\/algo<\/a> - 107+ \u7f16\u7801\u9762\u8bd5\u95ee\u9898\uff0c\u5305\u62ec\u8be6\u7ec6\u7684\u89e3\u51b3\u65b9\u6848\uff0c\u6d4b\u8bd5\u7528\u4f8b\u548c\u7a0b\u5e8f\u5206\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/overnote\/over-golang\">over-golang<\/a> - Go \u5b66\u4e60\u7b14\u8bb0<\/li>\n<li><a href=\"https:\/\/github.com\/overnote\/over-algorithm\">over-algorithm<\/a> - Go \u7b97\u6cd5\u7b14\u8bb0<\/li>\n<li><a href=\"https:\/\/github.com\/inancgumus\/learngo\">learngo<\/a> - 1000+ Go \u793a\u4f8b\u3001\u7ec3\u4e60\u548c\u6d4b\u8bd5<\/li>\n<li><a href=\"https:\/\/github.com\/austingebauer\/go-leetcode\">go-leetcode<\/a> - LeetCode \u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/hantmac\/Mastering_Go_ZH_CN\">\u73a9\u8f6c GO<\/a> - \u300aMastering GO\u300b\u4e2d\u6587\u8bd1\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/halfrost\/LeetCode-Go\">leetcode-cookbook<\/a> - LeetCode in Go<\/li>\n<li><a href=\"https:\/\/github.com\/aceld\/golang\">Golang\u4fee\u517b\u4e4b\u8def<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/chai2010\/go-ast-book\">Go\u8bed\u6cd5\u6811\u5165\u95e8<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/lotusirous\/go-concurrency-patterns\">Go Concurrency Patterns<\/a> - Go \u5e76\u53d1\u6a21\u5f0f\u573a\u666f\u96c6\u5408<\/li>\n<li><a href=\"https:\/\/github.com\/yezihack\/algo\">yezihack\/algo<\/a> - \u6570\u636e\u7ed3\u6784\u4e0e\u7b97\u6cd5<\/li>\n<li><a href=\"https:\/\/github.com\/jincheng9\/golang-cheat-sheet-cn\">golang-cheat-sheet-cn<\/a> - GitHub\u4e0a\u6700\u6d41\u884c\u7684Golang\u4ee3\u7801\u901f\u67e5\u8868\u4e2d\u6587\u7ffb\u8bd1\u7248\u672c<\/li>\n<\/ul>\n<h2 id=\"\u6307\u5357\">\u6307\u5357<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/uber-go\/guide\">Uber Go Style Guide<\/a><\/li>\n<li><a href=\"https:\/\/golang.org\/ref\/spec\">The Go Programming Language Specification<\/a> <a href=\"http:\/\/docscn.studygolang.com\/ref\/spec.old\">\uff08\u4e2d\u6587\u8001\u7248\uff09<\/a><\/li>\n<li><a href=\"http:\/\/docscn.studygolang.com\/doc\/effective_go.html\">\u5b9e\u6548 Go \u7f16\u7a0b<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/golang\/go\/wiki\/CodeReviewComments\">Go Code Review Comments<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/unknwon\/go-code-convention\">Go Code Convention<\/a><\/li>\n<li><a href=\"https:\/\/go101.org\/article\/unofficial-faq.html\">Go FAQ 101<\/a><\/li>\n<li><a href=\"https:\/\/go101.org\/article\/details.html\">Go Details 101<\/a><\/li>\n<li><a href=\"https:\/\/go101.org\/article\/tips.html\">Go Tips 101<\/a><\/li>\n<li><a href=\"https:\/\/go101.org\/article\/quizzes.html\">Go Quizzes 101<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/cristaloleg\/go-advices\">go-advices<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dgryski\/go-perfbook\">go-perfbook<\/a> - \u7f16\u5199\u548c\u4f18\u5316Go\u4ee3\u7801<\/li>\n<li><a href=\"https:\/\/dave.cheney.net\/practical-go\/presentations\/qcon-china.html\">Practical Go: Real world advice for writing maintainable Go programs<\/a> <a href=\"https:\/\/www.udnz.com\/2018\/10\/27\/%E3%80%90%E8%AF%91%E3%80%91Go-%E8%AF%AD%E8%A8%80%E5%AE%9E%E8%B7%B5%EF%BC%9A%E7%BC%96%E5%86%99%E5%8F%AF%E7%BB%B4%E6%8A%A4%E7%9A%84%E7%A8%8B%E5%BA%8F%E7%9A%84%E5%BB%BA%E8%AE%AE\/\">\uff08Go \u8bed\u8a00\u5b9e\u8df5\uff1a\u7f16\u5199\u53ef\u7ef4\u62a4\u7684\u7a0b\u5e8f\u7684\u5efa\u8bae\uff09<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Tencent\/secguide\/blob\/main\/Go%E5%AE%89%E5%85%A8%E6%8C%87%E5%8D%97.md\">Go \u5b89\u5168\u6307\u5357<\/a> - \u817e\u8baf\u53d1\u5e03\u7684\u300a\u4ee3\u7801\u5b89\u5168\u6307\u5357\u300bGo \u8bed\u8a00\u7bc7<\/li>\n<li><a href=\"https:\/\/github.com\/luk4z7\/go-concurrency-guide\">Go Concurrency Guide<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/nikolaydubina\/go-recipes\">Go Recipes<\/a> - \u4e00\u4e9b\u6280\u5de7<\/li>\n<\/ul>\n<h2 id=\"\u6587\u7ae0\">\u6587\u7ae0<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/ardanlabs\/gotraining\"><strong>Go Training<\/strong><\/a> - \u5927\u91cf\u4f18\u8d28 Go \u76f8\u5173\u6587\u7ae0\u3001\u89c6\u9891\u7b49\u8d44\u6599<\/li>\n<li><a href=\"https:\/\/github.com\/polaris1119\/golangweekly\"><strong>Go\u8bed\u8a00\u7231\u597d\u8005\u5468\u520a<\/strong><\/a><\/li>\n<li><a href=\"https:\/\/github.com\/developer-learning\/night-reading-go\"><strong>Go \u591c\u8bfb<\/strong><\/a> - Go \u6807\u51c6\u5305\u3001\u5f00\u6e90\u9879\u76ee\u6e90\u4ee3\u7801\u9605\u8bfb\u8bb2\u89e3<\/li>\n<li><a href=\"https:\/\/github.com\/qcrao\/Go-Questions\">Go-Questions<\/a> - Go \u8bed\u8a00\u5b66\u4e60\u5165\u95e8\u548c\u8fdb\u9636\u77e5\u8bc6<\/li>\n<li><a href=\"https:\/\/colobu.com\/2015\/09\/07\/gotchas-and-common-mistakes-in-go-golang\/\">Go\u768450\u5ea6\u7070\uff1aGolang\u65b0\u5f00\u53d1\u8005\u8981\u6ce8\u610f\u7684\u9677\u9631\u548c\u5e38\u89c1\u9519\u8bef<\/a><\/li>\n<li><a href=\"http:\/\/www.cnblogs.com\/snowInPluto\/p\/7403097.html\">Go \u7a0b\u5e8f\u7684\u6027\u80fd\u4f18\u5316\u53ca pprof \u7684\u4f7f\u7528<\/a><\/li>\n<li><a href=\"https:\/\/www.cnblogs.com\/snowInPluto\/p\/7785651.html\">gops - Go\u8bed\u8a00\u7a0b\u5e8f\u67e5\u770b\u548c\u8bca\u65ad\u5de5\u5177<\/a><\/li>\n<li><a href=\"https:\/\/blog.csdn.net\/gophers\/article\/details\/37815009\">Go\u6e90\u7801\u5206\u6790\u2014\u2014http.ListenAndServe()\u662f\u5982\u4f55\u5de5\u4f5c\u7684<\/a><\/li>\n<li><a href=\"https:\/\/www.jianshu.com\/p\/e3b2b1194830\">GoConvey \u6846\u67b6\u4f7f\u7528\u6307\u5357<\/a><\/li>\n<li><a href=\"https:\/\/www.jianshu.com\/p\/70a93a9ed186\">GoStub \u6846\u67b6\u4f7f\u7528\u6307\u5357<\/a><\/li>\n<li><a href=\"https:\/\/www.jianshu.com\/p\/f4e773a1b11f\">GoMock \u6846\u67b6\u4f7f\u7528\u6307\u5357<\/a><\/li>\n<li><a href=\"https:\/\/www.jianshu.com\/p\/2f675d5e334e\">Monkey \u6846\u67b6\u4f7f\u7528\u6307\u5357<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/SuperPaintman\/the-evolution-of-a-go-programmer\">The Evolution of a Go Programmer<\/a> - Go \u7a0b\u5e8f\u5458\u7684\u8fdb\u5316\u4e4b\u8def<\/li>\n<\/ul>\n<h2 id=\"\u4ed8\u8d39\u6559\u7a0b\">\u4ed8\u8d39\u6559\u7a0b<\/h2>\n<ul>\n<li><a href=\"https:\/\/juejin.im\/book\/5b0778756fb9a07aa632301e\">\u57fa\u4e8e Go \u8bed\u8a00\u6784\u5efa\u4f01\u4e1a\u7ea7\u7684 RESTful API \u670d\u52a1<\/a> - \u6398\u91d1\u5c0f\u518c<\/li>\n<li><a href=\"https:\/\/time.geekbang.org\/column\/112\">Go\u8bed\u8a00\u6838\u5fc336\u8bb2<\/a> - \u6781\u5ba2\u65f6\u95f4<\/li>\n<\/ul>\n<h2 id=\"\u6210\u54c1\u9879\u76ee\">\u6210\u54c1\u9879\u76ee<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/go-shiori\/shiori\">Shiori<\/a> - \u4e66\u7b7e\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/studygolang\/studygolang\">studygolang<\/a> - Go \u8bed\u8a00\u4e2d\u6587\u7f51<\/li>\n<li><a href=\"https:\/\/github.com\/FiloSottile\/mkcert\">mkcert<\/a> - \u751f\u6210\u672c\u5730 HTTPS \u52a0\u5bc6\u8bc1\u4e66\u7684\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/cloudflare\/cfssl\">cfssl<\/a> - Cloudflare \u5f00\u6e90\u7684 PKI \u548c TLS \u5de5\u5177\u96c6<\/li>\n<li><a href=\"https:\/\/github.com\/goodrain\/rainbond\">Rainbond<\/a> - \u57fa\u4e8eDocker\u3001Kubernetes\u7b49\u5bb9\u5668\u6280\u672f\u7684\u5f00\u6e90PaaS<\/li>\n<li><a href=\"https:\/\/github.com\/qw4990\/NYADB2\"><strong>NYADB2<\/strong><\/a> - Go \u5b9e\u73b0\u7684\u5173\u7cfb\u578b\u6570\u636e\u5e93, \u503c\u5f97\u7528\u4e8e\u5b66\u4e60<\/li>\n<li><a href=\"https:\/\/github.com\/eiblog\/eiblog\">EiBlog<\/a> - \u535a\u5ba2<\/li>\n<li><a href=\"https:\/\/github.com\/peterq\/pan-light\">pan-light<\/a> - \u4e0d\u9650\u901f\u7684\u767e\u5ea6\u7f51\u76d8\u5ba2\u6237\u7aef, \u57fa\u4e8e Go + Qt5 \u5f00\u53d1<\/li>\n<li><a href=\"https:\/\/github.com\/qjfoidnh\/BaiduPCS-Go\">BaiduPCS-Go<\/a> - \u767e\u5ea6\u7f51\u76d8\u5ba2\u6237\u7aef\uff08\u547d\u4ee4\u884c\uff09<\/li>\n<li><a href=\"https:\/\/github.com\/BarryYan\/daily-warm\">daily-warm<\/a> - \u6bcf\u5929\u5b9a\u65f6\u53d1\u90ae\u4ef6\u7ed9\u4f60\u5173\u5fc3\u7684\u4eba<\/li>\n<li><a href=\"https:\/\/github.com\/88250\/pipe\">pipe<\/a> - \u535a\u5ba2\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/MichaelMure\/mdr\">mdr<\/a> - \u547d\u4ee4\u884c\u4e0b\u7684 Markdown \u9605\u8bfb\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/miniflux\/miniflux\">miniflux<\/a> - Feed \u9605\u8bfb\u5668<\/li>\n<li><a href=\"https:\/\/git.mills.io\/prologic\/golinks\">golinks<\/a> - \u521b\u5efa\u81ea\u5b9a\u4e49\u4e66\u7b7e\u3001\u547d\u4ee4\u3001\u641c\u7d22\u7b49<\/li>\n<li><a href=\"https:\/\/github.com\/88250\/liandi\">\u94fe\u6ef4\u7b14\u8bb0<\/a> - \u684c\u9762\u7aef\u7b14\u8bb0\u5e94\u7528<\/li>\n<li><a href=\"https:\/\/github.com\/wabarc\/wayback\">wayback<\/a> - \u7f51\u9875\u5feb\u7167\u5907\u4efd<\/li>\n<li><a href=\"https:\/\/github.com\/mlogclub\/bbs-go\">bbs-go<\/a> - \u5f00\u6e90\u793e\u533a<\/li>\n<li><a href=\"https:\/\/github.com\/openscrm\/api-server\">OpenSCRM<\/a> - \u57fa\u4e8eGo\u548cReact\u7684\u4f01\u4e1a\u5fae\u4fe1\u79c1\u57df\u6d41\u91cf\u7ba1\u7406\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/answerdev\/answer\">Answer<\/a> - \u95ee\u7b54\u793e\u533a<\/li>\n<li><a href=\"https:\/\/github.com\/knadh\/listmonk\">listmonk<\/a> - \u8d44\u8baf\u3001\u90ae\u4ef6\u5217\u8868\u7ba1\u7406\u5de5\u5177\uff08Web\uff09<\/li>\n<li><a href=\"https:\/\/github.com\/1Panel-dev\/1Panel\">1Panel<\/a> - Linux \u670d\u52a1\u5668\u8fd0\u7ef4\u7ba1\u7406\u9762\u677f<\/li>\n<li><a href=\"https:\/\/github.com\/ArtalkJS\/Artalk\">Artalk<\/a> - \u81ea\u6258\u7ba1\u8bc4\u8bba\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/usememos\/memos\">memos<\/a> - \u7b14\u8bb0\u670d\u52a1\uff0c\u5177\u6709\u79fb\u52a8\u5ba2\u6237\u7aef\u3001\u6d4f\u89c8\u5668\u6269\u5c55\u7b49\u751f\u6001<\/li>\n<li><a href=\"https:\/\/github.com\/babyname\/fate\">Fate<\/a> - \u547d\u8fd0\uff08\u516b\u5b57\uff09\u8d77\u540d<\/li>\n<\/ul>\n<h3 id=\"\u9759\u6001\u7f51\u7ad9\u751f\u6210\u5668\">\u9759\u6001\u7f51\u7ad9\u751f\u6210\u5668<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/gohugoio\/hugo\">Hugo<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/andrewpillar\/jrnl\">jrnl<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/plentico\/plenti\">plenti<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/verless\/verless\">verless<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/InkProject\/ink\">ink<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/moulco\/moul\">moul<\/a> - \u751f\u6210\u7167\u7247\u7ad9\u70b9<\/li>\n<li><a href=\"https:\/\/github.com\/imdario\/zas\">zas<\/a><\/li>\n<\/ul>\n<h2 id=\"\u5b66\u4e60\u9879\u76ee\">\u5b66\u4e60\u9879\u76ee<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/eranyanay\/1m-go-websockets\">1m-go-websockets<\/a> - \u8be5\u9879\u76ee\u6f14\u793a\u4e86\u5982\u4f55\u7528 Go \u7f16\u5199\u4e00\u4e2a\u53ef\u4ee5\u63d0\u4f9b\u8d85\u8fc7\u4e00\u767e\u4e07\u4e2a <code>websockets<\/code> \u8fde\u63a5\u3001\u8fd0\u884c\u5185\u5b58\u5c0f\u4e8e 1GB \u7684\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/mmcgrana\/gobyexample\">Go by Example<\/a> - \u901a\u8fc7\u5b9e\u4f8b\u5b66\u4e60 Go<\/li>\n<li><a href=\"https:\/\/github.com\/marmotedu\/iam\">IAM<\/a> - \u8eab\u4efd\u8bc6\u522b\u4e0e\u8bbf\u95ee\u7ba1\u7406\u7cfb\u7edf\uff08\u6559\u5b66\u9879\u76ee\uff09<\/li>\n<li><a href=\"https:\/\/github.com\/teivah\/100-go-mistakes\">100-go-mistakes<\/a> - 100 \u4e2a Go \u5e38\u89c1\u9519\u8bef<\/li>\n<\/ul>\n<h2 id=\"\u5f00\u6e90\u7c7b\u5e93\">\u5f00\u6e90\u7c7b\u5e93<\/h2>\n<h3 id=\"web-\u6846\u67b6\">Web \u6846\u67b6<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/go-macaron\/macaron\">Macaron<\/a> - \u4e00\u6b3e\u5177\u6709\u9ad8\u751f\u4ea7\u529b\u548c\u6a21\u5757\u5316\u8bbe\u8ba1\u7684 Go Web \u6846\u67b6 <code>\u56fd\u4ea7<\/code><\/li>\n<li><a href=\"https:\/\/github.com\/astaxie\/beego\">Beego<\/a> - \u4e00\u4e2a\u4f7f\u7528 Go \u7684\u601d\u7ef4\u6765\u5e2e\u52a9\u60a8\u6784\u5efa\u5e76\u5f00\u53d1 Go \u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u6e90\u6846\u67b6 <code>\u56fd\u4ea7<\/code><\/li>\n<li><a href=\"https:\/\/github.com\/gin-gonic\/gin\">Gin<\/a> - \u8f7b\u91cf Web \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/kataras\/iris\">Iris<\/a> - Web \u5f00\u53d1\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/revel\/revel\">Revel<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/labstack\/echo\">echo<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/henrylee2cn\/faygo\">Faygo<\/a> - <code>\u56fd\u4ea7<\/code><\/li>\n<li><a href=\"https:\/\/github.com\/henrylee2cn\/teleport\">Teleport<\/a> - Socket \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/gogf\/gf\">GoFrame<\/a> - <code>\u56fd\u4ea7<\/code><\/li>\n<li><a href=\"https:\/\/github.com\/qor\/qor\">QOR<\/a> - \u7cfb\u5217\u5e94\u7528\u5f00\u53d1\u7ec4\u4ef6\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/devfeel\/dotweb\">DotWeb<\/a> - <code>\u56fd\u4ea7<\/code><\/li>\n<li><a href=\"https:\/\/github.com\/rs\/rest-layer\">REST Layer<\/a> - REST API framework<\/li>\n<li><a href=\"https:\/\/github.com\/honeytrap\/honeytrap\">Honeytrap<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/ponzu-cms\/ponzu\">Ponzu<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gernest\/utron\">utron<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/kataras\/muxie\">muxie<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gobuffalo\/buffalo\">Buffalo<\/a> - \u5feb\u901f\u751f\u6210 Web \u9879\u76ee\u7684\u5f00\u53d1\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/smallnest\/go-web-framework-benchmark\">go-web-framework-benchmark<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gofiber\/fiber\">fiber<\/a> - \u4e00\u79cd Express \u98ce\u683c\u7684\u3001\u57fa\u4e8e fasthttp \u7684 HTTP Web \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/go-aah\/aah\">aah<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/pingcap\/fn\">pingcap\/fn<\/a> - \u652f\u6301\u7ed1\u5b9a\u4efb\u4f55\u65b9\u6cd5\uff0c\u6784\u5efa\u6210 POST+JSON \u63a5\u53e3<\/li>\n<li><a href=\"https:\/\/github.com\/flamego\/flamego\">flamego<\/a> - <code>unknwon<\/code> \u5f00\u53d1\u7684\u53c8\u4e00\u6b3e Web \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/rs\/rest-layer\">REST Layer<\/a> - REST API \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/rookie-ninja\/rk-boot\">rk-boot<\/a><\/li>\n<\/ul>\n<h3 id=\"\u4e1a\u52a1\u6846\u67b6\">\u4e1a\u52a1\u6846\u67b6<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/YaoApp\/yao\">YAO<\/a> - \u4f7f\u7528 JSON \u5373\u53ef\u521b\u5efa\u6570\u636e\u5e93\u6a21\u578b\u3001\u7f16\u5199 API \u63a5\u53e3\u3001\u63cf\u8ff0\u7ba1\u7406\u540e\u53f0\u754c\u9762\u7684\u5e94\u7528\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/GoAdminGroup\/go-admin\">GoAdminGroup\/go-admin<\/a> - \u540e\u53f0\u7ba1\u7406\u5feb\u901f\u5f00\u53d1\u6846\u67b6\uff0c\u4e0e laravel-admin \u7c7b\u4f3c<\/li>\n<li><a href=\"https:\/\/github.com\/go-admin-team\/go-admin\">wenjianzhang\/go-admin<\/a> - \u57fa\u4e8e Gin + Vue \u5b9e\u73b0\u7684\u540e\u53f0\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/flipped-aurora\/gin-vue-admin\">gin-vue-admin<\/a> - \u57fa\u4e8e Gin + Vue \u5b9e\u73b0\u7684\u540e\u53f0\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/Shpota\/goxygen\">goxygen<\/a> - \u57fa\u4e8e Go, React, MongoDB \u6280\u672f\u5b9e\u73b0\u7684\u5168\u6808\u5e94\u7528\u751f\u6210\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/admpub\/nging\">nging<\/a> - Go\u8bed\u8a00\u901a\u7528\u540e\u53f0\u7ba1\u7406\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/1024casts\/snake\">snake<\/a> - \u4e1a\u52a1API\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/pocketbase\/pocketbase\">PocketBase<\/a> - \u5e26\u6709\u540e\u53f0\u7ba1\u7406\u9762\u677f\u3001\u6587\u4ef6\u548c\u6743\u9650\u7ba1\u7406\u3001\u96c6\u6210 SQLite \u6570\u636e\u5e93\u7684\u5355\u4e00\u6587\u4ef6\u540e\u7aef\u670d\u52a1\u5f00\u53d1\u6846\u67b6\uff0c\u652f\u6301 Dart \u548c JS SDK \u5feb\u901f\u5f00\u53d1 APP<\/li>\n<li><a href=\"https:\/\/github.com\/dotenx\/dotenx\">DoTenX<\/a> - \u4f4e\u4ee3\u7801\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/daptin\/daptin\">Daptin<\/a> - Backend As A Service - GraphQL\/JSON-API Headless CMS<\/li>\n<\/ul>\n<h3 id=\"\u9879\u76ee\u9aa8\u67b6\">\u9879\u76ee\u9aa8\u67b6<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/golang-standards\/project-layout\">Standard Go Project Layout<\/a> - Go \u9879\u76ee\u76ee\u5f55\u7ed3\u6784\u793a\u4f8b<\/li>\n<li><a href=\"https:\/\/github.com\/adobe\/go-starter\">go-starter<\/a> - Adobe \u7684 Go \u5de5\u7a0b\u6a21\u677f<\/li>\n<li><a href=\"https:\/\/github.com\/bxcodec\/go-clean-arch\">go-clean-arch<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/qiangxue\/go-rest-api\">go-rest-api<\/a> - Go RESTful API Starter Kit<\/li>\n<li><a href=\"https:\/\/github.com\/create-go-app\/cli\">Create Go App CLI<\/a> - \u901a\u8fc7\u547d\u4ee4\u884c\u521b\u5efa\u524d\u540e\u7aef\u9879\u76ee\u7684\u5f00\u53d1\u9aa8\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/dipeshdulal\/clean-gin\">clean-gin<\/a> - \u57fa\u4e8e Gin \u6784\u5efa\u7684\u6574\u6d01\u67b6\u6784\u9879\u76ee\u9aa8\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/moul\/golang-repo-template\">golang-repo-template<\/a> - \u4e00\u4e2a\u5305\u542b\u4e86\u5f88\u591a\u5b9e\u8df5\u7684\u9879\u76ee\u6a21\u677f<\/li>\n<\/ul>\n<h3 id=\"ddd-\u6846\u67b6\">DDD \u6846\u67b6<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/ThreeDotsLabs\/wild-workouts-go-ddd-example\">Wild Workouts<\/a> - DDD\u3001\u6574\u6d01\u67b6\u6784\u3001CQRS\u7684\u793a\u4f8b\u9879\u76ee<\/li>\n<li><a href=\"https:\/\/github.com\/eminetto\/clean-architecture-go-v2\">Clean Architecture in Go<\/a> - \u6574\u6d01\u67b6\u6784\u793a\u4f8b<\/li>\n<li><a href=\"https:\/\/github.com\/8treenet\/freedom\">freedom<\/a> - \u57fa\u4e8e\u516d\u8fb9\u5f62\u67b6\u6784\u7684\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/jukylin\/esim\">esim<\/a> - \u57fa\u4e8e\u516d\u8fb9\u5f62\u67b6\u6784\u7684\u5fae\u670d\u52a1\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/roblaszczak\/go-cleanarch\">go-cleanarch<\/a> - Go \u6574\u6d01\u67b6\u6784\u89c4\u5219\u6821\u9a8c\u5de5\u5177<\/li>\n<\/ul>\n<h3 id=\"tcp-\u6846\u67b6\">TCP \u6846\u67b6<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/aceld\/zinx\">zinx<\/a> - TCP\u5e76\u53d1\u670d\u52a1\u5668\u6846\u67b6<\/li>\n<\/ul>\n<h3 id=\"\u4e2d\u95f4\u4ef6\">\u4e2d\u95f4\u4ef6<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/urfave\/negroni\">Negroni<\/a> - Web \u4e2d\u95f4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/gorilla\/csrf\">csrf<\/a> - CSRF \u4e2d\u95f4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/gorilla\/handlers\">handlers<\/a> - A collection of useful handlers for Go&rsquo;s <code>net\/http<\/code> package<\/li>\n<\/ul>\n<h3 id=\"\u5e76\u53d1\">\u5e76\u53d1<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/remeh\/sizedwaitgroup\">SizedWaitGroup<\/a> - \u5e76\u53d1\u63a7\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/modern-go\/concurrent\">concurrent<\/a> - concurrency utilities<\/li>\n<\/ul>\n<h3 id=\"\u547d\u4ee4\u884c\">\u547d\u4ee4\u884c<\/h3>\n<h4 id=\"\u53c2\u6570\u89e3\u6790\">\u53c2\u6570\u89e3\u6790<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/urfave\/cli\">urfave\/cli<\/a> - \u547d\u4ee4\u884c\u7a0b\u5e8f\u6784\u5efa\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/spf13\/cobra\"><strong>Cobra<\/strong><\/a> - \u547d\u4ee4\u884c\u6784\u5efa\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/integrii\/flaggy\">flaggy<\/a> - \u547d\u4ee4\u53c2\u6570\u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/spf13\/pflag\">pflag<\/a> - \u547d\u4ee4\u884c\u53c2\u6570\u5904\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/alecthomas\/kong\">kong<\/a> - \u547d\u4ee4\u884c\u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/guonaihong\/clop\">clop<\/a> - \u547d\u4ee4\u884c\u89e3\u6790\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/jessevdk\/go-flags\">go-flags<\/a> - \u547d\u4ee4\u884c\u53c2\u6570\u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/jawher\/mow.cli\">mow.cli<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/alexflint\/go-arg\">go-arg<\/a> - \u57fa\u4e8e\u7ed3\u6784\u4f53Tag\u89e3\u6790\u547d\u4ee4\u884c\u53c2\u6570<\/li>\n<\/ul>\n<h4 id=\"\u8f93\u51fa\u5c55\u793a\">\u8f93\u51fa\u5c55\u793a<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/schollz\/progressbar\">progressbar<\/a> - \u5728\u7ec8\u7aef\u4e0a\u8f93\u51fa\u8fdb\u5ea6\u6761<\/li>\n<li><a href=\"https:\/\/github.com\/cheggaaa\/pb\">cheggaaa\/pb<\/a> - \u7ec8\u7aef\u8fdb\u5ea6\u6761<\/li>\n<li><a href=\"https:\/\/github.com\/vbauerster\/mpb\">mpb<\/a> - \u652f\u6301\u591a\u4e2a\u8fdb\u5ea6\u6761<\/li>\n<li><a href=\"https:\/\/github.com\/fatih\/color\">Color<\/a> - \u547d\u4ee4\u884c\u6587\u5b57\u989c\u8272<\/li>\n<li><a href=\"https:\/\/github.com\/gookit\/color\">gookit\/color<\/a> - \u547d\u4ee4\u884c\u8272\u5f69\u4f7f\u7528\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/gizak\/termui\">termui<\/a> - \u7ec8\u7aef\u4eea\u8868\u76d8<\/li>\n<li><a href=\"https:\/\/github.com\/marcusolsson\/tui-go\">tui<\/a> - \u7ec8\u7aef UI<\/li>\n<li><a href=\"https:\/\/github.com\/muesli\/termenv\">termenv<\/a> - \u7ec8\u7aef\u5e94\u7528\u7a0b\u5e8f\u7684\u9ad8\u7ea7 ANSI \u6837\u5f0f\u548c\u989c\u8272\u652f\u6301<\/li>\n<li><a href=\"https:\/\/github.com\/guptarohit\/asciigraph\">asciigraph<\/a> - \u5728\u7ec8\u7aef\u4e2d\u7ed8\u5236 ASCII \u5b57\u7b26\u7684\u56fe\u8868<\/li>\n<li><a href=\"https:\/\/github.com\/briandowns\/spinner\">spinner<\/a> - \u6db5\u76d670\u591a\u79cd\u7b26\u53f7\u6216\u8fdb\u5ea6\u6761\u7684\u63a7\u5236\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/olekukonko\/tablewriter\">tablewriter<\/a> - \u7ec8\u7aef\u4e2d\u8f93\u51fa\u8868\u683c\u5185\u5bb9<\/li>\n<li><a href=\"https:\/\/github.com\/eliukblau\/pixterm\">PIXterm<\/a> - \u5728\u547d\u4ee4\u884c\u7ec8\u7aef\u4e2d\u7ed8\u56fe<\/li>\n<li><a href=\"https:\/\/github.com\/wtfutil\/wtf\">WTF<\/a> - \u4e00\u4e2a\u547d\u4ee4\u884c\u7684\u4fe1\u606f\u4eea\u8868\u76d8\uff0c\u53ef\u4ee5\u5b9a\u5236\u663e\u793a\u5185\u5bb9<\/li>\n<li><a href=\"https:\/\/github.com\/mum4k\/termdash\">termdash<\/a> - \u57fa\u4e8e Go Terminal \u7684\u4eea\u8868\u677f\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\/bubbles\">bubbles<\/a> - TUI \u7ec4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\/bubbletea\">bubbletea<\/a> - TUI \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/pterm\/pterm\">PTerm<\/a> - \u652f\u6301\u56fe\u8868\u3001\u8868\u683c\u3001\u8fdb\u5ea6\u6761\u3001\u6811\u7b49\u7ec8\u7aef\u8f93\u51fa\u5c55\u793a<\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\/lipgloss\">Lip Gloss<\/a> - \u7ec8\u7aef\u5e03\u5c40\u3001\u6837\u5f0f<\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\/gum\">gum<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\/glow\">glow<\/a> - \u7ec8\u7aef\u6e32\u67d3\u5c55\u793a Markdown<\/li>\n<li><a href=\"https:\/\/github.com\/maaslalani\/slides\">Slides<\/a> - \u7ec8\u7aef\u6e32\u67d3\u5c55\u793a Markdown<\/li>\n<li><a href=\"https:\/\/github.com\/rivo\/tview\">tview<\/a> - Terminal UI<\/li>\n<li><a href=\"https:\/\/github.com\/qeesung\/asciiplayer\">ASCIIPlayer<\/a> - \u5728\u7ec8\u7aef\u4e2d\u901a\u8fc7 ASCII \u8f93\u51fa\u56fe\u7247\u6216\u89c6\u9891\uff0c\u652f\u6301 png\u3001jpeg\u3001gif\u3001mp4\u3001avi \u7b49\u683c\u5f0f<\/li>\n<li><a href=\"https:\/\/github.com\/jedib0t\/go-pretty\">go-pretty<\/a> - \u7ec8\u7aef\u6e32\u67d3\u8868\u683c\u3001\u5217\u8868\u3001\u8fdb\u5ea6\u6761\u7b49<\/li>\n<li><a href=\"https:\/\/github.com\/gdamore\/tcell\">tcell<\/a><\/li>\n<\/ul>\n<h4 id=\"\u5176\u4ed6\">\u5176\u4ed6<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/tianon\/gosu\">gosu<\/a> - \u4ee5\u6307\u5b9a\u7684\u7528\u6237\u6743\u9650\u6765\u8fd0\u884c\u811a\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/cjbassi\/gotop\">gotop<\/a> - \u7c7b top \u7cfb\u7edf\u76d1\u63a7\u663e\u793a<\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/go-colorable\">go-colorable<\/a> - Colorable writer for Windows<\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/go-isatty\">go-isatty<\/a> - TTY \u73af\u5883\u5224\u65ad<\/li>\n<li><a href=\"https:\/\/github.com\/junegunn\/fzf\">fzf<\/a> - \u7ec8\u7aef\u6a21\u7cca\u67e5\u8be2\u795e\u5668\uff0c\u652f\u6301\u591a\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/sevlyar\/go-daemon\">go-daemon<\/a> - daemon \u8fdb\u7a0b\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/c-bata\/go-prompt\">go-prompt<\/a> - \u547d\u4ee4\u884c\u4ea4\u4e92\u5f0f\u8f93\u5165<\/li>\n<li><a href=\"https:\/\/github.com\/peco\/peco\">peco<\/a> - \u4ea4\u4e92\u5f0f\u8fc7\u6ee4\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/creack\/pty\">pty<\/a> - PTY for Go<\/li>\n<li><a href=\"https:\/\/github.com\/lunixbochs\/vtclean\">vtclean<\/a> - \u4ece\u7ec8\u7aef\u8f93\u51fa\u5b57\u7b26\u4e32\u4e2d\u89e3\u6790\u51fa\u7eaf\u6587\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/AlecAivazis\/survey\">Survey<\/a> - \u4ea4\u4e92\u5f0f\u8f93\u5165<\/li>\n<\/ul>\n<h3 id=\"\u7ec8\u7aef\u5de5\u5177\">\u7ec8\u7aef\u5de5\u5177<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/vrothberg\/vgrep\">vgrep<\/a> - \u652f\u6301\u6eda\u52a8\u5206\u9875\u7684 <code>grep<\/code><\/li>\n<li><a href=\"https:\/\/github.com\/yudai\/gotty\">GoTTY<\/a> - \u57fa\u4e8eWeb\u7684\u547d\u4ee4\u884c\u5b9e\u65f6\u5171\u4eab<\/li>\n<li><a href=\"https:\/\/github.com\/gsamokovarov\/jump\">Jump<\/a> - \u6839\u636e\u4e60\u60ef\u5feb\u901f\u8df3\u8f6c\u76ee\u5f55<\/li>\n<li><a href=\"https:\/\/github.com\/fishworks\/gofish\">GoFish<\/a> - \u4e00\u4e2a\u53d7 <a href=\"https:\/\/brew.sh\">Homebrew<\/a> \u542f\u53d1\u7684\u8de8\u5e73\u53f0\u8f6f\u4ef6\u7ba1\u7406\u5de5\u5177\uff0c\u652f\u6301 Linux \u548c Windows<\/li>\n<li><a href=\"https:\/\/github.com\/sachaos\/viddy\">viddy<\/a> - \u589e\u5f3a\u7248 <code>watch<\/code> \u547d\u4ee4<\/li>\n<li><a href=\"https:\/\/github.com\/johnkerl\/miller\">miller<\/a> - \u4e00\u4e2a\u7c7b\u4f3c sed\u3001awk\u3001cut\u3001join \u548c sort \u7684\u5de5\u5177\uff0c\u7528\u6765\u5904\u7406\u57fa\u4e8e\u547d\u540d\u7d22\u5f15\u7684\u6570\u636e<\/li>\n<li><a href=\"https:\/\/github.com\/moul\/assh\">assh<\/a> - SSH \u589e\u5f3a\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/muesli\/duf\">duf<\/a> - \u6bd4 <code>df<\/code> \u66f4\u597d\u7528\u7684\u78c1\u76d8\u4f7f\u7528\u7387\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/noborus\/ov\">ov<\/a> - \u7ec8\u7aef\u6587\u672c\u9605\u8bfb\u5668\uff0c\u53ef\u66ff\u4ee3 <code>less<\/code>\u3001<code>more<\/code>\u3001<code>tail -f<\/code> \u7b49<\/li>\n<li><a href=\"https:\/\/github.com\/noborus\/trdsql\">trdsql<\/a> - \u53ef\u5bf9 CSV\/LTSV\/JSON\/TBLN \u7b49\u6587\u4ef6\u6267\u884c SQL \u67e5\u8be2\u548c\u5bfc\u51fa<\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\/vhs\">vhs<\/a> - \u7ec8\u7aef\u5f55\u50cf\u5de5\u5177\uff0c\u63d0\u4f9b\u4e86\u5728\u7ec8\u7aef\u4e2d\u5f55\u5236\u548c\u56de\u653e\u7ec8\u7aef\u4f1a\u8bdd\u7684\u529f\u80fd\uff0c\u7c7b\u4f3c\u4e8e\u5c06\u7ec8\u7aef\u4f1a\u8bdd\u8bb0\u5f55\u4e3a\u89c6\u9891\u7684\u65b9\u5f0f<\/li>\n<\/ul>\n<h3 id=\"\u8def\u7531\">\u8def\u7531<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/julienschmidt\/httprouter\">HttpRouter<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gorilla\/mux\">mux<\/a> - URL \u8def\u7531\u548c\u8c03\u5ea6\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/go-chi\/chi\">chi<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gocraft\/web\">gocraft\/web<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/google\/go-querystring\">go-querystring<\/a> - \u8f6c\u6362\u7ed3\u6784\u4f53\u4e3aURL\u8bf7\u6c42\u53c2\u6570<\/li>\n<li><a href=\"https:\/\/github.com\/gorilla\/schema\">gorilla\/schema<\/a> - converts structs to and from form values<\/li>\n<li><a href=\"https:\/\/github.com\/clevergo\/clevergo\">CleverGo<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/kataras\/rewrite\">rewrite<\/a> - rewrite \u4e2d\u95f4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/uptrace\/bunrouter\">BunRouter<\/a> - \u652f\u6301\u4e2d\u95f4\u4ef6\u3001\u9519\u8bef\u5904\u7406\u3001\u8def\u7531\u4f18\u5148\u7ea7\u3001\u517c\u5bb9 <code>net\/http<\/code> \u63a5\u53e3<\/li>\n<\/ul>\n<h3 id=\"\u7f51\u7edc\">\u7f51\u7edc<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/miekg\/dns\">DNS<\/a> - DNS \u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/coredns\/coredns\">CoreDNS<\/a> - DNS \u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/spiral\/roadrunner\">RoadRunner<\/a> - PHP \u5e94\u7528\u670d\u52a1\u5668\u3001\u8fdb\u7a0b\u7ba1\u7406\u5668\u3001\u8d1f\u8f7d\u5747\u8861\uff0c\u7528\u4e8e\u66ff\u4ee3 <code>Nginx + FPM<\/code><\/li>\n<li><a href=\"https:\/\/github.com\/dunglas\/frankenphp\">FrankenPHP<\/a> - PHP \u5e94\u7528\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/buger\/goreplay\">GoReplay<\/a> - \u6d41\u91cf\u6536\u96c6&amp;\u56de\u653e<\/li>\n<li><a href=\"https:\/\/github.com\/didi\/sharingan\">Sharingan<\/a> - \u6ef4\u6ef4\u5f00\u6e90\u7684\u6d41\u91cf\u5f55\u5236\u56de\u653e\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/denandz\/glorp\">Glorp<\/a> - HTTP \u62e6\u622a&amp;\u91cd\u653e\u7684 CLI \u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/fanpei91\/p2pspider\">p2pspider<\/a> - \u79cd\u5b50\u55c5\u63a2\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/anacrolix\/torrent\">torrent<\/a> - BitTorrent \u76f8\u5173\u5de5\u5177\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/cenkalti\/rain\">rain<\/a> - BitTorrent \u5ba2\u6237\u7aef\u548c\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/valyala\/httpteleport\">httpteleport<\/a> - Teleports 10Gbps http traffic over 1Gbps networks<\/li>\n<li><a href=\"https:\/\/github.com\/schollz\/find3\">FIND3<\/a> - WiFi \u8bbe\u5907\u53d1\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/projectdiscovery\/subfinder\">SubFinder<\/a> - \u5b50\u57df\u540d\u53d1\u73b0\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/go-ggz\/ggz\">ggz<\/a> - \u77ed\u7f51\u5740\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/davecheney\/httpstat\">httpstat<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/cavaliercoder\/grab\">grab<\/a> - \u6587\u4ef6\u4e0b\u8f7d<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/go-getter\">go-getter<\/a> - \u53ef\u4f7f\u7528 URL \u4f5c\u4e3a\u8f93\u5165\u7684\u4e3b\u8981\u5f62\u5f0f\u4ece\u5404\u79cd\u6765\u6e90\u4e0b\u8f7d\u6587\u4ef6\u6216\u76ee\u5f55<\/li>\n<li><a href=\"https:\/\/github.com\/go-netty\/go-netty\">go-netty<\/a> - \u7f51\u7edc\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/panjf2000\/gnet\">gnet<\/a> - \u4e8b\u4ef6\u9a71\u52a8 Go \u7f51\u7edc\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/cloudwego\/netpoll\">netpoll<\/a> - \u4e13\u6ce8\u4e8e RPC \u573a\u666f\u7684 Non-blocking I\/O \u7f51\u7edc\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/gchaincl\/httplab\">httplab<\/a> - The interactive web server<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/yamux\">yamux<\/a> - Multiplexer<\/li>\n<li><a href=\"https:\/\/github.com\/pkg\/sftp\">sftp<\/a> - SFTP support for the <code>go.crypto\/ssh<\/code> package<\/li>\n<li><a href=\"https:\/\/github.com\/jlaffaye\/ftp\">goftp<\/a> - FTP \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/drakkan\/sftpgo\">SFTPGo<\/a> - \u529f\u80fd\u9f50\u5168\u4e14\u53ef\u9ad8\u5ea6\u914d\u7f6e\u7684SFTP\u670d\u52a1\u5668\uff0c\u53ef\u9009\u62e9\u652f\u6301HTTP\/S\u3001FTP\/S\u548cWebDAV\u3002\u652f\u6301\u7684\u5b58\u50a8\u540e\u7aef\u5305\u62ec\uff1a\u672c\u5730\u6587\u4ef6\u7cfb\u7edf\u3001\u52a0\u5bc6\u7684\u672c\u5730\u6587\u4ef6\u7cfb\u7edf\u3001S3\uff08\u517c\u5bb9\uff09\u5bf9\u8c61\u5b58\u50a8\u3001Google Cloud Storage\u3001Azure Blob Storage\u4ee5\u53ca\u5176\u4ed6SFTP\u670d\u52a1\u5668\u3002<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/evio\">evio<\/a> - \u4e8b\u4ef6\u9a71\u52a8\u7f51\u7edc\u6846\u67b6\uff08reactor \u6a21\u5f0f\uff09<\/li>\n<li><a href=\"https:\/\/github.com\/xtaci\/gaio\">gaio<\/a> - \u4e8b\u4ef6\u9a71\u52a8\u7f51\u7edc\u6846\u67b6\uff08proactor \u6a21\u5f0f\uff09<\/li>\n<li><a href=\"https:\/\/github.com\/henvic\/httpretty\">httpretty<\/a> - \u5728\u7ec8\u7aef\u4e0a\u6f02\u4eae\u5730\u6253\u5370\u51fa HTTP \u8bf7\u6c42<\/li>\n<li><a href=\"https:\/\/github.com\/0xERR0R\/blocky\">blocky<\/a> - \u4f5c\u4e3a\u5c40\u57df\u7f51 DNS \u4ee3\u7406\u62e6\u622a\u5e7f\u544a<\/li>\n<li><a href=\"https:\/\/github.com\/cevatbarisyilmaz\/lossy\">lossy<\/a> - \u6a21\u62df net.PacketConn \u548c net.Conn \u63a5\u53e3\u7684\u5e26\u5bbd\uff0c\u5ef6\u8fdf\u548c\u6570\u636e\u5305\u4e22\u5931<\/li>\n<li><a href=\"https:\/\/github.com\/libp2p\/go-libp2p\">go-libp2p<\/a> - P2P<\/li>\n<li><a href=\"https:\/\/github.com\/ipfs\/go-ipfs-api\">go-ipfs-api<\/a> - IPFS<\/li>\n<li><a href=\"https:\/\/github.com\/ipfs-shipyard\/gomobile-ipfs\">gomobile-ipfs<\/a> - \u4e3a\u79fb\u52a8\u7ec8\u7aef\u63d0\u4f9bIPFS\u7f51\u7edc\u8bbf\u95ee\u652f\u6301<\/li>\n<li><a href=\"https:\/\/github.com\/multiformats\/go-multiaddr\">go-multiaddr<\/a> - multiaddr<\/li>\n<li><a href=\"https:\/\/github.com\/xtaci\/kcp-go\">kcp-go<\/a> - \u53ef\u9760\u7684 UDP \u901a\u8baf\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/gliderlabs\/ssh\">gliderlabs\/ssh<\/a> - \u50cf <code>net\/http<\/code> \u4e00\u6837\u8f7b\u677e\u642d\u5efa SSH \u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/inetaf\/netaddr\">netaddr<\/a> - \u7f51\u7edc\u5730\u5740\u5904\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/v-byte-cpu\/sx\">sx<\/a> - \u7f51\u7edc\u626b\u63cf\u547d\u4ee4\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/mpolden\/echoip\">echoip<\/a> - IP \u5730\u5740\u67e5\u627e\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/DarthPestilane\/easytcp\">EasyTCP<\/a> - TCP Server \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/google\/gopacket\">GoPacket<\/a> - \u7f51\u7edc\u6355\u83b7\u6293\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/schollz\/croc\">croc<\/a> - \u4e24\u53f0\u7535\u8111\u4e4b\u95f4\u4f20\u8f93\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/soheilhy\/cmux\">cmux<\/a> - \u76d1\u542c\u540c\u4e00\u4e2a\u7aef\u53e3\uff0c\u542f\u52a8\u591a\u79cd\u534f\u8bae\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/oschwald\/geoip2-golang\">GeoIP2 Reader for Go<\/a> - \u89e3\u6790&amp;\u8bfb\u53d6 MaxMind GeoLite2 \u548c GeoIP2 \u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/knadh\/dns.toys\">dns.toys<\/a> - DNS \u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/apache\/trafficcontrol\">Apache Traffic Control<\/a> - CDN \u6d41\u91cf\u63a7\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/sjlleo\/nexttrace-core\">NextTrace<\/a> - \u53ef\u89c6\u5316\u8def\u7531\u8ffd\u8e2a\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/Code-Hex\/pget\">pget<\/a> - \u6587\u4ef6\u4e0b\u8f7d\u5de5\u5177\uff0c\u53ef\u591a\u8fde\u63a5\u4e0b\u8f7d<\/li>\n<li><a href=\"https:\/\/github.com\/XIU2\/CloudflareSpeedTest\">CloudflareSpeedTest<\/a> - \u6d4b\u8bd5 Cloudflare CDN \u5ef6\u8fdf\u548c\u901f\u5ea6\uff0c\u83b7\u53d6\u6700\u5feb IP<\/li>\n<li><a href=\"https:\/\/github.com\/lesismal\/nbio\">nbio<\/a> - \u5f02\u6b65\u7f51\u7edc\u6846\u67b6<\/li>\n<\/ul>\n<h4 id=\"ldap\">LDAP<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/go-ldap\/ldap\">go-ldap<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/glauth\/glauth\">GLAuth<\/a> - LDAP Server<\/li>\n<li><a href=\"https:\/\/github.com\/jimlambrt\/gldap\">gldap<\/a> - LDAP Service<\/li>\n<\/ul>\n<h4 id=\"\u7f51\u7edc\u4ee3\u7406\">\u7f51\u7edc\u4ee3\u7406<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/mholt\/caddy\"><strong>Caddy<\/strong><\/a> - \u7c7b\u4f3c Nginx \u7684 Web \u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/containous\/traefik\">Traefik<\/a> - \u53cd\u5411\u4ee3\u7406&amp;\u8d1f\u8f7d\u5747\u8861<\/li>\n<li><a href=\"https:\/\/github.com\/snail007\/goproxy\">snail007\/goproxy<\/a> - golang \u5b9e\u73b0\u7684\u9ad8\u6027\u80fd\u4ee3\u7406\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/henson\/proxypool\">ProxyPool<\/a> - \u91c7\u96c6\u514d\u8d39\u7684\u4ee3\u7406\u8d44\u6e90\u4e3a\u722c\u866b\u63d0\u4f9b\u6709\u6548\u7684IP\u4ee3\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/fatedier\/frp\">frp<\/a> - \u53ef\u7528\u4e8e\u5185\u7f51\u7a7f\u900f\u7684\u9ad8\u6027\u80fd\u7684\u53cd\u5411\u4ee3\u7406\u5e94\u7528<\/li>\n<li><a href=\"https:\/\/github.com\/cnlh\/nps\">nps<\/a> - \u4e00\u6b3e\u8f7b\u91cf\u7ea7\u3001\u9ad8\u6027\u80fd\u3001\u529f\u80fd\u5f3a\u5927\u7684\u5185\u7f51\u7a7f\u900f\u4ee3\u7406\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/pomerium\/pomerium\">Pomerium<\/a> - \u57fa\u4e8e\u8eab\u4efd\u7684\u53cd\u5411\u4ee3\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/v2ray\/v2ray-core\">V2Ray<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/v2fly\/v2ray-core\">V2Fly<\/a> - V2Ray \u7684\u793e\u533a\u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/tailscale\/tailscale\">Tailscale<\/a> - WireGuard \u89e3\u51b3\u65b9\u6848<\/li>\n<li><a href=\"https:\/\/github.com\/Dreamacro\/clash\">Clash<\/a> - \u652f\u6301\u591a\u79cd\u534f\u8bae\u7684\u591a\u5e73\u53f0\u4ee3\u7406\u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/elazarl\/goproxy\">elazarl\/goproxy<\/a> - HTTP \u4ee3\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/vulcand\/oxy\">oxy<\/a> - Go middlewares for HTTP servers &amp; proxies<\/li>\n<li><a href=\"https:\/\/github.com\/ouqiang\/goproxy\">ouqiang\/goproxy<\/a> - Go HTTP(S)\u4ee3\u7406\u5e93, \u652f\u6301\u4e2d\u95f4\u4eba\u4ee3\u7406\u89e3\u5bc6HTTPS<\/li>\n<li><a href=\"https:\/\/github.com\/pgrok\/pgrok\">pgrok<\/a> - \u63d0\u4f9b\u7ed9\u7a77\u4eba\u7684\u5185\u7f51\u7a7f\u900f<\/li>\n<\/ul>\n<h3 id=\"http\u538b\u6d4b\">HTTP\u538b\u6d4b<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/tsenart\/vegeta\">Vegeta<\/a> - HTTP \u8d1f\u8f7d\u538b\u6d4b\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/rakyll\/hey\">hey<\/a> - Web \u538b\u6d4b\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/codesenberg\/bombardier\">bombardier<\/a> - Web \u538b\u6d4b\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/tsliwowicz\/go-wrk\">go-wrk<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/six-ddc\/plow\">plow<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/ddosify\/ddosify\">Ddosify<\/a><\/li>\n<\/ul>\n<h3 id=\"http\">HTTP<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/valyala\/fasthttp\">fasthttp<\/a> - \u6bd4 <code>net\/http<\/code> \u5feb 10 \u500d\u7684 HTTP \u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/go-resty\/resty\">Resty<\/a> - HTTP &amp; REST \u5ba2\u6237\u7aef\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/guonaihong\/gout\">gout<\/a> - HTTP \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/h2non\/gentleman\">gentleman<\/a> - HTTP \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/idoubi\/goz\">goz<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/mssola\/user_agent\">UserAgent<\/a> - \u89e3\u6790 HTTP User Agent<\/li>\n<li><a href=\"https:\/\/github.com\/PuerkitoBio\/purell\">purell<\/a> - URL \u89c4\u8303\u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/Azure\/go-autorest\">go-autorest<\/a> - HTTP \u7ba1\u9053\u8bf7\u6c42\u65b9\u5f0f\u7684\u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/imroc\/req\">Req<\/a> - HTTP \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/rs\/cors\">cors<\/a> - CORS Handler<\/li>\n<li><a href=\"https:\/\/github.com\/caddyserver\/certmagic\">CertMagic<\/a> - \u4e3a\u4efb\u610f Go \u7a0b\u5e8f\u81ea\u52a8\u52a0\u4e0a HTTPS\uff0cTLS \u8bc1\u4e66\u7b7e\u53d1\u3001\u66f4\u65b0\u5168\u81ea\u52a8<\/li>\n<\/ul>\n<h3 id=\"websocket\">WebSocket<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/gorilla\/websocket\">gorilla\/websocket<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/nhooyr\/websocket\">nhooyr\/websocket<\/a> - \u5b98\u65b9\u63a8\u8350\u7684\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/joewalnes\/websocketd\">websocketd<\/a> - Go \u5f00\u53d1\u7684\u4e00\u952e\u642d\u5efa WebSocket \u670d\u52a1\u5668\u547d\u4ee4\u884c\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/gobwas\/ws\">ws<\/a> - WebSocket \u5f00\u53d1\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/olahol\/melody\">melody<\/a> - WebSocket \u670d\u52a1\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/kataras\/neffos\">neffos<\/a> - \u4e00\u4e2a\u5feb\u901f\u4e14\u53ef\u6269\u5c55\u7684 WebSocket \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/dgrr\/fastws\">fastws<\/a><\/li>\n<\/ul>\n<h3 id=\"\u5373\u65f6\u901a\u4fe1\">\u5373\u65f6\u901a\u4fe1<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/centrifugal\/centrifugo\">Centrifugo<\/a> - \u5b9e\u65f6\u6d88\u606f\u670d\u52a1\u5668\uff0c\u53ef\u4ee5\u4e0e\u4efb\u4f55\u8bed\u8a00\u7f16\u5199\u7684\u5e94\u7528\u7a0b\u5e8f\u540e\u7aef\u7ed3\u5408\u4f7f\u7528<\/li>\n<li><a href=\"https:\/\/github.com\/Terry-Mao\/goim\">goim<\/a> - \u652f\u6301\u96c6\u7fa4\u7684 im \u53ca\u5b9e\u65f6\u63a8\u9001\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/tinode\/chat\">Tinode<\/a> - \u5373\u65f6\u6d88\u606f\u670d\u52a1\u5668\uff0c\u901a\u8fc7 websocket\/JSON \u6216 gRPC\/TCP \u7b49\u534f\u8bae\u4f20\u8f93<\/li>\n<li><a href=\"https:\/\/github.com\/pion\/webrtc\">WebRTC<\/a> - WebRTC \u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/berty\/berty\">Berty<\/a> - \u5b89\u5168\u7684\u70b9\u5bf9\u70b9\u901a\u8baf\u8f6f\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/keybase\/client\">Keybase<\/a> - \u5373\u65f6\u901a\u8baf\u5de5\u5177 Keybase \u5168\u5e73\u53f0\u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/gotify\/server\">gotify<\/a> - \u57fa\u4e8e WebSocket \u7684 PUSH \u901a\u77e5\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/heroiclabs\/nakama\">nakama<\/a> - \u7528\u4e8e\u793e\u4ea4\/\u5b9e\u65f6\u6e38\u620f\/\u5b9e\u65f6\u5e94\u7528\u7684\u5206\u5e03\u5f0f\u670d\u52a1\u7aef\u7a0b\u5e8f\uff0c\u81ea\u5e26\u9762\u677f\u3001\u7528\u6237\u3001\u804a\u5929\u3001\u5b58\u50a8\u3001\u793e\u4ea4\u7b49\u529f\u80fd<\/li>\n<li><a href=\"https:\/\/github.com\/openimsdk\/open-im-server\">OpenIM<\/a><\/li>\n<\/ul>\n<h3 id=\"\u7f51\u5173\">\u7f51\u5173<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/eolinker\/GoKu-API-Gateway\">GoKu API Gateway CE<\/a> - eoLinker \u5f00\u6e90\u7684 API \u7f51\u5173<\/li>\n<li><a href=\"https:\/\/github.com\/megaease\/easegress\">Easegress<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/fagongzi\/manba\">Manba<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/TykTechnologies\/tyk\">Tpk<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/bfenetworks\/bfe\">BFE<\/a> - \u57fa\u4e8e\u767e\u5ea6\u7edf\u4e00\u63a5\u5165\u524d\u7aef\u5f00\u6e90\u7684\u4e03\u5c42\u6d41\u91cf\u63a5\u5165\u7cfb\u7edf<\/li>\n<\/ul>\n<h3 id=\"\u5e8f\u5217\u5316\">\u5e8f\u5217\u5316<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/vmihailenco\/msgpack\">vmihailenco\/msgpack<\/a> - \u652f\u6301 msgpack<\/li>\n<li><a href=\"https:\/\/github.com\/ugorji\/go\">go\/codec<\/a> - \u652f\u6301 msgpack\/binc\/cbor\/json<\/li>\n<li><a href=\"https:\/\/github.com\/golang\/protobuf\">golang\/protobuf<\/a> - Go \u7248\u672c\u7684 Protocol Buffers<\/li>\n<li><a href=\"https:\/\/github.com\/gogo\/protobuf\">gogo\/protobuf<\/a> - <code>golang\/protobuf<\/code> \u7684\u6269\u5c55\u66ff\u4ee3\u54c1<\/li>\n<li><a href=\"https:\/\/github.com\/stretchr\/objx\">Objx<\/a> - \u64cd\u4f5c map, slice, JSON \u7b49\u6570\u636e\u7684\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/tinylib\/msgp\">msgp<\/a> - MessagePack \u4ee3\u7801\u751f\u6210\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/bufbuild\/buf\">Buf<\/a> - protoc \u66ff\u4ee3\u54c1<\/li>\n<li><a href=\"https:\/\/github.com\/pseudomuto\/protoc-gen-doc\">protoc-gen-doc<\/a> - Google Protocol Buffers \u6587\u6863\u751f\u6210\u63d2\u4ef6\uff0c\u652f\u6301 HTML\u3001JSON\u3001DocBook\u3001Markdown \u548c\u81ea\u5b9a\u4e49\u6a21\u677f<\/li>\n<\/ul>\n<h3 id=\"\u89e3\u538b\u7f29\">\u89e3\u538b\u7f29<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/golang\/snappy\">snappy<\/a> - Go \u8bed\u8a00\u7248\u672c\u7684 Snappy<\/li>\n<li><a href=\"https:\/\/github.com\/Unknwon\/cae\">cae<\/a> - \u5b9e\u73b0 ZIP\/TAR.GZ \u89e3\u538b\u7f29<\/li>\n<li><a href=\"https:\/\/github.com\/mholt\/archiver\">archiver<\/a> - \u591a\u683c\u5f0f\u652f\u6301\u7684\u89e3\u538b\u7f29\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/klauspost\/compress\">compress<\/a> - Optimized compression packages<\/li>\n<li><a href=\"https:\/\/github.com\/andybalholm\/brotli\">Brotli<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/ulikunitz\/xz\">xz<\/a> - <code>xz<\/code> \u538b\u7f29\u683c\u5f0f\u8bfb\u5199\u5305<\/li>\n<\/ul>\n<h3 id=\"rpc\">RPC<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/grpc\/grpc-go\">gRPC-Go<\/a> - gRPC \u5b98\u65b9\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/grpc-ecosystem\/go-grpc-middleware\">Go gRPC Middleware<\/a> - gRPC \u5e38\u7528\u4e2d\u95f4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/valyala\/gorpc\">gorpc<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gorilla\/rpc\">gorilla\/rpc<\/a> - \u6784\u5efa\u57fa\u4e8e HTTP \u7684 RPC \u670d\u52a1\uff0c\u6bd4\u5982 JSON-RPC<\/li>\n<li><a href=\"https:\/\/github.com\/lileio\/lile\">Lile<\/a> - gRPC \u670d\u52a1\u6784\u5efa\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/smallnest\/rpcx\">rpcx<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/twitchtv\/twirp\">Twirp<\/a> - \u57fa\u4e8e Protobuf \u7684 RPC \u6846\u67b6\uff0c\u4e0e gRPC \u7c7b\u4f3c<\/li>\n<li><a href=\"https:\/\/github.com\/apache\/dubbo-go\">dubbo-go<\/a> - Dubbo Go \u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/cloudwego\/kitex\">Kitex<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/fullstorydev\/grpcurl\">gRPCurl<\/a> - \u50cf cURL \u4e00\u6837\u901a\u8fc7\u547d\u4ee4\u884c\u8bbf\u95ee gRPC \u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/pseudomuto\/protoc-gen-doc\">protoc-gen-doc<\/a> - \u6587\u6863\u751f\u6210\u63d2\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/grpc-ecosystem\/grpc-gateway\">gRPC-Gateway<\/a> - \u8bfb\u53d6 gRPC \u670d\u52a1\u5b9a\u4e49\u5e76\u751f\u6210\u4e00\u4e2a\u53cd\u5411\u4ee3\u7406\u670d\u52a1\u5668\uff0c\u540c\u65f6\u63d0\u4f9b gRPC \u548c RESTful \u98ce\u683c\u7684 API<\/li>\n<\/ul>\n<h3 id=\"\u90ae\u4ef6\">\u90ae\u4ef6<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/go-gomail\/gomail\">gomail<\/a> - \u90ae\u4ef6\u53d1\u9001\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/scorredoira\/email\">scorredoira\/email<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/matcornic\/hermes\">Hermes<\/a> - Go \u7248\u672c\u7684 mailgen \u5f15\u64ce\uff0c\u6839\u636e\u914d\u7f6e\u751f\u6210 HTML \u683c\u5f0f\u7684\u90ae\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/flashmob\/go-guerrilla\">Go-Guerrilla<\/a> - SMTP \u90ae\u4ef6\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/mailhog\/MailHog\">MailHog<\/a> - \u57fa\u4e8eWeb\u548cAPI\u7684SMTP\u6d4b\u8bd5\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/foxcpp\/maddy\">Maddy<\/a> - \u90ae\u4ef6\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/jordan-wright\/email\">jordan-wright\/email<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/mjl-\/mox\">Mox<\/a> - \u90ae\u4ef6\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\/pop\">Pop<\/a> - \u90ae\u4ef6\u53d1\u9001\u5de5\u5177\uff0c\u652f\u6301\u4ea4\u4e92\u5f0f\u548c\u53c2\u6570\u5f0f<\/li>\n<li><a href=\"https:\/\/github.com\/AfterShip\/email-verifier\">email-verifier<\/a> - \u90ae\u7bb1\u6821\u9a8c\uff0c\u65e0\u9700\u53d1\u9001\u90ae\u4ef6<\/li>\n<\/ul>\n<h3 id=\"\u6d88\u606f\u961f\u5217\">\u6d88\u606f\u961f\u5217<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/nsqio\/nsq\">NSQ<\/a> - \u5b9e\u65f6\u5206\u5e03\u5f0f\u6d88\u606f\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/nats-io\/nats-server\">NATS<\/a> - \u4e91\u539f\u751f\u6d88\u606f\u4e2d\u95f4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/rabbitmq\/amqp091-go\">amqp<\/a> - AMQP 0.9.1 \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/Shopify\/sarama\">sarama<\/a> - Kafka \u5ba2\u6237\u7aef<\/li>\n<\/ul>\n<h3 id=\"\u6587\u4ef6\u5b58\u50a8\">\u6587\u4ef6\/\u5b58\u50a8<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/minio\/minio\">MinIO<\/a> - \u5bf9\u8c61\u5b58\u50a8\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/rclone\/rclone\">rclone<\/a> - \u4e0d\u540c\u4e91\u5b58\u50a8\u4e4b\u95f4\u540c\u6b65\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/syncthing\/syncthing\">Syncthing<\/a> - \u6587\u4ef6\u540c\u6b65<\/li>\n<li><a href=\"https:\/\/github.com\/fsnotify\/fsnotify\">fsnotify<\/a> - \u6587\u4ef6\u7cfb\u7edf\u76d1\u63a7\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/cespare\/reflex\">reflex<\/a> - \u76d1\u542c\u6587\u4ef6\u53d8\u66f4\u5e76\u6267\u884c\u547d\u4ee4<\/li>\n<li><a href=\"https:\/\/github.com\/codeskyblue\/gohttpserver\">gohttpserver<\/a> - HTTP \u9759\u6001\u6587\u4ef6\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/tealeg\/xlsx\">XLSX<\/a> - Excel \u8bfb\u5199\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/360EntSecGroup-Skylar\/excelize\">Excelize<\/a> - 360 \u5f00\u6e90\u7684 Excel \u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/signintech\/gopdf\">gopdf<\/a> - PDF \u751f\u6210<\/li>\n<li><a href=\"https:\/\/github.com\/rsc\/pdf\">rsc\/pdf<\/a> - PDF reader<\/li>\n<li><a href=\"https:\/\/github.com\/chrislusf\/seaweedfs\">SeaweedFS<\/a> - \u5206\u5e03\u5f0f\u6587\u4ef6\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/sjqzhang\/go-fastdfs\">go-fastdfs<\/a> - \u5206\u5e03\u5f0f\u6587\u4ef6\u5b58\u50a8\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/dragonflyoss\/Dragonfly\">Dragonfly<\/a> - \u57fa\u4e8e P2P \u7684\u5206\u5e03\u5f0f\u6587\u4ef6\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/h2non\/filetype\">filetype<\/a> - \u68c0\u6d4b\u6587\u4ef6\u7c7b\u578b<\/li>\n<li><a href=\"https:\/\/github.com\/spf13\/afero\">Afero<\/a> - \u6587\u4ef6\u64cd\u4f5c\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/spf13\/fsync\">fsync<\/a> - \u6587\u4ef6\/\u76ee\u5f55\u540c\u6b65<\/li>\n<li><a href=\"https:\/\/github.com\/filebrowser\/filebrowser\">filebrowser<\/a> - Web File Browser<\/li>\n<li><a href=\"https:\/\/github.com\/bigfile\/bigfile\">Bigfile<\/a> - \u6587\u4ef6\u4f20\u8f93\u7ba1\u7406\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/h2non\/filetype\">filetype<\/a> - \u6587\u4ef6\u7c7b\u578b\u4e0e MIME \u68c0\u6d4b<\/li>\n<li><a href=\"https:\/\/github.com\/muesli\/go-app-paths\">go-app-paths<\/a> - \u8de8\u5e73\u53f0\u68c0\u7d22\u76ee\u5f55\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/otiai10\/copy\">copy<\/a> - \u62f7\u8d1d\u6587\u4ef6\u5939<\/li>\n<li><a href=\"https:\/\/github.com\/treeverse\/lakeFS\">lakeFS<\/a> - \u7c7b Git \u6587\u4ef6\u5bf9\u8c61\u5b58\u50a8<\/li>\n<li><a href=\"https:\/\/github.com\/gilbertchen\/duplicacy\">Duplicacy<\/a> - \u65e0\u9501\u4e91\u5907\u4efd\u5de5\u5177\uff0c\u652f\u6301\u51e0\u4e4e\u6240\u6709\u5b58\u50a8\u65b9\u5f0f<\/li>\n<li><a href=\"https:\/\/github.com\/IceWhaleTech\/CasaOS\">CasaOS<\/a> - \u5bb6\u5ead\u4e91\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/alist-org\/alist\">AList<\/a> - \u652f\u6301\u591a\u5b58\u50a8\u7684\u6587\u4ef6\u5217\u8868\u7a0b\u5e8f<\/li>\n<li><a href=\"https:\/\/github.com\/unidoc\/unipdf\">UniPDF<\/a> - PDF \u8bfb\u5199\u5904\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/gabriel-vasile\/mimetype\">mimetype<\/a> - MIME \u7c7b\u578b\u4e0e\u6587\u4ef6\u6269\u5c55\u68c0\u6d4b<\/li>\n<li><a href=\"https:\/\/github.com\/rfjakob\/gocryptfs\">gocryptfs<\/a> - \u52a0\u5bc6 overlay \u6587\u4ef6\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/restic\/restic\">restic<\/a> - \u5907\u4efd\u5de5\u5177\uff0c\u4f7f\u7528\u73b0\u4ee3\u7684\u52a0\u5bc6\u65b9\u6cd5\u5bf9\u6570\u636e\u8fdb\u884c\u5b89\u5168\u7684\u5907\u4efd\uff0c\u652f\u6301<\/li>\n<\/ul>\n<h3 id=\"\u6a21\u677f\u5f15\u64ce\">\u6a21\u677f\u5f15\u64ce<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/SlinSo\/goTemplateBenchmark\">goTemplateBenchmark<\/a> - \u7ed9\u5404 Go \u6a21\u677f\u5f15\u64ce\u505a\u6027\u80fd\u6d4b\u8bd5\uff0c\u5f53\u7136\u4e5f\u5c31\u5305\u542b\u4e86\u6700\u5168\u7684\u6a21\u677f\u5f15\u64ce\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/CloudyKit\/jet\">Jet<\/a> - \u901f\u5ea6\u5f88\u5feb<\/li>\n<li><a href=\"https:\/\/github.com\/eknkc\/amber\">amber<\/a> - HTML \u6a21\u677f\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/valyala\/fasttemplate\">fasttemplate<\/a> - Simple and fast template engine for Go<\/li>\n<li><a href=\"https:\/\/github.com\/valyala\/quicktemplate\">quicktemplate<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hoisie\/mustache\">mustache<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/yosssi\/ace\">Ace<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Masterminds\/sprig\">Sprig<\/a> - \u5e38\u7528\u6a21\u677f\u65b9\u6cd5<\/li>\n<li><a href=\"https:\/\/github.com\/flosch\/pongo2\">pongo2<\/a> - Django \u8bed\u6cd5\u98ce\u683c\u7684\u6a21\u677f\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/gobuffalo\/plush\">plush<\/a><\/li>\n<\/ul>\n<h3 id=\"\u4ee3\u7801\u751f\u6210\">\u4ee3\u7801\u751f\u6210<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/mjibson\/esc\">esc<\/a><\/li>\n<\/ul>\n<h3 id=\"\u6587\u672c\u5904\u7406\">\u6587\u672c\u5904\u7406<\/h3>\n<h4 id=\"markdown\">Markdown<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/russross\/blackfriday\">Blackfriday<\/a> - Markdown \u89e3\u6790\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/88250\/lute\">Lute<\/a> - \u7ed3\u6784\u5316\u7684 Markdown \u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/yuin\/goldmark\">goldmark<\/a> - Markdown \u89e3\u6790\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/docx2md\">docx2md<\/a> - \u8f6c\u6362 Word \u4e3a Markdown<\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\/glamour\">glamour<\/a> - \u547d\u4ee4\u884c\u4e0b\u6e32\u67d3 Markdown<\/li>\n<li><a href=\"https:\/\/github.com\/cpuguy83\/go-md2man\">go-md2man<\/a> - \u8f6c\u6362 Markdown \u4e3a man \u624b\u518c\u5185\u5bb9<\/li>\n<li><a href=\"https:\/\/github.com\/gomarkdown\/markdown\">gomarkdown\/markdown<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/JohannesKaufmann\/html-to-markdown\">html-to-markdown<\/a> - \u8f6c\u6362 HTML \u4e3a Markdown<\/li>\n<\/ul>\n<h4 id=\"htmlcss\">HTML\/CSS<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/go-shiori\/dom\">DOM<\/a> - HTML DOM \u8282\u70b9\u64cd\u4f5c<\/li>\n<li><a href=\"https:\/\/github.com\/go-shiori\/obelisk\">obelisk<\/a> - \u4fdd\u5b58 Web \u7f51\u9875\u4e3a HTML \u5355\u9875\u9762<\/li>\n<li><a href=\"https:\/\/github.com\/jaytaylor\/html2text\">html2text<\/a> - HTML \u8f6c text<\/li>\n<li><a href=\"https:\/\/github.com\/go-shiori\/go-readability\">go-readability<\/a> - \u8ba9 HTML \u53ef\u8bfb\u6027\u66f4\u9ad8<\/li>\n<li><a href=\"https:\/\/github.com\/maragudk\/gomponents\">gomponents<\/a> - \u58f0\u660e\u5f0f\u89c6\u56fe\u7ec4\u4ef6\uff0c\u53ef\u4ee5\u6e32\u67d3\u6210 HTML5<\/li>\n<li><a href=\"https:\/\/github.com\/stevelacy\/daz\">daz<\/a> - HTML \u7ec4\u4ef6\u7ec4\u5408\uff0c\u6e32\u67d3 HTML<\/li>\n<li><a href=\"https:\/\/github.com\/grokify\/html-strip-tags-go\">html-strip-tags-go<\/a> - \u53bb\u9664 HTML \u6807\u7b7e<\/li>\n<li><a href=\"https:\/\/github.com\/microcosm-cc\/bluemonday\">bluemonday<\/a> - XSS \u63a2\u6d4b<\/li>\n<li><a href=\"https:\/\/github.com\/andybalholm\/cascadia\">cascadia<\/a> - CSS \u9009\u62e9\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/antchfx\/htmlquery\">htmlquery<\/a> - XPath \u8bed\u6cd5\u67e5\u8be2 HTML<\/li>\n<li><a href=\"https:\/\/github.com\/antchfx\/xmlquery\">xmlquery<\/a> - XPath \u8bed\u6cd5\u67e5\u8be2 XML<\/li>\n<li><a href=\"https:\/\/github.com\/antchfx\/xpath\">xpath<\/a> - XPath \u8bed\u6cd5<\/li>\n<li><a href=\"https:\/\/github.com\/PuerkitoBio\/goquery\">goquery<\/a> - jQuery \u8bed\u6cd5\u67e5\u8be2 HTML<\/li>\n<li><a href=\"https:\/\/github.com\/ericchiang\/css\">css<\/a> - CSS \u9009\u62e9\u5668<\/li>\n<\/ul>\n<h4 id=\"\u5176\u4ed6-1\">\u5176\u4ed6<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/mattn\/go-runewidth\">go-runewidth<\/a> - \u5b57\u7b26\u957f\u5ea6\u8ba1\u7b97<\/li>\n<li><a href=\"https:\/\/github.com\/go-ego\/gpy\">gpy<\/a> - Go \u8bed\u8a00\u6c49\u5b57\u8f6c\u62fc\u97f3\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/speps\/go-hashids\">go-hashids<\/a> - hashids \u7684 Go \u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/mozillazg\/go-pinyin\">go-pinyin<\/a> - \u6c49\u8bed\u62fc\u97f3\u8f6c\u6362\u5de5\u5177 Go \u7248<\/li>\n<li><a href=\"https:\/\/github.com\/axgle\/mahonia\">mahonia<\/a> - \u5b57\u7b26\u96c6\u7f16\u7801\u8f6c\u6362<\/li>\n<li><a href=\"https:\/\/github.com\/vinta\/pangu\">pangu.go<\/a> - Go \u7248\u672c\u7684 pangu\uff0c\u7ed9\u4e2d\u82f1\u6587\u4e4b\u95f4\u52a0\u7a7a\u683c<\/li>\n<li><a href=\"https:\/\/github.com\/chaseadamsio\/goorgeous\">goorgeous<\/a> - A Go ORG syntax parser to HTML<\/li>\n<li><a href=\"https:\/\/github.com\/sergi\/go-diff\">sergi\/go-diff<\/a> - Go \u7248\u672c\u7684 diff \u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/sourcegraph\/go-diff\">sourcegraph\/go-diff<\/a> - Go \u7248\u672c\u7684 diff \u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/alecthomas\/chroma\">Chroma<\/a> - \u4ee3\u7801\u8bed\u6cd5\u9ad8\u4eae<\/li>\n<li><a href=\"https:\/\/github.com\/sourcegraph\/syntaxhighlight\">syntaxhighlight<\/a> - \u4ee3\u7801\u9ad8\u4eae<\/li>\n<li><a href=\"https:\/\/github.com\/kyokomi\/emoji\">kyokomi\/emoji<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/enescakir\/emoji\">enescakir\/emoji<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/golang\/freetype\">golang\/freetype<\/a> - Freetype font rasterizer<\/li>\n<li><a href=\"https:\/\/github.com\/jdkato\/prose\">prose<\/a> - natural language processing library<\/li>\n<li><a href=\"https:\/\/github.com\/tdewolff\/minify\">minify<\/a> - Web \u9759\u6001\u8d44\u6e90\u538b\u7f29(HTML\/JS\/CSS\/JSON\/XML\/SVG)<\/li>\n<li><a href=\"https:\/\/github.com\/jinzhu\/inflection\">Inflection<\/a> - Pluralizes and singularizes English nouns<\/li>\n<li><a href=\"https:\/\/github.com\/studygolang\/autocorrect\">autocorrect<\/a> - \u81ea\u52a8\u7ed9\u4e2d\u82f1\u6587\u4e4b\u95f4\u52a0\u5165\u5408\u7406\u7684\u7a7a\u683c\u5e76\u7ea0\u6b63\u4e13\u7528\u540d\u8bcd\u5927\u5c0f\u5199<\/li>\n<li><a href=\"https:\/\/github.com\/blevesearch\/bleve\">bleve<\/a> - modern text indexing<\/li>\n<li><a href=\"https:\/\/github.com\/beevik\/etree\">etree<\/a> - XML \u89e3\u6790&amp;\u751f\u6210<\/li>\n<li><a href=\"https:\/\/github.com\/droyo\/go-xml\">go-xml<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gorilla\/feeds\">feeds<\/a> - RSS \u5185\u5bb9\u751f\u6210<\/li>\n<li><a href=\"https:\/\/github.com\/mmcdole\/gofeed\">gofeed<\/a> - RSS &amp; Atom feeds \u5185\u5bb9\u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/kataras\/sitemap\">sitemap<\/a> - sitemap.xml \u751f\u6210<\/li>\n<li><a href=\"https:\/\/github.com\/nkanaev\/yarr\">yarr<\/a> - RSS \u9605\u8bfb\u8f6f\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/mvdan\/gogrep\">gogrep<\/a> - \u901a\u8fc7\u8bed\u6cd5\u6811\u641c\u7d22 Go \u6e90\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/AllenDang\/PipeIt\">PipeIt<\/a> - \u6587\u672c\u8f6c\u6362\uff0c\u6e05\u7406\u548c\u63d0\u53d6\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/dlclark\/regexp2\">regexp2<\/a> - \u5168\u529f\u80fd\u6b63\u5219\u8868\u8fbe\u5f0f\u5f15\u64ce\u3002\u5982\u679c\u6807\u51c6\u5e93\u7684 regexp \u6ee1\u8db3\u4e0d\u4e86\u4f60\uff0c\u53ef\u4ee5\u5c1d\u8bd5\u4f7f\u7528 regexp2<\/li>\n<li><a href=\"https:\/\/github.com\/sundy-li\/html2article\">html2article<\/a> - \u57fa\u4e8e\u6587\u672c\u5bc6\u5ea6\u7684 html2article \u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/guumaster\/hostctl\">hostctl<\/a> - <code>hosts<\/code> \u547d\u4ee4\u884c\u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/go-shellwords\">go-shellwords<\/a> - \u89e3\u6790\u547d\u4ee4\u884c\u4e2d\u5b57\u6bb5<\/li>\n<li><a href=\"https:\/\/github.com\/get-woke\/woke\">woke<\/a> - \u68c0\u67e5\u6587\u672c\u6587\u4ef6\u4e2d\u662f\u5426\u5b58\u5728\u6b67\u89c6\u8bcd\u6c47<\/li>\n<li><a href=\"https:\/\/github.com\/lane-c-wagner\/go-password-validator\">go-password-validator<\/a> - \u5bc6\u7801\u5f3a\u5ea6\u6821\u9a8c\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/mvdan\/xurls\">xurls<\/a> - \u4ece\u6587\u672c\u4e2d\u63d0\u53d6 URL<\/li>\n<li><a href=\"https:\/\/github.com\/abadojack\/whatlanggo\">whatlanggo<\/a> - \u81ea\u7136\u8bed\u8a00\u63a2\u6d4b<\/li>\n<li><a href=\"https:\/\/github.com\/go-enry\/go-enry\">go-enry<\/a> - \u68c0\u6d4b\u7f16\u7a0b\u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/sahilm\/fuzzy\">fuzzy<\/a> - \u5b57\u7b26\u4e32\u6a21\u7cca\u5339\u914d<\/li>\n<li><a href=\"https:\/\/github.com\/bytedance\/godlp\">godlp<\/a> - \u6570\u636e\u8131\u654f<\/li>\n<li><a href=\"https:\/\/github.com\/sourcegraph\/zoekt\">Zoekt<\/a> - \u6587\u672c\u641c\u7d22\u5f15\u64ce<\/li>\n<\/ul>\n<h3 id=\"\u6587\u6863-1\">\u6587\u6863<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/swaggo\/swag\">swag<\/a> - Swagger for Go<\/li>\n<li><a href=\"https:\/\/github.com\/swaggo\/gin-swagger\">gin-swagger<\/a> - Swagger for Gin<\/li>\n<li><a href=\"https:\/\/github.com\/go-swagger\/go-swagger\">go-swagger<\/a> - Swagger 2.0 implementation for go<\/li>\n<\/ul>\n<h3 id=\"\u6570\u5b66\u8ba1\u7b97\">\u6570\u5b66\u8ba1\u7b97<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/shopspring\/decimal\">decimal<\/a> - \u89e3\u51b3\u6d6e\u70b9\u6570\u8ba1\u7b97\u7cbe\u5ea6\u95ee\u9898<\/li>\n<li><a href=\"https:\/\/github.com\/robaho\/fixed\">fixed<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/cockroachdb\/apd\">apd<\/a> - decimal \u5305<\/li>\n<li><a href=\"https:\/\/github.com\/mmcloughlin\/mathfmt\">mathfmt<\/a> - \u5c06 LaTeX \u8bed\u6cd5\u7684\u6ce8\u91ca\u8f6c\u6362\u4e3a\u6570\u5b66\u516c\u5f0f\u683c\u5f0f<\/li>\n<li><a href=\"https:\/\/github.com\/itsubaki\/q\">q<\/a> - \u91cf\u5b50\u8ba1\u7b97\u6a21\u62df\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/leekchan\/accounting\">accounting<\/a> - \u8d27\u5e01\u683c\u5f0f\u5316<\/li>\n<\/ul>\n<h3 id=\"\u65e5\u671f\u65f6\u95f4\">\u65e5\u671f\u65f6\u95f4<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/jinzhu\/now\">now<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/olebedev\/when\">when<\/a> - \u81ea\u7136\u65e5\u671f\u65f6\u95f4\u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/uniplaces\/carbon\">Carbon<\/a> - Carbon \u65f6\u95f4\u5904\u7406\u5e93\u7684 Go \u8bed\u8a00\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/lestrrat-go\/strftime\">strftime<\/a> - \u65f6\u95f4\u683c\u5f0f\u5316<\/li>\n<li><a href=\"https:\/\/github.com\/araddon\/dateparse\">dateparse<\/a> - \u89e3\u6790\u4efb\u610f\u672a\u77e5\u683c\u5f0f\u7684\u65f6\u95f4\u5b57\u7b26\u4e32<\/li>\n<\/ul>\n<h3 id=\"\u914d\u7f6e\">\u914d\u7f6e<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/joho\/godotenv\">GoDotEnv<\/a> - <code>.env<\/code> \u914d\u7f6e\u6587\u4ef6\u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/go-yaml\/yaml\">go-yaml\/yaml<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/ghodss\/yaml\">ghodss\/yaml<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/BurntSushi\/toml\">toml<\/a> - <code>TOML<\/code> \u89e3\u6790&amp;\u7f16\u7801\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/go-ini\/ini\">INI<\/a> - <code>INI<\/code> \u914d\u7f6e\u6587\u4ef6\u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/spf13\/viper\">Viper<\/a> - \u652f\u6301 <code>JSON<\/code>, <code>TOML<\/code>, <code>YAML<\/code>, <code>HCL<\/code>, <code>Java<\/code> \u7b49\u914d\u7f6e\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/kkyr\/fig\">fig<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/koding\/multiconfig\">Multiconfig<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/jinzhu\/configor\">configor<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/kelseyhightower\/envconfig\">envconfig<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/kelseyhightower\/confd\">confd<\/a> - \u914d\u7f6e\u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/hcl\">HCL<\/a> - configuration language<\/li>\n<li><a href=\"https:\/\/github.com\/caarlos0\/env\">env<\/a> - \u89e3\u6790 ENV \u73af\u5883\u53d8\u91cf\u5230\u7ed3\u6784\u4f53\u4e2d<\/li>\n<li><a href=\"https:\/\/github.com\/jinzhu\/configor\">configor<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/knadh\/koanf\">koanf<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/pelletier\/go-toml\">go-toml<\/a> - TOML<\/li>\n<li><a href=\"https:\/\/github.com\/adobe\/butler\">butler<\/a> - Adobe \u5f00\u6e90\u7684\u914d\u7f6e\u7ba1\u7406\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/a8m\/envsubst\">envsubst<\/a> - \u73af\u5883\u53d8\u91cf\u66ff\u6362<\/li>\n<\/ul>\n<h3 id=\"\u722c\u866b\">\u722c\u866b<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/crawlab-team\/crawlab\">Crawlab<\/a> - \u57fa\u4e8eGolang\u7684\u5206\u5e03\u5f0f\u722c\u866b\u7ba1\u7406\u5e73\u53f0\uff0c\u652f\u6301Python\u3001NodeJS\u3001Go\u3001Java\u3001PHP\u7b49\u591a\u79cd\u7f16\u7a0b\u8bed\u8a00\u4ee5\u53ca\u591a\u79cd\u722c\u866b\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/gocolly\/colly\">Colly<\/a> - \u7f51\u7edc\u722c\u866b\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/henrylee2cn\/pholcus\">Pholcus<\/a> - \u652f\u6301\u5206\u5e03\u5f0f\u7684\u9ad8\u5e76\u53d1\u3001\u91cd\u91cf\u7ea7\u722c\u866b\u8f6f\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/hu17889\/go_spider\">go_spider<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/raviqqe\/muffet\">Muffet<\/a> - \u7f51\u7ad9\u94fe\u63a5\u68c0\u67e5\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/wspl\/creeper\">Creeper<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/geziyor\/geziyor\">Geziyor<\/a> - \u652f\u6301 JS \u6e32\u67d3\u7684\u5feb\u901f\u722c\u866b\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/amirgamil\/apollo\">Apollo<\/a> - \u4e00\u4e2a\u722c\u866b\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/MontFerret\/ferret\">ferret<\/a> - \u58f0\u660e\u5f0f Web \u6570\u636e\u6293\u53d6<\/li>\n<li><a href=\"https:\/\/github.com\/PuerkitoBio\/gocrawl\">gocrawl<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/antchfx\/antch\">Antch<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/projectdiscovery\/katana\">katana<\/a> - \u722c\u866b&amp;\u8718\u86db\u6846\u67b6<\/li>\n<\/ul>\n<h3 id=\"\u6570\u636e\u5e93\">\u6570\u636e\u5e93<\/h3>\n<h4 id=\"sql\u89e3\u6790\">SQL\u89e3\u6790<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/pingcap\/parser\">pingcap\/parser<\/a> - \u517c\u5bb9 MySQL \u7684 SQL \u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/akito0107\/xsqlparser\">xsqlparser<\/a> - SQL \u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/xwb1989\/sqlparser\">sqlparser<\/a> - SQL \u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/blastrain\/vitess-sqlparser\">vitess-sqlparser<\/a> - SQL \u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/duythinht\/dbml-go\">dbml-go<\/a> - <a href=\"https:\/\/github.com\/holistics\/dbml\">DBML<\/a> \u89e3\u6790<\/li>\n<\/ul>\n<h4 id=\"\u5206\u5e03\u5f0f\u4e8b\u52a1\">\u5206\u5e03\u5f0f\u4e8b\u52a1<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/lysu\/go-saga\">go-saga<\/a> - Saga \u5206\u5e03\u5f0f\u4e8b\u52a1\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/yedf\/dtm\">DTM<\/a> - \u8de8\u8bed\u8a00\u7684\u5206\u5e03\u5f0f\u4e8b\u52a1\u7ba1\u7406\u670d\u52a1\uff0c\u652f\u6301TCC\u3001Saga\u3001XA\u7b49<\/li>\n<\/ul>\n<h4 id=\"\u6570\u636e\u5e93\u76f8\u5173\">\u6570\u636e\u5e93\u76f8\u5173<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/xo\/usql\">usql<\/a> - \u51e0\u4e4e\u652f\u6301\u5168\u90e8 SQL \u4e0e NoSQL \u6570\u636e\u5e93\u7684\u547d\u4ee4\u884c\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/go-gorm\/gorm\">GORM<\/a> - GORM V2\n<ul>\n<li><a href=\"https:\/\/github.com\/jinzhu\/gorm\">GORM V1<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/liudanking\/gorm2sql\">gorm2sql<\/a> - \u6839\u636e Model Struct \u751f\u6210\u5efa\u8868\u8bed\u53e5<\/li>\n<li><a href=\"https:\/\/github.com\/go-gorm\/sharding\">gorm-sharding<\/a> - \u57fa\u4e8e Conn \u5c42\u505a SQL \u62e6\u622a\u3001AST \u89e3\u6790\u3001\u5206\u8868\u8def\u7531\u3001\u81ea\u589e\u4e3b\u952e\u586b\u5145\uff0c\u5bf9\u4f7f\u7528\u8005\u900f\u660e<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/gitea.com\/xorm\/xorm\">Xorm<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/xormplus\/xorm\">XormPlus<\/a> - Xorm \u7684\u5b9a\u5236\u589e\u5f3a\u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/gohouse\/gorose\">GoRose<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/jmoiron\/sqlx\">sqlx<\/a> - <code>database\/sql<\/code> \u6269\u5c55\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/rocketlaunchr\/dbq\">dbq<\/a> - \u6570\u636e\u5e93\u64cd\u4f5c<\/li>\n<li><a href=\"https:\/\/github.com\/didi\/gendry\">gendry<\/a> - \u6ef4\u6ef4\u5f00\u6e90\u7684SQL Builder<\/li>\n<li><a href=\"https:\/\/github.com\/go-ozzo\/ozzo-dbx\">ozzo-dbx<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Masterminds\/squirrel\">Squirrel<\/a> - Fluent SQL Builder<\/li>\n<li><a href=\"https:\/\/github.com\/aacanakin\/qb\">qb<\/a> - the database toolkit for go<\/li>\n<li><a href=\"http:\/\/labix.org\/mgo\">mgo<\/a>\n<ul>\n<li><a href=\"https:\/\/github.com\/globalsign\/mgo\">globalsign\/mgo<\/a> - The MongoDB driver for Go<\/li>\n<li><a href=\"https:\/\/studygolang.com\/articles\/3485\">mgo\u4f7f\u7528\u6307\u5357<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/github.com\/flike\/kingshard\">kingshard<\/a> - MySQL Proxy<\/li>\n<li><a href=\"https:\/\/github.com\/XiaoMi\/soar\">SOAR<\/a> - \u5bf9SQL\u8fdb\u884c\u4f18\u5316\u548c\u6539\u5199\u7684\u81ea\u52a8\u5316\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/actiontech\/sqle\">SQLE<\/a> - SQL \u5ba1\u6838\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/vitessio\/vitess\">Vitess<\/a> - \u7528\u4e8e\u90e8\u7f72\u3001\u6269\u5c55\u548c\u7ba1\u7406\u5927\u578bMySQL\u5b9e\u4f8b\u96c6\u7fa4\u7684\u6570\u636e\u5e93\u89e3\u51b3\u65b9\u6848<\/li>\n<li><a href=\"https:\/\/github.com\/github\/gh-ost\">gh-ost<\/a> - GitHub \u5f00\u6e90\u7684\u5728\u7ebf\u66f4\u6539 MySQL \u8868\u7ed3\u6784\u7684\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/alash3al\/sqler\">SQLer<\/a> - write APIs using direct SQL queries with no hassle, let&rsquo;s rethink about SQL<\/li>\n<li><a href=\"https:\/\/github.com\/gocraft\/dbr\">gocraft\/dbr<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/XiaoMi\/Gaea\">Gaea<\/a> - \u5c0f\u7c73\u5f00\u6e90\u7684\u57fa\u4e8e MySQL \u534f\u8bae\u7684\u6570\u636e\u5e93\u4e2d\u95f4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/cube2222\/octosql\">OctoSQL<\/a> - \u652f\u6301\u591a\u6570\u636e\u5e93\u7684 SQL \u67e5\u8be2\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/pressly\/goose\">goose<\/a> - \u6570\u636e\u5e93\u8fc1\u79fb\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/golang-migrate\/migrate\">migrate<\/a> - \u6570\u636e\u5e93\u8fc1\u79fb\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/amacneil\/dbmate\">dbmate<\/a> - \u6570\u636e\u5e93\u8fc1\u79fb\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/facebook\/ent\">ent<\/a> - An Entity Framework For Go<\/li>\n<li><a href=\"https:\/\/github.com\/samonzeweb\/godb\">godb<\/a> - a Go query builder and struct mapper<\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/go-nulltype\">go-nulltype<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/siddontang\/go-mysql\">go-mysql<\/a> - MySQL \u5de5\u5177\u96c6<\/li>\n<li><a href=\"https:\/\/github.com\/alicebob\/sqlittle\">SQLittle<\/a> - \u7eaf\u8bfb\u53d6 SQLite \u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/brokercap\/Bifrost\">Bifrost<\/a> - MySQL \u540c\u6b65\u5230 Redis\u3001ClickHouse \u7b49\u670d\u52a1\u7684\u5f02\u6784\u4e2d\u95f4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/cch123\/elasticsql\">elasticsql<\/a> - \u8f6c\u6362 SQL \u6210 Elasticsearch DSL<\/li>\n<li><a href=\"https:\/\/github.com\/gobuffalo\/pop\">POP<\/a> - \u57fa\u4e8e <a href=\"https:\/\/github.com\/jmoiron\/sqlx\">sqlx<\/a> \u5c01\u88c5\u7684\u6570\u636e\u5e93 ORM \u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/go-rel\/rel\">REL<\/a> - Modern Database Access Layer for Go<\/li>\n<li><a href=\"https:\/\/github.com\/HDT3213\/rdb\">RDB<\/a> - Redis RDB \u6587\u4ef6\u89e3\u6790\u548c\u751f\u6210\u5de5\u5177\uff0c\u652f\u6301\u8f6c JSON\u3001\u8f6c AOF\u3001\u5bfb\u627e Big Key\u3001\u751f\u6210 RDB \u6587\u4ef6\u53ca\u7ed8\u5236\u5185\u5b58\u706b\u7130\u56fe\u7b49\u529f\u80fd<\/li>\n<li><a href=\"https:\/\/github.com\/bytebase\/bytebase\">Bytebase<\/a> - \u57fa\u4e8e\u7f51\u7edc\u3001\u96f6\u914d\u7f6e\u3001\u65e0\u4f9d\u8d56\u7684\u6570\u636e\u5e93 Schema \u53d8\u66f4\u548c\u7248\u672c\u63a7\u5236\u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/uptrace\/bun\">Bun<\/a> - SQL \u4f18\u5148\u7684 ORM\uff0c\u5199 SQL \u7684\u65b9\u5f0f\u5199 Go \u4ee3\u7801\uff0c\u652f\u6301 PostgreSQL\u3001MySQL\u3001MSSQL\u3001SQLite<\/li>\n<\/ul>\n<h4 id=\"\u6570\u636e\u5e93\u5ba2\u6237\u7aef\">\u6570\u636e\u5e93\u5ba2\u6237\u7aef<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/go-sql-driver\/mysql\">Go-MySQL-Driver<\/a> - MySQL \u9a71\u52a8<\/li>\n<li><a href=\"https:\/\/github.com\/denisenkom\/go-mssqldb\">go-mssqldb<\/a> - MSSQL \u9a71\u52a8<\/li>\n<li><a href=\"https:\/\/github.com\/lib\/pq\">pq<\/a> - PostgreSQL \u9a71\u52a8<\/li>\n<li><a href=\"https:\/\/github.com\/mongodb\/mongo-go-driver\">mongo-go-driver<\/a> - MongoDB \u5b98\u65b9\u51fa\u54c1\u7684 Go \u8bed\u8a00\u9a71\u52a8<\/li>\n<li><a href=\"https:\/\/github.com\/qiniu\/qmgo\">qmgo<\/a> - MongoDB \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/ClickHouse\/clickhouse-go\">clickhouse-go<\/a> - ClickHouse \u5b98\u65b9 Go \u8bed\u8a00\u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/uptrace\/go-clickhouse\">go-clickhouse<\/a> - ClickHouse \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/go-sqlite3\">go-sqlite3<\/a> - SQLite3 \u9a71\u52a8<\/li>\n<li><a href=\"https:\/\/github.com\/tsuna\/gohbase\">gohbase<\/a> - HBase \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/gomodule\/redigo\">redigo<\/a> - Redis \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/redis\/go-redis\">go-redis<\/a> - Redis \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/rueian\/rueidis\">rueidis<\/a> - Redis \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/go-redsync\/redsync\">redsync<\/a> - \u57fa\u4e8e Redis \u7684\u5206\u5e03\u5f0f\u9501<\/li>\n<li><a href=\"https:\/\/github.com\/bsm\/redislock\">redislock<\/a> - \u57fa\u4e8e Redis \u7684\u5206\u5e03\u5f0f\u9501<\/li>\n<li><a href=\"https:\/\/github.com\/tiny-craft\/tiny-rdm\">Tiny RDM<\/a> - Redis \u684c\u9762\u5ba2\u6237\u7aef<\/li>\n<\/ul>\n<h4 id=\"\u6570\u636e\u5e93\u5f15\u64ce\">\u6570\u636e\u5e93\u5f15\u64ce<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/etcd-io\/etcd\">etcd<\/a> - KV \u5206\u5e03\u5f0f\u5b58\u50a8<\/li>\n<li><a href=\"https:\/\/github.com\/influxdata\/influxdb\">InfluxDB<\/a> - \u65f6\u95f4\u5e8f\u5217\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/prometheus\/prometheus\">Prometheus<\/a> - \u670d\u52a1\u76d1\u63a7\u7cfb\u7edf &amp; \u65f6\u95f4\u5e8f\u5217\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/nakabonne\/tstorage\">tstorage<\/a> - \u65f6\u95f4\u5e8f\u5217\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/thanos-io\/thanos\">Thanos<\/a> - \u652f\u6301 Prometheus \u7b80\u5316\u90e8\u7f72\u3001\u9ad8\u53ef\u7528\u3001\u5206\u5e03\u5f0f\u5b58\u50a8<\/li>\n<li><a href=\"https:\/\/github.com\/cockroachdb\/cockroach\">CockroachDB<\/a> - \u5206\u5e03\u5f0f SQL \u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/cayleygraph\/cayley\">Cayley<\/a> - \u56fe\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/radondb\/radon\">RadonDB<\/a> - \u57fa\u4e8e MySQL \u7814\u53d1\u7684\u65b0\u4e00\u4ee3\u5206\u5e03\u5f0f\u5173\u7cfb\u578b\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/pingcap\/tidb\">TiDB<\/a> - \u5206\u5e03\u5f0f\u5173\u7cfb\u578b\u6570\u636e\u5e93\uff0c\u517c\u5bb9 MySQL \u534f\u8bae<\/li>\n<li><a href=\"https:\/\/github.com\/uber\/aresdb\">AresDB<\/a> - Uber \u5f00\u6e90\u7684 GPU \u9a71\u52a8\u7684\u5b9e\u65f6\u5206\u6790\u5b58\u50a8&amp;\u67e5\u8be2\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/syndtr\/goleveldb\">leveldb<\/a> - LevelDB \u7684 Go \u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/dgraph-io\/dgraph\">Dgraph<\/a> - \u5206\u5e03\u5f0f\u56fe\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/rqlite\/rqlite\">rqlite<\/a> - \u57fa\u4e8e SQLite \u7684\u8f7b\u91cf\u7ea7\u5206\u5e03\u5f0f\u5173\u7cfb\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/infinivision\/gaeadb\">gaeadb<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dgraph-io\/badger\">BadgerDB<\/a> - KV \u6570\u636e\u5e93\uff0c\u652f\u6301 ACID \u4e8b\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/tomarrell\/lbadd\">LBADD<\/a> - \u7528 Go \u5b9e\u73b0\u7684\u5206\u5e03\u5f0f SQL \u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/go-memdb\">go-memdb<\/a> - \u5efa\u7acb\u5728\u4e0d\u53ef\u53d8 Radix \u6811\u4e0a\u7684\u5185\u5b58\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/vectorengine\/vectorsql\">VectorSQL<\/a> - \u5e94\u7528\u4e8e IoT \u548c\u5927\u6570\u636e\u7684 DBMS \u6570\u636e\u5e93\uff0c\u7c7b\u4f3c\u4e8e ClickHouse<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/buntdb\">BuntDB<\/a> - \u57fa\u4e8e\u5185\u5b58\u7684KV\u6570\u636e\u5e93\uff0c\u652f\u6301\u78c1\u76d8\u6301\u4e45\u5316\u3001ACID\u4e8b\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/pingcap-incubator\/tinysql\"><strong>TinySQL<\/strong><\/a> - \u8ff7\u4f60\u5206\u5e03\u5f0f\u5173\u7cfb\u578b\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/tile38\">Tile38<\/a> - GEO \u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/redcon\">Redcon<\/a> - \u517c\u5bb9 Redis \u534f\u8bae\u7684\u81ea\u5b9a\u4e49 Redis \u670d\u52a1\uff0c\u91c7\u7528 BuntDB \u548c Tile38 \u5b9e\u73b0\u5b58\u50a8<\/li>\n<li><a href=\"https:\/\/github.com\/genjidb\/genji\">genji<\/a> - \u6587\u6863\u5185\u5d4c\u578b\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/dolthub\/dolt\">Dolt<\/a> - \u50cf Git \u4e00\u6837\u64cd\u4f5c\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/flower-corp\/rosedb\">rosedb<\/a> - \u7b80\u6d01\u3001\u9ad8\u6548\u7684 KV \u6570\u636e\u5e93\uff0c\u652f\u6301\u591a\u79cd\u6570\u636e\u7ed3\u6784<\/li>\n<li><a href=\"https:\/\/github.com\/lindb\/lindb\">LinDB<\/a> - \u5206\u5e03\u5f0f\u65f6\u5e8f\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/chenjiandongx\/mandodb\">mandodb<\/a> - \u4e00\u4e2a\u793a\u4f8b\u9879\u76ee\uff0c\u4f5c\u8005\u4ecb\u7ecd\u5982\u4f55\u4ece\u96f6\u5f00\u59cb\u5b9e\u73b0\u4e00\u4e2a\u5c0f\u578b\u7684\u65f6\u5e8f\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/dolthub\/go-mysql-server\">go-mysql-server<\/a> - \u89e3\u6790 MySQL \u534f\u8bae\u5e76\u4f18\u5316 SQL \u7684\u6570\u636e\u5e93\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/milvus-io\/milvus\">Milvus<\/a> - \u5411\u91cf\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/FerretDB\/FerretDB\">FerretDB<\/a> - MangoDB \u66ff\u4ee3\u54c1<\/li>\n<li><a href=\"https:\/\/github.com\/flower-corp\/lotusdb\">LotusDB<\/a> - \u5feb\u901f KV \u5b58\u50a8\u5f15\u64ce\uff0c\u517c\u5bb9 LSM \u548c B+ \u6811<\/li>\n<li><a href=\"https:\/\/github.com\/nutsdb\/nutsdb\">NutsDB<\/a> - \u53ef\u6301\u4e45\u5316\u3001\u4e8b\u52a1\u7684\u5185\u5d4c KV \u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/buraksezer\/olric\">Olric<\/a><\/li>\n<\/ul>\n<h3 id=\"\u7f13\u5b58\">\u7f13\u5b58<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/bluele\/gcache\">GCache<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/etcd-io\/bbolt\">bbolt<\/a> - key\/value store<\/li>\n<li><a href=\"https:\/\/github.com\/allegro\/bigcache\">BigCache<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/patrickmn\/go-cache\">go-cache<\/a> - KV \u5185\u5b58\u7f13\u5b58<\/li>\n<li><a href=\"https:\/\/github.com\/bradfitz\/gomemcache\">gomemcache<\/a> - Memcache \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/muesli\/cache2go\">cache2go<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dgraph-io\/ristretto\">ristretto<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/VictoriaMetrics\/fastcache\">fastcache<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/coocood\/freecache\">FreeCache<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hdt3213\/godis\">godis<\/a> - Go \u8bed\u8a00\u5b9e\u73b0\u7684 Redis \u670d\u52a1\u5668\u548c\u5206\u5e03\u5f0f\u96c6\u7fa4<\/li>\n<li><a href=\"https:\/\/github.com\/golang\/groupcache\">groupcache<\/a> - \u5206\u5e03\u5f0f\u7f13\u5b58<\/li>\n<li><a href=\"https:\/\/github.com\/faabiosr\/cachego\">cachego<\/a> - \u652f\u6301 Redis\u3001Bolt \u7b49\u7f13\u5b58\u63a5\u53e3<\/li>\n<li><a href=\"https:\/\/github.com\/peterbourgon\/diskv\">diskv<\/a> - \u57fa\u4e8e\u786c\u76d8\u7684 KV \u5b58\u50a8<\/li>\n<li><a href=\"https:\/\/github.com\/cockroachdb\/pebble\">Pebble<\/a> - \u88ab CockroachDB \u4f7f\u7528\u7684 KV \u5b58\u50a8<\/li>\n<\/ul>\n<h3 id=\"\u641c\u7d22\u63a8\u8350\">\u641c\u7d22\u63a8\u8350<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/huichen\/wukong\">wukong<\/a> - \u5168\u6587\u641c\u7d22\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/elastic\/go-elasticsearch\">go-elasticsearch<\/a> - \u5b98\u65b9 ES \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/olivere\/elastic\">elastic<\/a> - Elasticsearch \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/siddontang\/go-mysql-elasticsearch\">go-mysql-elasticsearch<\/a> - Sync MySQL data into elasticsearch<\/li>\n<li><a href=\"https:\/\/github.com\/go-ego\/gse\">gse<\/a> - Go \u8bed\u8a00\u5206\u8bcd<\/li>\n<li><a href=\"https:\/\/github.com\/huichen\/sego\">sego<\/a> - Go \u4e2d\u6587\u5206\u8bcd<\/li>\n<li><a href=\"https:\/\/github.com\/yanyiwu\/gojieba\">gojieba<\/a> - &ldquo;\u7ed3\u5df4&quot;\u4e2d\u6587\u5206\u8bcd\u7684 Go \u8bed\u8a00\u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/go-ego\/riot\">Riot<\/a> - \u5168\u6587\u641c\u7d22\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/akrylysov\/simplefts\">simplefts<\/a> - \u8d85\u7b80\u5355\u7684\u5168\u6587\u641c\u7d22\u5f15\u64ce\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/mosuka\/blast\">Blast<\/a> - \u5168\u6587\u641c\u7d22(<code>Archived<\/code>)<\/li>\n<li><a href=\"https:\/\/github.com\/lithammer\/fuzzysearch\">Fuzzy Search<\/a> - \u6587\u672c\u6a21\u7cca\u641c\u7d22<\/li>\n<li><a href=\"https:\/\/github.com\/zhenghaoz\/gorse\">gorse<\/a> - \u5355\u8282\u70b9\u8bad\u7ec3\u548c\u5206\u5e03\u5f0f\u9884\u6d4b\u63a8\u8350\u7cfb\u7edf\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/newpanjing\/gofound\">gofound<\/a> - \u5168\u6587\u641c\u7d22\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/zinclabs\/zinc\">ZincSearch<\/a> - \u5168\u6587\u641c\u7d22\u5f15\u64ce\uff0c\u517c\u5bb9 Elasticsearch API \u548c DSL<\/li>\n<li><a href=\"https:\/\/github.com\/blugelabs\/bluge\">Bluge<\/a> - \u6587\u672c\u5206\u8bcd<\/li>\n<\/ul>\n<h3 id=\"\u8868\u5355\">\u8868\u5355<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/go-playground\/validator\">validator<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/go-ozzo\/ozzo-validation\">ozzo-validation<\/a> - \u4f7f\u7528\u4ee3\u7801\u6307\u5b9a\u89c4\u5219\uff0c\u800c\u975eTag<\/li>\n<li><a href=\"https:\/\/github.com\/bytedance\/go-tagexpr\">go-tagexpr<\/a> - \u5b57\u8282\u8df3\u52a8\u5f00\u6e90\u7684\u7ed3\u6784\u4f53\u6807\u7b7e\u8868\u8fbe\u5f0f\u89e3\u91ca\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/asaskevich\/govalidator\">govalidator<\/a><\/li>\n<\/ul>\n<h3 id=\"auth\">Auth<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/casbin\/casbin\">Casbin<\/a> - \u6743\u9650\u63a7\u5236\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/uber\/pam-ussh\">pam-ussh<\/a> - Uber&rsquo;s SSH certificate pam module<\/li>\n<li><a href=\"https:\/\/github.com\/golang-jwt\/jwt\">jwt-go<\/a> - JWT for Go<\/li>\n<li><a href=\"https:\/\/github.com\/kataras\/jwt\">kataras\/jwt<\/a> - JWT \u8f7b\u91cf\u7ea7\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/cristalhq\/jwt\">cristalhq\/jwt<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gorilla\/sessions\">sessions<\/a> - \u540e\u7aef SESSION \u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/gorilla\/securecookie\">securecookie<\/a> - cookie \u52a0\u5bc6\/\u89e3\u5bc6<\/li>\n<li><a href=\"https:\/\/github.com\/markbates\/goth\">Goth<\/a> - Multi-Provider Authentication for Go<\/li>\n<li><a href=\"https:\/\/github.com\/hako\/branca\">branca<\/a> - \u53f7\u79f0\u6bd4 JWT \u66f4\u5b89\u5168\u7684 token \u89e3\u51b3\u65b9\u6848<\/li>\n<li><a href=\"https:\/\/github.com\/appleboy\/gin-jwt\">gin-jwt<\/a> - Gin \u6846\u67b6\u7684 JWT \u4e2d\u95f4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/volatiletech\/authboss\">Authboss<\/a> - Web Auth \u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/zitadel\/zitadel\">ZITADEL<\/a> - \u8eab\u4efd\u8ba4\u8bc1\u7cfb\u7edf\uff0c\u652f\u6301\u5404\u79cd\u8ba4\u8bc1\u6a21\u5f0f<\/li>\n<\/ul>\n<h3 id=\"\u52a0\u5bc6\u89e3\u5bc6\">\u52a0\u5bc6\/\u89e3\u5bc6<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/rsc\/2fa\">2fa<\/a> - Two-factor authentication on the command line<\/li>\n<li><a href=\"https:\/\/github.com\/FiloSottile\/age\">age<\/a> - \u6587\u4ef6\u52a0\u5bc6\u5de5\u5177\uff08\u5e93\uff09<\/li>\n<li><a href=\"https:\/\/github.com\/cloudflare\/circl\">CIRCL<\/a> - Cloudflare Interoperable, Reusable Cryptographic Library<\/li>\n<\/ul>\n<h3 id=\"\u89c6\u9891\">\u89c6\u9891<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/giorgisio\/goav\">goav<\/a> - FFmpeg \u89c6\u9891\u5904\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/q191201771\/lal\">lal<\/a> - \u76f4\u64ad\u6d41\u5a92\u4f53\u7f51\u7edc\u4f20\u8f93\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/hr3lxphr6j\/bililive-go\">bililive-go<\/a> - \u76f4\u64ad\u5f55\u5236\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/screego\/server\">screego<\/a> - \u901a\u8fc7\u6d4f\u89c8\u5668\u5171\u4eab\u5f00\u53d1\u8005\u5c4f\u5e55<\/li>\n<li><a href=\"https:\/\/github.com\/gwuhaolin\/livego\">livego<\/a> - \u76f4\u64ad\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/langhuihui\/monibuca\">Monibuca<\/a> - \u6d41\u5a92\u4f53\u670d\u52a1\u5668\u5f00\u53d1\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/go-olive\/olive\">olive<\/a> - \u652f\u6301\u864e\u7259\u7b49\u5e73\u53f0\u7684\u76f4\u64ad\u5f55\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/iawia002\/lux\">lux<\/a> - \u5404\u5927\u89c6\u9891\u7f51\u7ad9\u7684\u89c6\u9891\u4e0b\u8f7d\u5de5\u5177<\/li>\n<\/ul>\n<h3 id=\"\u56fe\u5f62\u5904\u7406\">\u56fe\u5f62\u5904\u7406<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/boombuler\/barcode\">barcode<\/a> - \u6761\u5f62\u7801\/\u4e8c\u7ef4\u7801\u751f\u6210\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/thoas\/picfit\">picfit<\/a> - \u56fe\u7247\u64cd\u4f5c\u3001\u88c1\u526a\u3001\u7ba1\u7406\u670d\u52a1\u5668<\/li>\n<li><a href=\"http:\/\/git.oschina.net\/juapk\/gmfs\">gmfs<\/a> - \u56fe\u7247\u64cd\u4f5c\u3001\u88c1\u526a\u3001\u7ba1\u7406\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/mat\/besticon\">besticon<\/a> - favicon \u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/esimov\/caire\">Caire<\/a> - \u56fe\u7247\u64cd\u4f5c\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/disintegration\/imaging\">Imaging<\/a> - \u56fe\u7247\u64cd\u4f5c\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/lifei6671\/gocaptcha\">gocaptcha<\/a> - \u9a8c\u8bc1\u7801\u751f\u6210<\/li>\n<li><a href=\"https:\/\/github.com\/mojocn\/base64Captcha\">base64Captcha<\/a> - \u9a8c\u8bc1\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/h2non\/go-is-svg\">go-is-svg<\/a> - \u6821\u9a8c\u662f\u5426\u4e3a SVG \u56fe\u7247<\/li>\n<li><a href=\"https:\/\/github.com\/issue9\/identicon\">identicon<\/a> - \u6839\u636e\u7528\u6237\u7684 IP \u3001\u90ae\u7bb1\u540d\u7b49\u4efb\u610f\u6570\u636e\u4e3a\u7528\u6237\u4ea7\u751f\u6f02\u4eae\u7684\u968f\u673a\u5934\u50cf<\/li>\n<li><a href=\"https:\/\/github.com\/EdlinOrg\/prominentcolor\">prominentcolor<\/a> - \u8bc6\u522b\u56fe\u7247\u7684\u4e3b\u8981\u989c\u8272<\/li>\n<li><a href=\"https:\/\/github.com\/dchest\/captcha\">dchest\/captcha<\/a> - \u751f\u6210\u548c\u9a8c\u8bc1\u56fe\u7247\u6216\u97f3\u9891\u9a8c\u8bc1\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/h2non\/bimg\">bimg<\/a> - \u56fe\u7247\u5904\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/h2non\/imaginary\">imaginary<\/a> - \u56fe\u7247\u5904\u7406\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/fogleman\/primitive\">primitive<\/a> - \u7528\u539f\u59cb\u51e0\u4f55\u56fe\u5f62\u7ed8\u5236\u56fe\u5f62<\/li>\n<li><a href=\"https:\/\/github.com\/nanmu42\/orly\">orly<\/a> - \u751f\u6210\u4f60\u81ea\u5df1\u7684O&rsquo;RLY\u52a8\u7269\u4e66\u5c01\u9762<\/li>\n<li><a href=\"https:\/\/github.com\/muesli\/smartcrop\">smartcrop<\/a> - \u667a\u80fd\u88c1\u526a\u56fe\u7247<\/li>\n<li><a href=\"https:\/\/github.com\/disintegration\/gift\">gift<\/a> - \u56fe\u7247\u6ee4\u955c<\/li>\n<li><a href=\"https:\/\/github.com\/matsuyoshi30\/germanium\">Germanium<\/a> - \u7ed9\u4ee3\u7801\u751f\u6210\u56fe\u7247<\/li>\n<li><a href=\"https:\/\/github.com\/fogleman\/gg\">Go Graphics<\/a> - 2D \u56fe\u7247\u6e32\u67d3<\/li>\n<li><a href=\"https:\/\/github.com\/tdewolff\/canvas\">canvas<\/a> - \u77e2\u91cf\u56fe\u7ed8\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/tdewolff\/formulae\">formulae<\/a> - \u6570\u5b66\u516c\u5f0f\u89e3\u6790\u3001\u8ba1\u7b97\u3001\u56fe\u8868\u7ed8\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/cshum\/imagor\">imagor<\/a> - \u56fe\u50cf\u5904\u7406\u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/RH12503\/Triangula\">Triangula<\/a> - \u7ed9\u56fe\u7247\u589e\u52a0\u4e09\u89d2\u5f62\u7eb9\u6837\u98ce\u683c\u7684\u6ee4\u955c<\/li>\n<li><a href=\"https:\/\/github.com\/terrastruct\/d2\">D2<\/a> - \u4e00\u79cd\u5c06\u6587\u672c\u8f6c\u6362\u6210\u56fe\u5f62\u7684\u56fe\u8868\u811a\u672c\u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/fishtailstudio\/imgo\">ImGo<\/a> - \u7b80\u6d01\u3001\u94fe\u5f0f\u8c03\u7528\u7684\u56fe\u50cf\u5904\u7406\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/maaslalani\/invoice\">Invoice<\/a> - \u53d1\u7968\u751f\u6210\u5de5\u5177\uff0c\u53ef\u901a\u8fc7\u53c2\u6570\u548c\u914d\u7f6e\u6587\u4ef6\u8fdb\u884c\u521b\u5efa\u548c\u7ba1\u7406\u5404\u79cd\u7c7b\u578b\u7684\u53d1\u7968<\/li>\n<\/ul>\n<h4 id=\"\u56fe\u7247\u8bc6\u522b\">\u56fe\u7247\u8bc6\u522b<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/Kagami\/go-face\">go-face<\/a> - \u9762\u90e8\u8bc6\u522b<\/li>\n<\/ul>\n<h3 id=\"\u56fe\u8868\">\u56fe\u8868<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/chenjiandongx\/go-echarts\">go-echarts<\/a> - Echarts \u56fe\u8868\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/gonum\/plot\">gonum\/plot<\/a> - \u56fe\u5f62\u7ed8\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/pinhole\">pinhole<\/a> - 3D \u7ebf\u6846\u56fe\u7ed8\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/mmcloughlin\/globe\">globe<\/a> - \u5730\u7403\u7ebf\u6846\u56fe\u7ed8\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/buchanae\/ink\">ink<\/a> - Go \u4e2d\u7684 2D \u56fe\u5f62\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/bykof\/go-plantuml\">go-plantuml<\/a> - \u57fa\u4e8e Go \u6e90\u7801\u751f\u6210 plantuml \u56fe<\/li>\n<li><a href=\"https:\/\/github.com\/blushft\/go-diagrams\">go-diagrams<\/a> - \u901a\u8fc7\u4ee3\u7801\u751f\u6210\u56fe\u8868<\/li>\n<li><a href=\"https:\/\/github.com\/rodrigo-brito\/gocity\">GoCity<\/a> - 3D \u5c55\u793a\u57ce\u5e02<\/li>\n<\/ul>\n<h3 id=\"\u6784\u5efa\u7f16\u8bd1\">\u6784\u5efa\u7f16\u8bd1<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/magefile\/mage\"><strong>Mage<\/strong><\/a> - \u7c7b\u4f3c\u4e8e Makefile \u7684\u547d\u4ee4\u884c\u5de5\u5177\uff0c\u7528\u4e8e\u6784\u5efa\u548c\u8fd0\u884c Go \u9879\u76ee<\/li>\n<li><a href=\"https:\/\/github.com\/goreleaser\/goreleaser\"><strong>GoReleaser<\/strong><\/a> - Go \u591a\u5e73\u53f0\u4e8c\u8fdb\u5236\u6587\u4ef6\u6253\u5305\u3001\u5e76\u652f\u6301\u53d1\u5e03\u5230 Homebrew \u7684\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/laher\/goxc\">goxc<\/a> - \u8de8\u5e73\u53f0\u7f16\u8bd1\u5de5\u5177\uff08\u56e0 1.5 \u7248\u672c\u5f00\u59cb\u5df2\u81ea\u5e26\u4ea4\u53c9\u7f16\u8bd1\uff0c\u6545\u5df2\u4e0d\u518d\u7ef4\u62a4\uff09<\/li>\n<li><a href=\"https:\/\/github.com\/go-task\/task\">Task<\/a> - \u7c7b\u4f3c\u4e8e <code>Make<\/code> \u7684\u6784\u5efa\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/codegangsta\/gin\">codegangsta\/gin<\/a> - \u70ed\u7f16\u8bd1\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/cosmtrek\/air\">Air<\/a> - \u70ed\u7f16\u8bd1\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/silenceper\/gowatch\">gowatch<\/a> - \u70ed\u7f16\u8bd1\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/gravityblast\/fresh\">Fresh<\/a> - \u70ed\u7f16\u8bd1\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/Debian\/dh-make-golang\">dh-make-golang<\/a> - \u81ea\u52a8\u6784\u5efa Debian \u5305<\/li>\n<li><a href=\"https:\/\/github.com\/tj\/gobinaries\">gobinaries<\/a> - \u4e0d\u7528\u5b89\u88c5Go\u5c31\u80fd\u7f16\u8bd1\u5b89\u88c5Go\u7f16\u5199\u7684\u7a0b\u5e8f<\/li>\n<li><a href=\"https:\/\/github.com\/goreleaser\/nfpm\">nFPM<\/a> - deb\u3001rpm\u3001apk \u7b49\u6253\u5305\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/mitchellh\/gox\">Gox<\/a> - Go \u8de8\u7aef\u7f16\u8bd1\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/burrowers\/garble\">garble<\/a> - \u6df7\u6dc6\u4ee3\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/unixpickle\/gobfuscate\">gobfuscate<\/a> - \u6df7\u6dc6\u4ee3\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/probonopd\/go-appimage\">go-appimage<\/a> - Go \u8bed\u8a00\u5b9e\u73b0 AppImage \u6253\u5305\u5de5\u5177<\/li>\n<\/ul>\n<h4 id=\"\u9759\u6001\u8d44\u6e90\u5185\u5d4c\">\u9759\u6001\u8d44\u6e90\u5185\u5d4c<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/markbates\/pkger\">pkger<\/a> - \u5c06\u9759\u6001\u6587\u4ef6\u6253\u5305\u6210 Go \u4e8c\u8fdb\u5236\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/leaanthony\/mewn\">mewn<\/a> - \u9759\u6001\u6587\u4ef6\u5d4c\u5165\u6253\u5305\u5230\u4e8c\u8fdb\u5236\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/rakyll\/statik\">statik<\/a> - \u9759\u6001\u6587\u4ef6\u5d4c\u5165<\/li>\n<li><a href=\"https:\/\/github.com\/GeertJohan\/go.rice\">go.rice<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/go-bindata\/go-bindata\">go-bindata<\/a> - \u5c06\u9759\u6001\u6587\u4ef6\u8f6c\u6362\u6210 Go \u4ee3\u7801\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/shurcooL\/vfsgen\">vfsgen<\/a> - \u5c06\u9759\u6001\u6587\u4ef6\u6253\u5305\u6210 <code>http.FileSystem<\/code> \u7c7b\u578b\u8fdb\u884c\u8bbf\u95ee<\/li>\n<li><a href=\"https:\/\/github.com\/gobuffalo\/packr\">packr<\/a><\/li>\n<\/ul>\n<h3 id=\"\u4f18\u96c5\u5347\u7ea7\">\u4f18\u96c5\u5347\u7ea7<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/cloudflare\/tableflip\">tableflip<\/a> - Web \u670d\u52a1\u5347\u7ea7<\/li>\n<li><a href=\"https:\/\/github.com\/minio\/selfupdate\">selfupdate<\/a> - \u4e8c\u8fdb\u5236\u6587\u4ef6\u81ea\u52a8\u5347\u7ea7<\/li>\n<li><a href=\"https:\/\/github.com\/jpillora\/overseer\">overseer<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rhysd\/go-github-selfupdate\">go-github-selfupdate<\/a> - \u4f9d\u6258 GitHub \u81ea\u52a8\u5347\u7ea7<\/li>\n<\/ul>\n<h3 id=\"\u4ee3\u7801\u5206\u6790\">\u4ee3\u7801\u5206\u6790<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/reviewdog\/reviewdog\">reviewdog<\/a> - Code Review \u673a\u5668\u4eba<\/li>\n<li><a href=\"https:\/\/github.com\/mgechev\/revive\">revive<\/a> - \u4ee3\u7801\u68c0\u67e5\u5206\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/golangci\/golangci-lint\"><strong>GolangCI-Lint<\/strong><\/a> - \u4ee3\u7801\u8d28\u91cf\u68c0\u67e5\u5206\u6790\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/kisielk\/errcheck\">errcheck<\/a> - \u68c0\u6d4b\u672a\u5904\u7406\u7684\u9519\u8bef(errors)<\/li>\n<li><a href=\"https:\/\/github.com\/dominikh\/go-tools\">Staticcheck<\/a> - \u4e00\u7cfb\u5217\u7684 Go \u4ee3\u7801\u9759\u6001\u5206\u6790\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/golang\/lint\">Golint<\/a> - Google \u5b98\u65b9\u51fa\u54c1\u7684\u4ee3\u7801\u8d28\u91cf\u68c0\u6d4b\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/360EntSecGroup-Skylar\/goreporter\">GoReporter<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/go-critic\/go-critic\">go-critic<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hhatto\/gocloc\">gocloc<\/a> - \u5206\u8bed\u8a00\u4ee3\u7801\u884c\u6570\u7edf\u8ba1<\/li>\n<li><a href=\"https:\/\/github.com\/phodal\/coca\">coca<\/a> - \u4ee3\u7801\u7edf\u8ba1\u5206\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/gojp\/goreportcard\"><strong>Go Report Card<\/strong><\/a> - Go \u9879\u76ee\u8d28\u91cf\u5206\u6790\u62a5\u544a\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/y-taka-23\/ddsv-go\">ddsv-go<\/a> - \u6b7b\u9501\u68c0\u6d4b\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/golang\/perf\">golang\/perf<\/a> - \u5b98\u65b9\u6027\u80fd\u91cf\u5316\u5206\u6790\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/jfeliu007\/goplantuml\">GoPlantUML<\/a> - \u4e3a Go \u9879\u76ee\u751f\u6210 PlantUML \u7c7b\u56fe<\/li>\n<li><a href=\"https:\/\/github.com\/bradfitz\/gosize\">gosize<\/a> - \u5206\u6790Go\u4e8c\u8fdb\u5236\u6587\u4ef6\u5927\u5c0f<\/li>\n<li><a href=\"https:\/\/github.com\/bradfitz\/shotizam\">shotizam<\/a> - \u5206\u6790 Go \u4e8c\u8fdb\u5236\u6587\u4ef6\u7684\u5927\u5c0f\u5e76\u8f93\u51fa\u5230 SQLite3<\/li>\n<li><a href=\"https:\/\/github.com\/jgautheron\/goconst\">goconst<\/a> - \u67e5\u627e\u53ef\u4ee5\u88ab\u5e38\u91cf\u66ff\u6362\u7684\u91cd\u590d\u5b57\u7b26\u4e32<\/li>\n<li><a href=\"https:\/\/github.com\/zznop\/sploit\">sploit<\/a> - \u5e2e\u52a9\u4e8c\u8fdb\u5236\u5206\u6790\u548c\u5f00\u53d1\u7684\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/hodgesds\/perf-utils\">perf<\/a> - Perf Utilities for Go<\/li>\n<li><a href=\"https:\/\/github.com\/felixge\/fgprof\">fgprof<\/a> - Go \u6027\u80fd\u5206\u6790\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/conprof\/conprof\">conprof<\/a> - \u534f\u7a0b\u5206\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/go-echarts\/statsview\">statsview<\/a> - \u5b9e\u65f6 Go \u8fd0\u884c\u65f6\u7edf\u8ba1\u6570\u636e\u53ef\u89c6\u5316\u5206\u6790\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/google\/codesearch\">codesearch<\/a> - \u4ee3\u7801\u641c\u7d22\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/pyroscope-io\/pyroscope\">Pyroscope<\/a> - \u53ef\u89c6\u5316\u7a0b\u5e8f\u6027\u80fd\u76d1\u63a7\u5de5\u5177\uff0c\u652f\u6301\u591a\u79cd\u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/securego\/gosec\">gosec<\/a> - \u4ee3\u7801\u5b89\u5168\u6027\u68c0\u67e5\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/praetorian-inc\/gokart\">gokart<\/a> - \u4ee3\u7801\u9759\u6001\u5206\u6790\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/mvdan\/gofumpt\">gofumpt<\/a> - <code>gofmt<\/code> \u589e\u5f3a\u7248\u4ee3\u7801\u683c\u5f0f\u5316\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/VKCOM\/noverify\">NoVerify<\/a> - PHP \u4ee3\u7801\u5206\u6790\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/golang\/tools\/tree\/master\/go\/analysis\/passes\/fieldalignment\">fieldalignment<\/a> - \u7ed3\u6784\u4f53\u5b57\u6bb5\u5185\u5b58\u5bf9\u9f50\u5206\u6790\u548c\u81ea\u52a8\u4fee\u590d\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/bearer\/bearer\">Bearer<\/a> - \u4ee3\u7801\u5b89\u5168\u626b\u63cf\u5de5\u5177<\/li>\n<\/ul>\n<h3 id=\"\u8c03\u8bd5\">\u8c03\u8bd5<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/davecgh\/go-spew\"><strong>go-spew<\/strong><\/a> - \u53d8\u91cf\u6253\u5370\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/go-delve\/delve\"><strong>Delve<\/strong><\/a> - Debug \u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/aarzilli\/gdlv\">gdlv<\/a> - Delve \u754c\u9762\u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/grantseltzer\/weaver\">Weaver<\/a> - \u8ddf\u8e2a Go \u7a0b\u5e8f\u6267\u884c\u94fe\u8def<\/li>\n<li><a href=\"https:\/\/github.com\/alecthomas\/repr\">repr<\/a> - \u53d8\u91cf\u6253\u5370\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/k0kubun\/pp\">pp<\/a> - \u5f69\u8272\u53d8\u91cf\u6253\u5370\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/go-ffmt\/ffmt\">ffmt<\/a> - \u53d8\u91cf\u6253\u5370\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/google\/gops\">gops<\/a> - \u8c37\u6b4c\u5b98\u65b9\u51fa\u54c1\u7684 Go \u7a0b\u5e8f\u76d1\u63a7\u8c03\u8bd5\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/google\/pprof\">pprof<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/TrueFurby\/go-callvis\">go-callvis<\/a> - \u53ef\u89c6\u5316Go\u7a0b\u5e8f\u7684\u8c03\u7528\u56fe<\/li>\n<li><a href=\"https:\/\/github.com\/y0ssar1an\/q\">q<\/a> - \u81ea\u52a8\u6253\u5370\u53d8\u91cf\u7c7b\u578b\u5e76\u4e14\u683c\u5f0f\u5316\u8f93\u51fa<\/li>\n<li><a href=\"https:\/\/github.com\/sanity-io\/litter\">Litter<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/didi\/rdebug\">RDebug<\/a> - \u6ef4\u6ef4\u5f00\u6e90\u7684\u4e00\u6b3e\u7528\u4e8e RD \u7814\u53d1\u3001\u81ea\u6d4b\u3001\u8c03\u8bd5\u7684\u5b9e\u7528\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/mkevac\/debugcharts\">debugcharts<\/a> - Go \u5185\u5b58\u5360\u7528\u53ef\u89c6\u5316\u8c03\u8bd5\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/davecheney\/gcvis\">gcvis<\/a> - \u5b9e\u65f6\u53ef\u89c6\u5316 gctrace<\/li>\n<li><a href=\"https:\/\/github.com\/pkg\/profile\">pkg\/profile<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/arl\/statsviz\">statsviz<\/a> - \u5728\u6d4f\u89c8\u5668\u4e2d\u5b9e\u65f6\u67e5\u770b Go \u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c\u65f6\u7edf\u8ba1\u4fe1\u606f\uff08GC\uff0cMemStats \u7b49\uff09<\/li>\n<li><a href=\"https:\/\/github.com\/rakyll\/autopprof\">autopprof<\/a> - \u81ea\u52a8\u5206\u6790 pprof<\/li>\n<li><a href=\"https:\/\/github.com\/go-stack\/stack\">stack<\/a> - \u6355\u83b7\u3001\u64cd\u4f5c\u3001\u683c\u5f0f\u5316\u8c03\u7528\u6808\u4fe1\u606f<\/li>\n<li><a href=\"https:\/\/github.com\/kr\/pretty\">pretty<\/a> - \u6253\u5370\u53d8\u91cf<\/li>\n<li><a href=\"https:\/\/github.com\/sasha-s\/go-deadlock\">go-deadlock<\/a> - \u5bf9 <code>(RW)Mutex<\/code> \u8fdb\u884c\u6ce8\u5165\uff0c\u5e76\u63d0\u4f9b\u6b7b\u9501\u68c0\u6d4b<\/li>\n<li><a href=\"https:\/\/github.com\/mmcloughlin\/profile\">mmcloughlin\/profile<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/CAFxX\/gcnotifier\">gcnotifier<\/a> - \u5f53\u53d1\u751f GC \u65f6\u901a\u77e5<\/li>\n<li><a href=\"https:\/\/github.com\/bcicen\/grmon\">grmon<\/a> - \u547d\u4ee4\u884c\u76d1\u63a7\u663e\u793a goroutines<\/li>\n<li><a href=\"https:\/\/github.com\/hexops\/valast\">valast<\/a> - \u6253\u5370\u8f93\u51fa\u53d8\u91cf\u7684 <code>go\/ast<\/code> \u7ed3\u6784\uff0c\u7c7b\u4f3c\u4e8e PHP \u7684 <code>var_export<\/code> \u51fd\u6570<\/li>\n<li><a href=\"https:\/\/github.com\/loov\/lensm\">lensm<\/a> - Go \u6c47\u7f16\u4e0e\u6e90\u7801\u5bf9\u7167\u67e5\u770b\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/mosn\/holmes\">holmes<\/a> - \u57fa\u4e8e\u89c4\u5219\u7684\u81ea\u52a8 Go Profile Dumper<\/li>\n<\/ul>\n<h3 id=\"\u6d4b\u8bd5\">\u6d4b\u8bd5<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/smartystreets\/goconvey\">GoConvey<\/a> - \u542bWeb\u754c\u9762\u7684\u5355\u5143\u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/golang\/mock\">GoMock<\/a> - \u8c37\u6b4c\u51fa\u54c1\u7684Mock\u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/prashantv\/gostub\">GoStub<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/bouk\/monkey\">Monkey<\/a> - (<strong>Archived<\/strong>) Monkey patching in Go<\/li>\n<li><a href=\"https:\/\/github.com\/agiledragon\/gomonkey\">gomonkey<\/a> - \u7334\u5b50\u8865\u4e01\uff0c\u5bf9\u51fd\u6570\u3001\u53d8\u91cf\u7b49\u8fdb\u884c\u6253\u6869\uff0c\u65b9\u4fbf\u5355\u5143\u6d4b\u8bd5\uff0cFork \u81ea <a href=\"https:\/\/github.com\/bouk\/monkey\">Monkey<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/cch123\/supermonkey\">SuperMonkey<\/a> - \u8ba9\u79c1\u6709\u65b9\u6cd5\u53ef\u6d4b<\/li>\n<li><a href=\"https:\/\/github.com\/vektra\/mockery\">mockery<\/a> - \u81ea\u52a8\u4e3a\u63a5\u53e3\u751f\u6210 mock \u4ee3\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/onsi\/ginkgo\">Ginkgo<\/a> - BBD \u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/shafreeck\/fperf\">fperf<\/a> - \u538b\u6d4b\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/go-check\/check\">gocheck<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/stretchr\/testify\">Testify<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/cweill\/gotests\">gotests<\/a> - \u6839\u636e\u6e90\u7801\u81ea\u52a8\u751f\u6210\u6d4b\u8bd5\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/zhulongcheng\/testsql\">TestSQL<\/a> - \u6839\u636e SQL \u521b\u5efa\u8bed\u53e5\u751f\u6210\u6d4b\u8bd5\u6570\u636e<\/li>\n<li><a href=\"https:\/\/github.com\/jarcoal\/httpmock\">httpmock<\/a> - HTTP Mock<\/li>\n<li><a href=\"https:\/\/github.com\/franela\/goblin\">Goblin<\/a> - BDD \u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/go-faker\/faker\">go-faker\/faker<\/a> - Struct Data Fake Generator<\/li>\n<li><a href=\"https:\/\/github.com\/brianvoe\/gofakeit\">gofakeit<\/a> - \u968f\u673a\u6570\u636e\u751f\u6210\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/dmgk\/faker\">dmgk\/faker<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gokultp\/go-tprof\">go-tprof<\/a> - \u5305\u6d4b\u8bd5\u62a5\u544a\u751f\u6210\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/dvyukov\/go-fuzz\">go-fuzz<\/a> - randomized testing for Go<\/li>\n<li><a href=\"https:\/\/github.com\/appleboy\/gofight\">gofight<\/a> - Testing API Handler<\/li>\n<li><a href=\"https:\/\/github.com\/DATA-DOG\/go-sqlmock\">sqlmock<\/a> - SQL \u6d4b\u8bd5<\/li>\n<li><a href=\"https:\/\/github.com\/felixge\/sqlbench\">sqlbench<\/a> - SQL<\/li>\n<li><a href=\"https:\/\/github.com\/matryer\/silk\">silk<\/a> - \u57fa\u4e8e Markdown \u7684\u63a5\u53e3\u6d4b\u8bd5<\/li>\n<li><a href=\"https:\/\/github.com\/h2non\/gock\">gock<\/a> - HTTP mock \u6d4b\u8bd5<\/li>\n<li><a href=\"https:\/\/github.com\/cucumber\/godog\">godog<\/a> - BDD \u6d4b\u8bd5\u6846\u67b6 Cucumber \u7684 Go \u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/viant\/endly\">endly<\/a> - E2E\uff08\u7aef\u5230\u7aef\uff09\u6d4b\u8bd5<\/li>\n<li><a href=\"https:\/\/github.com\/matryer\/is\">is<\/a> - \u8ff7\u4f60\u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/gruntwork-io\/terratest\">Terratest<\/a> - \u57fa\u7840\u8bbe\u65bd\u6d4b\u8bd5\uff0c\u6bd4\u5982 Docker<\/li>\n<li><a href=\"https:\/\/github.com\/sclevine\/agouti\">agouti<\/a> - Web \u9a71\u52a8\u7684\u9a8c\u6536\u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/gavv\/httpexpect\">httpexpect<\/a> - \u7aef\u5230\u7aef HTTP &amp; REST \u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/axw\/gocov\">gocov<\/a> - \u6d4b\u8bd5\u8986\u76d6\u7387<\/li>\n<li><a href=\"https:\/\/github.com\/alicebob\/miniredis\">miniredis<\/a> - Redis \u6570\u636e\u6d4b\u8bd5<\/li>\n<li><a href=\"https:\/\/github.com\/wjdp\/htmltest\">htmltest<\/a> - HTML \u6d4b\u8bd5<\/li>\n<li><a href=\"https:\/\/github.com\/orlangure\/gnomock\">gnomock<\/a> - \u65e0\u9700 mock \u7684 Go \u4ee3\u7801\u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/smartystreets\/gunit\">gunit<\/a> - xUnit \u98ce\u683c\u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/frankban\/quicktest\">quicktest<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/k6io\/k6\">k6<\/a> - \u8d1f\u8f7d\u6d4b\u8bd5\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/nikolaydubina\/go-cover-treemap\">go-cover-treemap<\/a> - \u5c06\u8986\u76d6\u7387\u6d4b\u8bd5\u7ed3\u679c\u8f6c\u6362\u6210 TreeMap \u56fe<\/li>\n<li><a href=\"https:\/\/github.com\/easysoft\/zentaoatf\">ZTF<\/a> - \u7985\u9053\u5f00\u6e90\u7684\u81ea\u52a8\u5316\u6d4b\u8bd5\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/matryer\/moq\">Moq<\/a> - \u4e3a\u63a5\u53e3\u751f\u6210 Mock \u4ee3\u7801<\/li>\n<\/ul>\n<h3 id=\"\u9519\u8bef\u5904\u7406\">\u9519\u8bef\u5904\u7406<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/pkg\/errors\">errors<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/joomcode\/errorx\">errorx<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/fatih\/errwrap\">errwrap<\/a> - Go tool to wrap and fix errors with the new <code>%w<\/code> verb directive<\/li>\n<li><a href=\"https:\/\/github.com\/romanyx\/erris\">erris<\/a> - Linter for errors.Is and errors.As<\/li>\n<li><a href=\"https:\/\/github.com\/rotisserie\/eris\">eris<\/a> - \u65e8\u5728\u901a\u8fc7\u9519\u8bef\u5305\u88c5\uff0c\u5806\u6808\u8ddf\u8e2a\u548c\u8f93\u51fa\u683c\u5f0f\u4e3a\u4f60\u63d0\u4f9b\u5bf9\u9519\u8bef\u5904\u7406\u7684\u66f4\u591a\u63a7\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/snwfdhmp\/errlog\">errlog<\/a> - \u4f7f\u7528\u9759\u6001\u548c\u5806\u6808\u8ddf\u8e2a\u5206\u6790\u6765\u5feb\u901f\u786e\u5b9a\u54ea\u4e2a\u51fd\u6570\u8c03\u7528\u5bfc\u81f4\u7684\u9519\u8bef<\/li>\n<li><a href=\"https:\/\/github.com\/juju\/errors\">juju\/errors<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/github\/go-fault\">go-fault<\/a> - GitHub \u5b98\u65b9\u51fa\u54c1\uff0c\u57fa\u4e8e\u6807\u51c6\u5e93 http \u4e2d\u95f4\u4ef6\u7684\u6545\u969c\u6ce8\u5165\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/ansel1\/merry\">merry<\/a> - \u652f\u6301\u5806\u6808\u3001\u72b6\u6001\u7801\u7684\u9519\u8bef\u5904\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/cockroachdb\/errors\">cockroachdb\/errors<\/a> - \u529f\u80fd\u5f3a\u5927\u3001\u53ef\u66ff\u4ee3 <code>errors<\/code> \u548c <code>github.com\/pkg\/errors<\/code> \u7684\u9519\u8bef\u5904\u7406\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/go-multierror\">go-multierror<\/a> - \u652f\u6301\u9519\u8bef\u5217\u8868<\/li>\n<\/ul>\n<h3 id=\"\u5b89\u5168\">\u5b89\u5168<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/opensec-cn\/kunpeng\">Kunpeng<\/a> - \u5f00\u6e90POC\u68c0\u6d4b\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/Ullaakut\/nmap\">nmap<\/a> - \u5b89\u5168\u5ba1\u8ba1\u5de5\u5177 <code>nmap<\/code> \u5f00\u53d1\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/dstotijn\/hetty\">Hetty<\/a> - \u7528\u4e8e\u5b89\u5168\u7814\u7a76\u7684 HTTP \u5de5\u5177\u5305\uff0c\u5177\u6709 Web \u63a5\u53e3\u548c\u4ee3\u7406\u65e5\u5fd7\u67e5\u770b\u5668\u7684\u62e6\u622a HTTP \u4ee3\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/rabbitstack\/fibratus\">Fibratus<\/a> - Windows \u5185\u6838\u6f0f\u6d1e\u5229\u7528\u548c\u8ddf\u8e2a\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/unrolled\/secure\">Secure<\/a> - HTTP \u5b89\u5168\u4e2d\u95f4\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/projectdiscovery\/nuclei\">nuclei<\/a> - \u57fa\u4e8eYAML\u8bed\u6cd5\u6a21\u677f\u7684\u5b9a\u5236\u5316\u5feb\u901f\u6f0f\u6d1e\u626b\u63cf\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/gitleaks\/gitleaks\">Gitleaks<\/a> - \u7528\u4e8e\u5728 Git \u5b58\u50a8\u5e93\u4e2d\u67e5\u627e\u654f\u611f\u4fe1\u606f\u548c\u5bc6\u94a5\u7684\u5f00\u6e90\u5de5\u5177<\/li>\n<\/ul>\n<h3 id=\"\u7cfb\u7edf\u4fe1\u606f\">\u7cfb\u7edf\u4fe1\u606f<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/rakyll\/go-hardware\">go-hardware<\/a> - \u6536\u96c6\u4e86\u4e00\u5806\u5173\u4e8e\u786c\u4ef6\u4fe1\u606f\u7684\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/klauspost\/cpuid\">cpuid<\/a> - CPU \u4fe1\u606f<\/li>\n<li><a href=\"https:\/\/github.com\/shirou\/gopsutil\">gopsutil<\/a> - <code>ps<\/code> \u529f\u80fd\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/elastic\/go-sysinfo\">go-sysinfo<\/a> - \u7cfb\u7edf\u4fe1\u606f<\/li>\n<li><a href=\"https:\/\/github.com\/Xuanwo\/go-locale\">go-locale<\/a> - \u8de8\u5e73\u53f0\u8bed\u8a00\u68c0\u6d4b\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/mitchellh\/go-ps\">go-ps<\/a> - \u7cfb\u7edf\u8fdb\u7a0b\u4fe1\u606f<\/li>\n<li><a href=\"https:\/\/github.com\/containers\/psgo\">psgo<\/a> - <code>ps<\/code> \u547d\u4ee4\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/jaypipes\/ghw\">ghw<\/a> - \u786c\u4ef6\u4fe1\u606f<\/li>\n<li><a href=\"https:\/\/github.com\/denisbrodbeck\/machineid\">machineid<\/a> - \u83b7\u53d6\u673a\u5668ID<\/li>\n<\/ul>\n<h3 id=\"uuid\">UUID<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/satori\/go.uuid\">go.uuid<\/a> - UUID \u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/qichengzx\/seqsvr\">SEQSVR<\/a> - Go + MySQL \u5b9e\u73b0\u7684\u5206\u5e03\u5f0f ID \u751f\u6210\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/google\/uuid\">google\/uuid<\/a> - Google \u5f00\u6e90\u7684 uuid \u5305<\/li>\n<li><a href=\"https:\/\/github.com\/gofrs\/uuid\">gofrs\/uuid<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/bwmarrin\/snowflake\">snowflake<\/a> - Twitter snowflake IDs<\/li>\n<li><a href=\"https:\/\/github.com\/sony\/sonyflake\">sonyflake<\/a> - Sony \u7248\u672c\u7684 Twitter&rsquo;s Snowflake<\/li>\n<li><a href=\"https:\/\/github.com\/oklog\/ulid\">ulid<\/a> - ULID Go \u8bed\u8a00\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/segmentio\/ksuid\">ksuid<\/a> - K-Sortable Globally Unique IDs<\/li>\n<li><a href=\"https:\/\/github.com\/jaevor\/go-nanoid\">go-nanoid<\/a> - NanoID \u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/rs\/xid\">xid<\/a> - \u5168\u5c40\u552f\u4e00 ID \u751f\u6210\u5668<\/li>\n<\/ul>\n<h3 id=\"\u65e5\u5fd7\">\u65e5\u5fd7<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/go-logr\/logr\">logr<\/a> - \u65e5\u5fd7\u5305\u6807\u51c6\u63a5\u53e3<\/li>\n<li><a href=\"https:\/\/github.com\/sirupsen\/logrus\">Logrus<\/a> - \u65e5\u5fd7\u8bb0\u5f55\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/rs\/zerolog\">zerolog<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/uber-go\/zap\">zap<\/a> - Uber \u5f00\u53d1\u7684\u65e5\u5fd7\u8bb0\u5f55\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/cihub\/seelog\">Seelog<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/qiniu\/logkit\">logkit<\/a> - \u4e03\u725b\u5f00\u6e90\u7684\u65e5\u5fd7\u6536\u96c6\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/tsaikd\/gogstash\">gogstash<\/a> - \u7c7b\u4f3c\u4e8e Logstash \u7684\u65e5\u5fd7\u6536\u96c6\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/natefinch\/lumberjack\">lumberjack<\/a> - \u65e5\u5fd7\u6587\u4ef6\u5207\u5272<\/li>\n<li><a href=\"https:\/\/github.com\/lestrrat-go\/file-rotatelogs\">file-rotatelogs<\/a> - \u65e5\u5fd7\u6587\u4ef6\u5207\u5272<\/li>\n<li><a href=\"https:\/\/github.com\/influxdata\/go-syslog\">go-syslog<\/a> - \u6781\u901f Syslog \u89e3\u6790\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/golang\/glog\">glog<\/a><\/li>\n<\/ul>\n<h3 id=\"\u76d1\u63a7\u544a\u8b66\">\u76d1\u63a7\u544a\u8b66<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/open-falcon\/falcon-plus\">OpenFalcon<\/a> - \u5c0f\u7c73\u5f00\u6e90\u7684\u76d1\u63a7\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/prometheus\/prometheus\">Prometheus<\/a> - \u670d\u52a1\u76d1\u63a7\u7cfb\u7edf &amp; \u65f6\u95f4\u5e8f\u5217\u6570\u636e\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/grafana\/grafana\">Grafana<\/a> - \u5206\u6790\u76d1\u89c6\u5e73\u53f0, \u652f\u6301 Graphite, Elasticsearch, OpenTSDB, Prometheus, InfluxDB \u7b49\u6570\u636e\u6e90\n<ul>\n<li><a href=\"https:\/\/github.com\/K-Phoen\/grabana\">grabana<\/a> - \u7528 Go \u4ee3\u7801\u5feb\u901f\u521b\u5efa grafana dashboards<\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/github.com\/jaegertracing\/jaeger\">Jaeger<\/a> - \u5206\u5e03\u5f0f\u8ffd\u8e2a\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/mackerelio\/go-osstat\">go-osstat<\/a> - \u7cfb\u7edf\u6307\u6807\u7edf\u8ba1<\/li>\n<li><a href=\"https:\/\/github.com\/slok\/grafterm\">grafterm<\/a> - Metrics dashboards on terminal<\/li>\n<li><a href=\"https:\/\/github.com\/open-falcon\/mymon\">mymon<\/a> - MySQL \u8fd0\u884c\u76d1\u63a7<\/li>\n<li><a href=\"https:\/\/github.com\/kha7iq\/pingme\">PingMe<\/a> - \u652f\u6301\u591a\u6d88\u606f\u5e73\u53f0\u7684\u670d\u52a1\u53ef\u7528\u6027\u62a5\u8b66\u547d\u4ee4\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/ochinchina\/supervisord\">supervisord<\/a> - Go \u8bed\u8a00\u5b9e\u73b0 Supervisor<\/li>\n<li><a href=\"https:\/\/github.com\/grafana\/tempo\">Grafana Tempo<\/a> - \u5206\u5e03\u5f0f\u8ffd\u8e2a\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/megaease\/easeprobe\">EaseProbe<\/a> - \u670d\u52a1\u63a2\u6d3b\u5de5\u5177\u5e76\u901a\u77e5<\/li>\n<li><a href=\"https:\/\/github.com\/uptrace\/uptrace\">Uptrace<\/a> - APM \u5de5\u5177\uff0c\u652f\u6301 OpenTelemetry \u8ffd\u8e2a\u3001\u6307\u6807\u548c\u65e5\u5fd7<\/li>\n<li><a href=\"https:\/\/github.com\/ccfos\/nightingale\">Nightingale<\/a> - \u6ef4\u6ef4\u57fa\u4e8e OpenFalcon \u5f00\u6e90\u7684\u76d1\u63a7\u7cfb\u7edf<\/li>\n<\/ul>\n<h3 id=\"\u7edf\u8ba1\u5206\u6790\">\u7edf\u8ba1\u5206\u6790<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/usefathom\/fathom\">Fathom<\/a> - Web \u7ad9\u70b9\u7edf\u8ba1<\/li>\n<li><a href=\"https:\/\/github.com\/stripe\/veneur\">Veneur<\/a> - \u5206\u5e03\u5f0f\u5b9e\u65f6\u6570\u636e\u5904\u7406\u7ba1\u9053<\/li>\n<li><a href=\"https:\/\/github.com\/gonum\/gonum\">gonum<\/a> - \u79d1\u5b66\u8ba1\u7b97\u76f8\u5173<\/li>\n<\/ul>\n<h3 id=\"\u5bb9\u5668\u6280\u672f\">\u5bb9\u5668\u6280\u672f<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/moby\/moby\">moby<\/a> - Docker<\/li>\n<li><a href=\"https:\/\/github.com\/docker\/docker-ce\">docker-ce<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/rancher\/rancher\">Rancher<\/a> - \u5168\u6808\u5316\u4f01\u4e1a\u7ea7\u5bb9\u5668\u7ba1\u7406\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/Ullaakut\/Gorsair\">Gorsair<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/skanehira\/docui\">docui<\/a> - TUI Client for Docker<\/li>\n<li><a href=\"https:\/\/github.com\/containers\/libpod\">Podman<\/a> - \u7ba1\u7406\u548c\u8fd0\u884c\u4efb\u4f55\u7b26\u5408 <code>OCI<\/code> \u89c4\u8303\u7684\u5bb9\u5668\u548c\u5bb9\u5668\u955c\u50cf<\/li>\n<li><a href=\"https:\/\/github.com\/containers\/skopeo\">Skopeo<\/a> - \u955c\u50cf\u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/containers\/buildah\">Buildah<\/a> - \u6784\u5efa <code>OCI<\/code> \u5bb9\u5668\u955c\u50cf\u7684\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/pibigstar\/go-docker\">go-docker<\/a> - \u7528 Go \u5b9e\u73b0 Docker \u6838\u5fc3\u529f\u80fd<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/packer\">Packer<\/a> - \u8f7b\u91cf\u7ea7\u7684\u955c\u50cf\u5b9a\u4e49\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/sigstore\/cosign\">cosign<\/a> - \u5bb9\u5668\u7b7e\u540d\u548c\u9a8c\u8bc1<\/li>\n<li><a href=\"https:\/\/github.com\/slimtoolkit\/slim\">SlimToolkit<\/a> - \u68c0\u67e5\u3001\u7f29\u5c0f\u548c\u8c03\u8bd5\u5bb9\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/wagoodman\/dive\">Dive<\/a> - \u7528\u4e8e\u63a2\u7d22 Docker \u955c\u50cf\u548c\u5c42\u5185\u5bb9\u7684\u5de5\u5177<\/li>\n<\/ul>\n<h3 id=\"\u96c6\u7fa4\u7ba1\u7406\">\u96c6\u7fa4\u7ba1\u7406<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/hashicorp\/nomad\">Nomad<\/a> - \u96c6\u7fa4\u7ba1\u7406\u5668\u548c\u8c03\u5ea6\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/openshift\/origin\">OpenShift Origin<\/a> - Red Hat \u5f00\u53d1\u7684\u5bb9\u5668\u5316\u8f6f\u4ef6\u89e3\u51b3\u65b9\u6848<\/li>\n<\/ul>\n<h4 id=\"kubernetes\">Kubernetes<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/kubernetes\/kubernetes\">kubernetes<\/a> - \u5bb9\u5668\u8c03\u5ea6\u7ba1\u7406\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/k0sproject\/k0s\">k0s<\/a> - \u6700\u5c0f\u4f53\u79ef\u7684 k8s \u53d1\u884c\u7248<\/li>\n<li><a href=\"https:\/\/github.com\/fanux\/sealos\">Sealos<\/a> - \u4ee5 Kubernetes \u4e3a\u5185\u6838\u7684\u4e91\u64cd\u4f5c\u7cfb\u7edf\u53d1\u884c\u7248<\/li>\n<li><a href=\"https:\/\/github.com\/kubesphere\/kubeeye\">KubeEye<\/a> - \u901a\u8fc7\u914d\u7f6e\u89c4\u5219\u53d1\u73b0 Kubernetes \u4e0a\u7684\u5404\u79cd\u95ee\u9898<\/li>\n<li><a href=\"https:\/\/github.com\/sealyun\/endpoints-operator\">endpoints-operator<\/a> - K8S\u5185\u90e8\u670d\u52a1\u8bbf\u95ee\u5916\u90e8\u670d\u52a1\u7684\u5177\u5907\u63a2\u6d3b\u529f\u80fd\u76844\u5c42LB<\/li>\n<li><a href=\"https:\/\/github.com\/helm\/helm\">Helm<\/a> - Kubernetes \u5305\u7ba1\u7406\u5668<\/li>\n<\/ul>\n<h3 id=\"\u673a\u5668\u5b66\u4e60\">\u673a\u5668\u5b66\u4e60<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/cdipaolo\/goml\">goml<\/a> - \u673a\u5668\u5b66\u4e60\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/sjwhitworth\/golearn\">GoLearn<\/a> - \u4e00\u4e2a &ldquo;\u5f00\u7bb1\u5373\u7528&rdquo; \u7684\u673a\u5668\u5b66\u4e60\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/chrislusf\/glow\">glow<\/a> - \u6613\u7528\u7684\u5206\u5e03\u5f0f\u8ba1\u7b97\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/hybridgroup\/gobot\">Gobot<\/a> - \u673a\u5668\u4eba\u548c\u7269\u7406\u8ba1\u7b97\u8bed\u8a00\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/olivia-ai\/olivia\">Olivia<\/a> - \u795e\u7ecf\u7f51\u7edc<\/li>\n<li><a href=\"https:\/\/github.com\/esimov\/pigo\">Pico<\/a> - \u57fa\u4e8e\u50cf\u7d20\u5f3a\u5ea6\u6bd4\u8f83\u7684\u7269\u4f53\u68c0\u6d4b\u7eb8\u5f20\u7684\u7eaf Go \u8138\u90e8\u68c0\u6d4b\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/galeone\/tfgo\">tfgo<\/a> - Tensorflow in Go<\/li>\n<li><a href=\"https:\/\/github.com\/WeBankFinTech\/Prophecis\">Prophecis<\/a> - \u5fae\u4f17\u94f6\u884c\u81ea\u7814\u7684\u4e00\u7ad9\u5f0f\u4e91\u539f\u751f\u673a\u5668\u5b66\u4e60\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/autoai-org\/AID\">AID<\/a> - \u673a\u5668\u5b66\u4e60ops\u5e73\u53f0\uff0c\u53d1\u73b0\u3001\u90e8\u7f72\u3001\u4f18\u5316<\/li>\n<li><a href=\"https:\/\/github.com\/sql-machine-learning\/sqlflow\">SQLFlow<\/a> - SQL\u5f15\u64ce+AI\u5f15\u64ce<\/li>\n<\/ul>\n<h3 id=\"\u4eba\u5de5\u667a\u80fd\">\u4eba\u5de5\u667a\u80fd<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/sashabaranov\/go-openai\">go-openai<\/a> - <a href=\"https:\/\/platform.openai.com\">OpenAI API<\/a> Go \u5ba2\u6237\u7aef SDK<\/li>\n<li><a href=\"https:\/\/github.com\/go-skynet\/LocalAI\">LocalAI<\/a> - \u4f4e\u6210\u672c\u7684\u786c\u4ef6\u4e0a\u8fd0\u884c\u6a21\u578b\u8ba1\u7b97\u7684\u672c\u5730\u8ba1\u7b97\u6846\u67b6\uff0c\u652f\u6301\u591a\u79cd\u6a21\u578b\uff0c\u63d0\u4f9b\u517c\u5bb9 OpenAI \u63a5\u53e3\u534f\u8bae\u7684 REST API<\/li>\n<li><a href=\"https:\/\/github.com\/jmorganca\/ollama\">Ollama<\/a> - \u672c\u5730\u8fd0\u884c\u5927\u8bed\u8a00\u6a21\u578b\uff0c\u652f\u6301\u591a\u79cd\u6a21\u578b<\/li>\n<\/ul>\n<h3 id=\"\u7b97\u6cd5\">\u7b97\u6cd5<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/emirpasic\/gods\">GoDS<\/a> - Go \u5b9e\u73b0\u4e86\u591a\u79cd\u6570\u636e\u7ed3\u6784<\/li>\n<li><a href=\"https:\/\/github.com\/lni\/dragonboat\">Dragonboat<\/a> - \u591a\u7ec4 Raft \u5171\u8bc6\u7b97\u6cd5\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/eliben\/raft\">eliben\/raft<\/a> - Raft \u7b97\u6cd5<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/raft\">hashicorp\/raft<\/a> - Raft \u7b97\u6cd5<\/li>\n<li><a href=\"https:\/\/github.com\/nats-io\/graft\">Graft<\/a> - Raft \u7b97\u6cd5<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/golang-lru\">golang-lru<\/a> - LRU \u7b97\u6cd5\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/tinylru\">tinylru<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/finn\">finn<\/a> - Fast <strong>Raft<\/strong> framework using the Redis protocol for Go<\/li>\n<li><a href=\"https:\/\/github.com\/FastFilter\/xorfilter\">xorfilter<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/priyankchheda\/algorithms\">priyankchheda\/algorithms<\/a> - \u5404\u79cd\u7b97\u6cd5\u7684 Go \u8bed\u8a00\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/mmcloughlin\/meow\">meow<\/a> - Meow hash<\/li>\n<li><a href=\"https:\/\/github.com\/rpcxio\/basalt\">basalt<\/a> - \u9ad8\u6027\u80fd\u7684\u5206\u5e03\u5f0f\u7684\u4e13\u95e8\u7a7a\u95f4\u4f18\u5316\u7684 Bitmap \u670d\u52a1, \u675c\u7edd Bloomfilter \u548c CuckooFilter \u7684\u8bef\u5224<\/li>\n<li><a href=\"https:\/\/github.com\/buckket\/go-blurhash\">go-blurhash<\/a> - BlurHash\uff0c\u662f\u6a21\u7cca\u56fe\u7247\u7684\u4e00\u79cd\u54c8\u5e0c\u7b97\u6cd5<\/li>\n<li><a href=\"https:\/\/github.com\/cespare\/xxhash\">xxhash<\/a> - xxHash \u54c8\u5e0c\u7b97\u6cd5\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/multiformats\/go-multihash\">go-multihash<\/a> - \u5404\u79cd Hash \u7b97\u6cd5\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/memberlist\">memberlist<\/a> - \u57fa\u4e8e gossip \u534f\u8bae\u5b9e\u73b0\u7684\u7ba1\u7406\u96c6\u7fa4\u6210\u5458\u548c\u6210\u5458\u5931\u8d25\u68c0\u6d4b\u7684\u5f00\u53d1\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/cenkalti\/backoff\">backoff<\/a> - \u6307\u6570\u9000\u907f\u7b97\u6cd5(Exponential Backoff)<\/li>\n<li><a href=\"https:\/\/github.com\/looplab\/fsm\">FSM<\/a> - \u6709\u9650\u72b6\u6001\u673a<\/li>\n<\/ul>\n<h3 id=\"\u6570\u636e\u7ed3\u6784\">\u6570\u636e\u7ed3\u6784<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/Workiva\/go-datastructures\">go-datastructures<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Donng\/Play-with-Data-Structures\">Play-with-Data-Structures<\/a> - \u300c\u73a9\u8f6c\u6570\u636e\u7ed3\u6784\u300d\u8bfe\u7a0b\u7684 Go \u8bed\u8a00\u5b9e\u73b0\u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/cornelk\/hashmap\">HashMap<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dchest\/siphash\">SipHash<\/a> - SipHash-2-4<\/li>\n<li><a href=\"https:\/\/github.com\/grailbio\/bigslice\">Bigslice<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/deckarep\/golang-set\">golang-set<\/a> - The missing set collection<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/rbang\">rbang<\/a> - R!tree \u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/dhconnelly\/rtreego\">rtreego<\/a> - R-tree<\/li>\n<li><a href=\"https:\/\/github.com\/google\/btree\">google\/btree<\/a> - B-Tree<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/tinybtree\">tinybtree<\/a> - B-tree<\/li>\n<li><a href=\"https:\/\/github.com\/rocketlaunchr\/dataframe-go\">dataframe-go<\/a> - \u7528\u4e8e\u6570\u636e\u7edf\u8ba1\u548c\u64cd\u4f5c\u7684\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/scylladb\/go-set\">go-set<\/a> - \u96c6\u5408\u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/elliotchance\/orderedmap\">orderedmap<\/a> - \u6709\u5e8f\u5b57\u5178<\/li>\n<li><a href=\"https:\/\/github.com\/dghubble\/trie\">trie<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/openacid\/slim\">Slim<\/a> - \u7a7a\u95f4\u9ad8\u5229\u7528\u7387\u7684\u6570\u636e\u7ed3\u6784<\/li>\n<li><a href=\"https:\/\/github.com\/bits-and-blooms\/bitset\">bitset<\/a> - \u4f4d\u96c6\u5408\u53ca\u5176\u64cd\u4f5c<\/li>\n<li><a href=\"https:\/\/github.com\/bits-and-blooms\/bloom\">bloom<\/a> - Bloom filters<\/li>\n<li><a href=\"https:\/\/github.com\/RoaringBitmap\/roaring\">roaring<\/a> - \u538b\u7f29\u4f4d\u56fe<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/go-immutable-radix\">go-immutable-radix<\/a> - Radix \u6811<\/li>\n<\/ul>\n<h3 id=\"\u4f9d\u8d56\u6ce8\u5165\">\u4f9d\u8d56\u6ce8\u5165<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/Just-maple\/go-autowire\">go-autowire<\/a> - \u4f7f\u7528\u6ce8\u89e3\u81ea\u52a8\u751f\u6210 <a href=\"https:\/\/github.com\/google\/wire\">wire<\/a> - \u4f9d\u8d56\u6ce8\u5165<\/li>\n<li><a href=\"https:\/\/github.com\/uber-go\/dig\">dig<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/uber-go\/fx\">Fx<\/a><\/li>\n<\/ul>\n<h3 id=\"json\">JSON<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/tidwall\/gjson\">GJSON<\/a> - JSON \u89e3\u91ca\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/sjson\">SJSON<\/a> - JSON \u4fee\u6539\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/valyala\/fastjson\">fastjson<\/a> - fast JSON parser and validator for Go<\/li>\n<li><a href=\"https:\/\/github.com\/buger\/jsonparser\">jsonparser<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/pquerna\/ffjson\">ffjson<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/json-iterator\/go\">json-iterator<\/a> - \u6ef4\u6ef4\u5f00\u6e90\u7684 JSON \u89e3\u6790\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/thedevsaddam\/gojsonq\">gojsonq<\/a> - JSON\/YAML\/XML\/CSV \u7b49\u6570\u636e\u67e5\u8be2<\/li>\n<li><a href=\"https:\/\/github.com\/mailru\/easyjson\">easyjson<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/akshaybharambe14\/go-jsonc\">go-jsonc<\/a> - \u5c06\u5e26\u6ce8\u91ca\u7684 JSON \u8f6c\u4e3a\u65e0\u6ce8\u91ca\u7684<\/li>\n<li><a href=\"https:\/\/github.com\/ecoshub\/jin\">jin<\/a> - JSON \u64cd\u4f5c\u5de5\u5177\u5305\uff0c\u540c\u65f6\u5177\u6709\u6807\u51c6\u5e93\u548c\u7c7b\u4f3c <code>tidwall\/gjson<\/code> \u548c <code>tidwall\/sjson<\/code> \u7684\u529f\u80fd<\/li>\n<li><a href=\"https:\/\/github.com\/tailscale\/hujson\">hujson<\/a> - \u652f\u6301\u6ce8\u91ca\u7684 JSON \u89e3\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/pkg\/json\">pkg\/json<\/a> - JSON Decoder<\/li>\n<li><a href=\"https:\/\/github.com\/TylerBrock\/colorjson\">ColorJSON<\/a> - \u7ec8\u7aef\u4e2d\u6253\u5370\u5f69\u8272 JSON<\/li>\n<li><a href=\"https:\/\/github.com\/simeji\/jid\">jid<\/a> - JSON \u6570\u636e\u89e3\u6790\u8bfb\u53d6\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/tidwall\/jsonc\">jsonc<\/a> - \u652f\u6301\u6ce8\u91ca\u4e0e\u9017\u53f7<\/li>\n<li><a href=\"https:\/\/github.com\/bytedance\/sonic\">sonic<\/a> - \u5b57\u8282\u8df3\u52a8\u5f00\u6e90\u7684 JSON \u89e3\u6790\u5668&amp;\u4fee\u6539\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/goccy\/go-json\">go-json<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/antchfx\/jsonquery\">jsonquery<\/a> - XPath \u8bed\u6cd5\u67e5\u8be2 JSON<\/li>\n<li><a href=\"https:\/\/github.com\/antonmedv\/fx\">fx<\/a> - \u547d\u4ee4\u884c JSON \u663e\u793a<\/li>\n<\/ul>\n<h3 id=\"\u4f9d\u8d56\u7ba1\u7406\">\u4f9d\u8d56\u7ba1\u7406<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/goproxyio\/goproxy\"><strong>goproxy.io<\/strong><\/a> - <code>GOPROXY<\/code> \u4ee3\u7406\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/goproxy\/goproxy.cn\">goproxy.cn<\/a> - \u66f4\u9002\u5408\u56fd\u5185\u7528\u6237\u7684\u4ee3\u7406\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/gpmgo\/gopm\">Gopm<\/a> - Go \u5305\u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/kardianos\/govendor\">govendor<\/a> - Vendor \u5305\u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/gom\">gom<\/a> - \u5305\u7248\u672c\u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/rvflash\/goup\">rvflash\/goup<\/a> - \u68c0\u67e5\u5305\u7248\u672c\u662f\u5426\u6709\u66f4\u65b0<\/li>\n<li><a href=\"https:\/\/github.com\/owenthereal\/goup\">owenthereal\/goup<\/a> - Go \u591a\u7248\u672c\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/gomods\/athens\">Athens<\/a> - <code>GOPROXY<\/code> \u4ee3\u7406\u670d\u52a1<\/li>\n<\/ul>\n<h3 id=\"\u5fae\u670d\u52a1\">\u5fae\u670d\u52a1<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/istio\/istio\">Istio<\/a> [<a href=\"https:\/\/preliminary.istio.io\/zh\/docs\/\">\u4e2d\u6587\u6587\u6863<\/a>] - \u5927\u578b\u5fae\u670d\u52a1\u7cfb\u7edf\u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/goadesign\/goa\">goa<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/micro\/micro\">Micro<\/a> - \u5fae\u670d\u52a1\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/micro\/go-micro\">Go Micro<\/a> - \u5fae\u670d\u52a1\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/go-kit\/kit\">Go kit<\/a> - Go \u5fae\u670d\u52a1\u5de5\u5177\u96c6<\/li>\n<li><a href=\"https:\/\/github.com\/kujtimiihoxha\/kit\">GoKit CLI<\/a> - Go kit \u811a\u624b\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/dolab\/gogo\">gogo<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/go-chassis\/go-chassis\">go-chassis<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/koding\/kite\">Kite<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/bilibili\/kratos\">Kratos<\/a> - B\u7ad9\u5f00\u6e90\u7684\u5fae\u670d\u52a1\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/temporalio\/temporal\">Temporal<\/a> - \u5fae\u670d\u52a1\u7f16\u6392\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/serf\">Serf<\/a> - \u670d\u52a1\u7f16\u6392\u7ba1\u7406\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/open-policy-agent\/opa\">Open Policy Agent<\/a> - \u901a\u7528\u7b56\u7565\u5f15\u64ce\uff0cCNCF \u5b75\u5316\u9879\u76ee<\/li>\n<li><a href=\"https:\/\/github.com\/nytimes\/gizmo\">gizmo<\/a> - \u5fae\u670d\u52a1\u5de5\u5177\u96c6<\/li>\n<li><a href=\"https:\/\/github.com\/mosn\/mosn\">MOSN<\/a> - \u7528\u4e8e\u8fb9\u7f18\u548c\u670d\u52a1\u7f51\u683c\u7684\u4e91\u539f\u751f\u7f51\u7edc\u6570\u636e\u5e73\u9762<\/li>\n<li><a href=\"https:\/\/github.com\/erda-project\/erda\">Erda<\/a> - \u4e3a\u4f01\u4e1a\u63d0\u4f9b DevOps\u3001\u5fae\u670d\u52a1\u6cbb\u7406\u3001\u591a\u4e91\u7ba1\u7406\u7684 PaaS<\/li>\n<li><a href=\"https:\/\/github.com\/ServiceWeaver\/weaver\">Service Weaver<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/consul\">Consul<\/a> - \u670d\u52a1\u53d1\u73b0\u3001\u914d\u7f6e\u7ba1\u7406\u4e2d\u5fc3\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/traefik\/mesh\">Traefik Mesh<\/a> - \u7b80\u5355\u7684\u670d\u52a1\u7f51\u683c<\/li>\n<li><a href=\"https:\/\/github.com\/zeromicro\/go-zero\">go-zero<\/a> - \u96c6\u6210\u4e86\u5404\u79cd\u5de5\u7a0b\u5b9e\u8df5\u7684 Web \u548c RPC \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/douyu\/jupiter\">Jupiter<\/a> - \u5fae\u670d\u52a1\u6cbb\u7406\u6846\u67b6\uff0c\u63d0\u4f9b\u4e30\u5bcc\u7684\u540e\u53f0\u529f\u80fd\uff0c\u7ba1\u7406\u5e94\u7528\u7684\u8d44\u6e90\u3001\u914d\u7f6e\uff0c\u5e94\u7528\u7684\u6027\u80fd\u3001\u914d\u7f6e\u7b49\u53ef\u89c6\u5316<\/li>\n<li><a href=\"https:\/\/github.com\/douyu\/juno\">Juno<\/a> - \u5206\u5e03\u5f0f\u670d\u52a1\u7ba1\u7406\u7cfb\u7edf\uff0c\u96c6\u6210\u4e86\u914d\u7f6e\u3001\u76d1\u63a7\u3001\u6d4b\u8bd5\u3001\u65e5\u5fd7\u7b49\u529f\u80fd<\/li>\n<\/ul>\n<h3 id=\"serverless\">Serverless<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/openfaas\/faas\">OpenFaaS<\/a> - Serverless Functions Made Simple(\u529f\u80fd\u670d\u52a1\u5316\u7684 FaaS \u6846\u67b6)<\/li>\n<li><a href=\"https:\/\/github.com\/openfaas\/faasd\">faasd<\/a> - \u8f7b\u91cf\u7ea7 FaaS \u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/fnproject\/fn\">fn<\/a> - \u4e8b\u4ef6\u9a71\u52a8\u7684 FaaS<\/li>\n<li><a href=\"https:\/\/github.com\/projectriff\/riff\">riff<\/a> - \u57fa\u4e8e Kubernetes \u7684 FaaS<\/li>\n<li><a href=\"https:\/\/github.com\/nuclio\/nuclio\">Nuclio<\/a> - \u5b9e\u65f6\u4e8b\u4ef6\u4e0e\u6570\u636e\u7684 Serverless \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/tibcosoftware\/flogo\">Flogo<\/a> - \u4e8b\u4ef6\u9a71\u52a8\u7684 Serverless \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/dapr\/dapr\">Dapr<\/a> - \u5fae\u8f6f\u5f00\u6e90\u7684\u4e91\u548c\u8fb9\u7f18\u8ba1\u7b97\u7684\u5fae\u670d\u52a1\u6784\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/kubeless\/kubeless\">kubeless<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/fission\/fission\">Fission<\/a> - \u57fa\u4e8e Kubernetes \u7684 Serverless<\/li>\n<li><a href=\"https:\/\/github.com\/pulumi\/pulumi\">pulumi<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/knative\/serving\">Knative<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/metrue\/fx\">fx<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/iron-io\/functions\">IronFunctions<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/schollz\/faas\">schollz\/faas<\/a> - \u8ba9\u4efb\u4f55\u5305\u7684\u51fd\u6570\u53d8\u6210\u4e00\u4e2a HTTP \u63a5\u53e3<\/li>\n<li><a href=\"https:\/\/github.com\/vanus-labs\/vanus\">Vanus<\/a> - \u65e0\u670d\u52a1\u4e8b\u4ef6\u6d41\u5904\u7406\u7cfb\u7edf<\/li>\n<\/ul>\n<h3 id=\"devops\">devops<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/nektos\/act\">act<\/a> - \u672c\u5730\u8fd0\u884c <a href=\"https:\/\/developer.github.com\/actions\/\">GitHub Actions<\/a><\/li>\n<\/ul>\n<h3 id=\"\u6301\u7eed\u96c6\u6210\u90e8\u7f72\">\u6301\u7eed\u96c6\u6210\/\u90e8\u7f72<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/ovh\/cds\">CDS<\/a> - \u6301\u7eed\u96c6\u6210\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/linclin\/gopub\">gopub<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/bzppx\/bzppx-codepub\">CodePub<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/dreamans\/syncd\">syncd<\/a> - \u4ee3\u7801\u90e8\u7f72\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/drone\/drone\">Drone<\/a> - \u57fa\u4e8e Docker \u7684\u6301\u7eed\u53d1\u5e03\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/caicloud\/cyclone\">Cyclone<\/a> - \u6301\u7eed\u96c6\u6210&amp;\u53d1\u5e03\u5e73\u53f0<\/li>\n<li><a href=\"https:\/\/github.com\/k1LoW\/tbls\">tbls<\/a> - \u7528\u4e8e\u8bb0\u5f55\u6570\u636e\u5e93\u6587\u6863\u7684 CI \u53cb\u597d\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/woodpecker-ci\/woodpecker\">Woodpecker<\/a> - Fork \u81ea Drone<\/li>\n<li><a href=\"https:\/\/github.com\/dagger\/dagger\">Dagger<\/a> - \u57fa\u4e8e\u5bb9\u5668\u7684 CI\/CD \u5de5\u5177<\/li>\n<\/ul>\n<h3 id=\"git\">Git<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/gogs\/gogs\">gogs<\/a> - \u7c7b\u4f3c\u4e8e GitLab \u7684 Git \u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/go-gitea\/gitea\">Gitea<\/a> - \u7531 gogs \u5206\u53c9\u51fa\u7684 Git \u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/go-git\/go-git\">go-git<\/a> - Go \u5b9e\u73b0\u7684 Git \u64cd\u4f5c<\/li>\n<li><a href=\"https:\/\/github.com\/isacikgoz\/gitin\">gitin<\/a> - commit\/branch\/status explorer for git<\/li>\n<li><a href=\"https:\/\/github.com\/github\/hub\">hub<\/a> - GitHub \u547d\u4ee4\u884c\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/muesli\/gitomatic\">git-o-matic<\/a> - \u4e00\u4e2a\u76d1\u63a7 Git \u4ed3\u5e93\u53d8\u5316\u548c\u81ea\u52a8 pull\/push \u7684\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/src-d\/gitbase\">gitbase<\/a> - SQL \u7684\u65b9\u5f0f\u67e5\u8be2 Git \u65e5\u5fd7<\/li>\n<li><a href=\"https:\/\/github.com\/git-chglog\/git-chglog\">git-chglog<\/a> - <code>CHANGELOG<\/code> \u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/goreleaser\/chglog\">chglog<\/a> - <code>CHANGELOG<\/code> \u7ba1\u7406\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/ryo-ma\/lazyhub\">lazyhub<\/a> - GitHub \u7684\u7ec8\u7aef UI \u5ba2\u6237\u7aef<\/li>\n<li><a href=\"https:\/\/github.com\/posener\/goaction\">goaction<\/a> - \u5728 Go \u4e2d\u7f16\u5199 GitHub Action<\/li>\n<li><a href=\"https:\/\/github.com\/chriswalz\/bit\">bit<\/a> - Git \u547d\u4ee4\u589e\u5f3a\u7248\uff0c\u652f\u6301\u6587\u4ef6\u548c\u5206\u652f\u540d\u79f0\u81ea\u52a8\u5b8c\u6210\u3001\u547d\u4ee4\u548c\u6807\u5fd7\u5efa\u8bae<\/li>\n<li><a href=\"https:\/\/github.com\/google\/go-github\">go-github<\/a> - GitHub API \u64cd\u4f5c\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/augmentable-dev\/askgit\">askgit<\/a> - \u901a\u8fc7 SQL \u8bbf\u95ee Git \u4ed3\u5e93\u4fe1\u606f<\/li>\n<li><a href=\"https:\/\/github.com\/alaingilbert\/git2graph\">git2graph<\/a> - \u6839\u636e Git \u4ed3\u5e93\u63d0\u4ea4\u8bb0\u5f55\u751f\u6210\u7ed3\u6784\u56fe<\/li>\n<li><a href=\"https:\/\/github.com\/jesseduffield\/lazygit\">lazygit<\/a> - Git \u7ec8\u7aef UI<\/li>\n<li><a href=\"https:\/\/github.com\/dlvhdr\/gh-dash\">gh-dash<\/a> - GitHub CLI\uff08<code>gh<\/code>\uff09\u6f02\u4eae\u7ec8\u7aef\u9762\u677f<\/li>\n<li><a href=\"https:\/\/github.com\/charmbracelet\/soft-serve\">Soft Serve<\/a> - \u547d\u4ee4\u884c\u5f0f\u81ea\u6258\u7ba1 Git \u670d\u52a1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/git-lfs\/git-lfs\">Git LFS<\/a> - \u5904\u7406\u5927\u6587\u4ef6\u7684 Git \u6269\u5c55<\/li>\n<\/ul>\n<h3 id=\"\u9650\u6d41\u5668\">\u9650\u6d41\u5668<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/didip\/tollbooth\"><strong>Tollbooth<\/strong><\/a> - Simple middleware to rate-limit HTTP requests<\/li>\n<li><a href=\"https:\/\/github.com\/juju\/ratelimit\">ratelimit<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/bsm\/ratelimit\">RateLimit<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/beefsack\/go-rate\">go-rate<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/cep21\/circuit\">Circuit<\/a> - \u7194\u65ad\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/uber-go\/ratelimit\">uber-go\/ratelimit<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/sentinel-group\/sentinel-golang\">Sentinel<\/a> - \u963f\u91cc\u5df4\u5df4\u5f00\u6e90\u7684\u9762\u5411\u5206\u5e03\u5f0f\u670d\u52a1\u67b6\u6784\u7684\u6d41\u91cf\u63a7\u5236\u7ec4\u4ef6 Go \u8bed\u8a00\u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/1pkg\/gohalt\">gohalt<\/a> - \u9650\u6d41<\/li>\n<li><a href=\"https:\/\/github.com\/sony\/gobreaker\">gobreaker<\/a> - \u7194\u65ad\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/ulule\/limiter\">ulule\/limiter<\/a><\/li>\n<\/ul>\n<h3 id=\"\u7f16\u8bd1\u5668\">\u7f16\u8bd1\u5668<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/tinygo-org\/tinygo\">TinyGo<\/a> - \u4e00\u4e2a\u9002\u7528\u4e8e\u5fae\u63a7\u5236\u5668\u3001WebAssembly \u548c\u547d\u4ee4\u884c\u5de5\u5177\u7684 Go \u7f16\u8bd1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/DQNEO\/minigo\">minigo<\/a> - A Go compiler from scratch<\/li>\n<li><a href=\"https:\/\/github.com\/llir\/llvm\">llir\/llvm<\/a> - LLVM \u7f16\u8bd1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/bspaans\/jit-compiler\">jit-compiler<\/a> - <code>JIT<\/code> \u7f16\u8bd1\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/goplus\/gop\">Go+<\/a> - \u4e03\u725b\u4e91\u5f00\u6e90\u9762\u5411\u6570\u636e\u79d1\u5b66\u7684\u8bed\u8a00\uff0c\u5b8c\u5168\u517c\u5bb9Go\u8bed\u8a00<\/li>\n<\/ul>\n<h3 id=\"\u89e3\u91ca\u5668\">\u89e3\u91ca\u5668<\/h3>\n<h4 id=\"\u8bed\u8a00\u89e3\u91ca\u5668\">\u8bed\u8a00\u89e3\u91ca\u5668<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/alecthomas\/participle\"><strong>participle<\/strong><\/a> - \u901a\u7528\u7684\u81ea\u5b9a\u4e49\u8bed\u6cd5\u89e3\u6790\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/yuin\/gopher-lua\">GopherLua<\/a> - VM and compiler for Lua in Go<\/li>\n<li><a href=\"https:\/\/github.com\/Shopify\/go-lua\">go-lua<\/a> - A Lua VM in pure Go<\/li>\n<li><a href=\"https:\/\/github.com\/milochristiansen\/lua\">DCLua<\/a> - Go Lua Compiler and VM<\/li>\n<li><a href=\"https:\/\/github.com\/robertkrimen\/otto\">otto<\/a> - JavaScript \u89e3\u91ca\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/dop251\/goja\">goja<\/a> - ECMAScript 5.1(+) \u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/rogchap\/v8go\">v8go<\/a> - Execute JavaScript from Go<\/li>\n<li><a href=\"https:\/\/github.com\/go-python\/gpython\">gpython<\/a> - Python Interpreter on Go<\/li>\n<li><a href=\"https:\/\/github.com\/google\/grumpy\">Grumpy<\/a> - \u8f6c\u6362 Python \u4e3a Go \u4ee3\u7801\uff0c\u8c37\u6b4c\u5f00\u6e90<\/li>\n<li><a href=\"https:\/\/github.com\/google\/starlark-go\">starlark-go<\/a> - Starlark in Go<\/li>\n<li><a href=\"https:\/\/github.com\/mmcloughlin\/avo\">avo<\/a> - x86 \u6c47\u7f16\u7a0b\u5e8f\u6784\u5efa\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/go-interpreter\/wagon\">wagon<\/a> - WebAssembly \u89e3\u91ca\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/gopherjs\/gopherjs\">GopherJS<\/a> - \u628a Go \u4ee3\u7801\u7f16\u8bd1\u6210 JavaScript \u4ee3\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/containous\/yaegi\">Yaegi<\/a> - Go \u8bed\u8a00\u89e3\u91ca\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/magiconair\/properties\">properties<\/a> - Java properties scanner for Go<\/li>\n<li><a href=\"https:\/\/github.com\/zxh0\/jvm.go\">jvm.go<\/a> - JVM<\/li>\n<li><a href=\"https:\/\/github.com\/skx\/gobasic\">gobasic<\/a> - A BASIC interpreter written in golang<\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/golisp\">golisp<\/a> - <code>Lisp<\/code> \u89e3\u91ca\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/dave\/dst\">dst<\/a> - Go Decorated Syntax Tree<\/li>\n<li><a href=\"https:\/\/github.com\/mvdan\/sh\">mvdan\/sh<\/a> - Shell \u89e3\u6790\u3001\u683c\u5f0f\u5316\u3001\u63a5\u53e3<\/li>\n<li><a href=\"https:\/\/github.com\/tdewolff\/parse\">tdewolff\/parse<\/a> - \u901a\u7528\u8bcd\u6cd5\u5206\u6790\u5668 Lexer\uff0c\u5e76\u5185\u7f6e\u652f\u6301\u89e3\u6790 HTML\/CSS\/JSON\/XML\/JS\/SVG \u8bed\u6cd5<\/li>\n<li><a href=\"https:\/\/github.com\/candid82\/joker\">Joker<\/a> - Clojure<\/li>\n<\/ul>\n<h4 id=\"php\">PHP<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/z7zmey\/php-parser\">z7zmey\/php-parser<\/a> - PHP AST \u8bed\u6cd5\u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/deuill\/go-php\">deuill\/go-php<\/a> - PHP bindings for Go<\/li>\n<li><a href=\"https:\/\/github.com\/spiral\/goridge\">goridge<\/a> - High-performance PHP-to-Golang IPC bridge<\/li>\n<li><a href=\"https:\/\/github.com\/spiral\/roadrunner\">RoadRunner<\/a> - \u9ad8\u6027\u80fdPHP\u5e94\u7528\u670d\u52a1\u5668\uff0c\u652f\u6301\u8d1f\u8f7d\u5747\u8861\u53ca\u8fdb\u7a0b\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/VKCOM\/php-parser\">VKCOM\/php-parse<\/a> - PHP AST \u8bed\u6cd5\u89e3\u6790<\/li>\n<\/ul>\n<h4 id=\"\u81ea\u5b9a\u4e49\u89e3\u91ca\u5668\">\u81ea\u5b9a\u4e49\u89e3\u91ca\u5668<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/cuelang\/cue\">CUE<\/a> - Configure Unify Execute(Validate and define text-based and dynamic configuration)<\/li>\n<li><a href=\"https:\/\/github.com\/google\/cel-go\">cel-go<\/a> - Common Expression Language(CEL \u7684 Go \u5b9e\u73b0)<\/li>\n<li><a href=\"https:\/\/github.com\/dengsgo\/math-engine\">Math-Engine<\/a> - \u4f7f\u7528 Go \u5b9e\u73b0\u7684\u6570\u5b66\u8868\u8fbe\u5f0f\u89e3\u6790\u8ba1\u7b97\u5f15\u64ce\u5e93\uff0c\u5b66\u4e60\u8bed\u6cd5\u89e3\u6790\u5f88\u9002\u7528<\/li>\n<li><a href=\"https:\/\/github.com\/PaesslerAG\/gval\">Gval<\/a> - \u8868\u8fbe\u5f0f\u8ba1\u7b97<\/li>\n<li><a href=\"https:\/\/github.com\/vighneshq\/expression-parsing\">expression-parsing<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/svstanev\/goexp\">goexp<\/a> - Recursive descent expression parser in Go<\/li>\n<li><a href=\"https:\/\/github.com\/helloyi\/goastch\">goastch<\/a> - Go AST \u8bed\u6cd5\u89e3\u6790<\/li>\n<li><a href=\"https:\/\/github.com\/cristiandima\/tdop\">tdop<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/hwch\/swallow\">swallow<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/anko\">Anko<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/antonmedv\/expr\">Expr<\/a> - \u7f16\u8bd1&amp;\u6267\u884c\u5b57\u7b26\u4e32\u4e2d\u7684\u8868\u8fbe\u5f0f<\/li>\n<li><a href=\"https:\/\/github.com\/d5\/tengo\">Tengo<\/a> - \u7528 Go \u7f16\u5199\u7684\u811a\u672c\u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/vlang\/v\">V<\/a> - Go \u7f16\u5199\u7684\u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/kumarUjjawal\/bison\">kumarUjjawal\/bison<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/skx\/monkey\">Monkey<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Knetic\/govaluate\">govaluate<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/MauriceGit\/compiler\">Compiler<\/a> - \u5c06\u81ea\u5b9a\u4e49\u8bed\u6cd5\u4ee3\u7801\u7f16\u8bd1\u6210 X86-64 Assembly<\/li>\n<li><a href=\"https:\/\/github.com\/elves\/elvish\">elvish<\/a> - \u4ea4\u4e92\u5f0f Shell \u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/araddon\/qlbridge\">QLBridge<\/a> - Go SQL Runtime Engine<\/li>\n<li><a href=\"https:\/\/github.com\/caibirdme\/yql\">YQL<\/a> - SQL WHERE \u98ce\u683c\u7684\u89c4\u5219\u5f15\u64ce<\/li>\n<li><a href=\"https:\/\/github.com\/influxdata\/flux\">Flux<\/a> - InfluxDB \u6570\u636e\u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/shockerli\/spiker\">Spiker<\/a> - Go \u7f16\u5199\u7684\u7b80\u5355\u89c4\u5219\u8868\u8fbe\u5f0f\u6267\u884c\u5668\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u51fd\u6570\u548c\u6d41\u7a0b\u63a7\u5236\uff0c\u9002\u7528\u4e8e\u4e1a\u52a1\u89c4\u5219\u590d\u6742\u7684\u573a\u666f<\/li>\n<li><a href=\"https:\/\/github.com\/goccmack\/gocc\">gocc<\/a> - \u89e3\u6790\u5668\u751f\u6210\u5668\uff0c\u53ef\u4ee5\u5c06\u6307\u5b9a\u7684\u6587\u6cd5\u8f6c\u6362\u4e3a Go \u8bed\u8a00\u7684\u89e3\u6790\u5668\u7a0b\u5e8f\u4ee3\u7801\uff0c\u7528\u4e8e\u7f16\u8bd1\u548c\u89e3\u6790\u7279\u5b9a\u7c7b\u578b\u7684\u6e90\u4ee3\u7801<\/li>\n<\/ul>\n<h3 id=\"\u4ee3\u7801\u751f\u6210-1\">\u4ee3\u7801\u751f\u6210<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/dave\/jennifer\">jennifer<\/a> - Go \u4ee3\u7801\u751f\u6210<\/li>\n<li><a href=\"https:\/\/github.com\/vburenin\/ifacemaker\">ifacemaker<\/a> - \u6839\u636e\u7ed3\u6784\u4f53\u65b9\u6cd5\u751f\u6210\u63a5\u53e3<\/li>\n<li><a href=\"https:\/\/github.com\/Xuanwo\/gg\">gg<\/a> - Go \u4ee3\u7801\u751f\u6210<\/li>\n<\/ul>\n<h3 id=\"\u7f16\u8f91\u5668\">\u7f16\u8f91\u5668<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/zyedidia\/micro\">micro<\/a> - \u57fa\u4e8e\u7ec8\u7aef\u7684\u7f16\u8f91\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/sourcegraph\/sourcegraph\">sourcegraph<\/a> - \u4ee3\u7801\u641c\u7d22&amp;\u5bfc\u822a<\/li>\n<\/ul>\n<h3 id=\"\u8fd0\u884c\u5668\">\u8fd0\u884c\u5668<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/motemen\/gore\">gore<\/a> - \u5728\u7ebf\u8fd0\u884c Go \u4ee3\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/netgusto\/nodebook\">nodebook<\/a> - \u5728\u7ebf\u8fd0\u884c\u591a\u79cd\u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/d4l3k\/go-pry\">go-pry<\/a> - \u50cf Python\u3001R\u3001PHP \u7b49\u5728\u7ec8\u7aef\u4ea4\u4e92\u5f0f\u8f93\u5165\u4e0e\u8fd0\u884c Go \u4ee3\u7801<\/li>\n<\/ul>\n<h3 id=\"\u67e5\u8be2\u8bed\u8a00\">\u67e5\u8be2\u8bed\u8a00<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/graphql-go\/graphql\">graphql<\/a> - Go \u5b9e\u73b0\u7684 GraphQL<\/li>\n<li><a href=\"https:\/\/github.com\/graph-gophers\/graphql-go\">graphql-go<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/gqlengine\/gqlengine\">GQLEngine<\/a> - \u57fa\u4e8e graphql-go \u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/a8m\/rql\">RQL<\/a> - REST \u8d44\u6e90\u67e5\u8be2\u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/samsarahq\/thunder\">Thunder<\/a> - GraphQL \u670d\u52a1\u6784\u5efa\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/99designs\/gqlgen\">gqlgen<\/a> - \u6784\u5efa GraphQL \u670d\u52a1\u5668\u7684\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/dosco\/super-graph\">super-graph<\/a> - \u65e0\u9700\u7f16\u5199\u4ee3\u7801\u5373\u53ef\u5728 Go \u9879\u76ee\u4e2d\u6784\u5efa\u590d\u6742\u7684 GraphQL API<\/li>\n<\/ul>\n<h3 id=\"\u6e38\u620f\u76f8\u5173\">\u6e38\u620f\u76f8\u5173<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/lonng\/nano\">Nano<\/a> - \u6e38\u620f\u5f00\u53d1\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/name5566\/leaf\">Leaf<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Cyinx\/einx\">einx<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/giongto35\/cloud-game\">CloudRetro<\/a> - \u6e38\u620f\u4e91\u670d\u52a1\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/g3n\/engine\">G3N<\/a> - Go 3D Game Engine<\/li>\n<li><a href=\"https:\/\/github.com\/hajimehoshi\/ebiten\">Ebiten<\/a> - 2D \u6e38\u620f\u5e93<\/li>\n<\/ul>\n<h3 id=\"\u684c\u9762\u5f00\u53d1\">\u684c\u9762\u5f00\u53d1<\/h3>\n<h4 id=\"gui\">GUI<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/zserge\/lorca\">Lorca<\/a> - \u7528 Go \u7f16\u5199 HTML5 \u684c\u9762\u7a0b\u5e8f\uff0c\u4f9d\u8d56 Chrome \u8fdb\u884c UI \u6e32\u67d3\uff0c\u4f46\u5374\u4e0d\u628a Chrome \u6253\u5305\u5230\u5e94\u7528\u4e2d<\/li>\n<li><a href=\"https:\/\/github.com\/zserge\/webview\">webview<\/a> - \u7528 Go\/C\/C++ \u6784\u5efa\u8de8\u5e73\u53f0\u7684\u684c\u9762\u8f6f\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/lxn\/walk\">walk<\/a> - Windows GUI toolkit<\/li>\n<li><a href=\"https:\/\/github.com\/mattn\/go-gtk\">go-gtk<\/a> - Go bindings for GTK<\/li>\n<li><a href=\"https:\/\/github.com\/andlabs\/ui\">andlabs\/ui<\/a> - Platform-native GUI library for Go<\/li>\n<li><a href=\"https:\/\/github.com\/fyne-io\/fyne\">fyne<\/a> - Material Design \u98ce\u683c\u7684 GUI<\/li>\n<li><a href=\"https:\/\/github.com\/go-gl\/gl\">go-gl<\/a> - Go bindings for OpenGL (generated via glow)<\/li>\n<li><a href=\"https:\/\/github.com\/therecipe\/qt\">therecipe\/qt<\/a> - \u57fa\u4e8e Qt \u7684\u8de8\u5168\u5e73\u53f0 UI \u5305<\/li>\n<li><a href=\"https:\/\/github.com\/AllenDang\/giu\">giu<\/a> - \u57fa\u4e8e <a href=\"https:\/\/github.com\/ocornut\/imgui\">Dear ImGui<\/a> \u7684\u8de8\u5e73\u53f0 GUI \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/maxence-charriere\/go-app\">go-app<\/a> - \u4e00\u4e2a WebAssembly \u6846\u67b6\uff0c\u7528\u4e8e\u4f7f\u7528 Go\uff0cHTML \u548c CSS \u6784\u5efa GUI \u5e94\u7528<\/li>\n<li><a href=\"https:\/\/github.com\/wailsapp\/wails\">wails<\/a> - \u4f7f\u7528 Go \u548c Web \u6280\u672f\u521b\u5efa\u684c\u9762\u5e94\u7528\u7a0b\u5e8f<\/li>\n<li><a href=\"https:\/\/github.com\/chromedp\/chromedp\">chromedp<\/a> - \u7eaf Go \u8bed\u8a00\u5b9e\u73b0\u7684\u9a71\u52a8\u6d4f\u89c8\u5668\u7684 Chrome DevTools Protocol\uff0c\u53ef\u7528\u4e8e\u722c\u866b\u3001\u53cd\u722c\u866b\u3001\u6d4b\u8bd5\u7b49\u573a\u666f<\/li>\n<li><a href=\"https:\/\/github.com\/go-rod\/rod\">Rod<\/a> - \u4e00\u4e2a\u4e3a\u7b80\u5316\u81ea\u52a8\u5316\u548c\u722c\u866b\u8bbe\u8ba1\u7684 devtools driver\uff0c\u5229\u7528\u6d4f\u89c8\u5668\u7684 devtools \u53ef\u7f16\u7a0b\u63a5\u53e3\u6765\u64cd\u63a7\u6d4f\u89c8\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/asticode\/go-astilectron\">go-astilectron<\/a> - \u57fa\u4e8e Electron \u7684\u8de8\u5e73\u53f0\u5f00\u53d1<\/li>\n<li><a href=\"https:\/\/github.com\/gioui\/gio\">Gio<\/a> - \u8de8\u5e73\u53f0 UI \u6846\u67b6\uff0c\u652f\u6301\u79fb\u52a8\u5e94\u7528<\/li>\n<li><a href=\"https:\/\/github.com\/aarzilli\/nucular\">nucular<\/a> - \u57fa\u4e8e Gio \u7684\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/ying32\/govcl\">GoVCL<\/a> - \u8de8\u5e73\u53f0\u7684 GUI \u5305<\/li>\n<li><a href=\"https:\/\/github.com\/vugu\/vugu\">vugu<\/a> - WebAssembly UI \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/goki\/gi\">GoGi<\/a> - 2D\/3D GUI  \u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/getlantern\/systray\">systray<\/a> - \u8de8\u5e73\u53f0\u652f\u6301\u83dc\u5355\u680f\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/go-flutter-desktop\/go-flutter\">go-flutter <\/a> - \u7ed1\u5b9a Flutter \u5230\u684c\u9762\u5e94\u7528<\/li>\n<li><a href=\"https:\/\/github.com\/nuxui\/nuxui\">NuxUI<\/a><\/li>\n<\/ul>\n<h4 id=\"\u684c\u9762\u8f85\u52a9\u5305\">\u684c\u9762\u8f85\u52a9\u5305<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/pkg\/browser\">pkg\/browser<\/a> - \u5728\u6d4f\u89c8\u5668\u4e2d\u6253\u5f00\u6587\u4ef6\u3001URL<\/li>\n<li><a href=\"https:\/\/github.com\/progrium\/macdriver\">MacDriver<\/a> - macOS \u539f\u751f API<\/li>\n<li><a href=\"https:\/\/github.com\/mitchellh\/gon\">gon<\/a> - \u4e3a macOS \u7b7e\u540d\u548c\u516c\u8bc1<\/li>\n<\/ul>\n<h4 id=\"\u684c\u9762\u5e94\u7528\">\u684c\u9762\u5e94\u7528<\/h4>\n<ul>\n<li><a href=\"https:\/\/github.com\/matryer\/xbar\">xbar<\/a> - \u57fa\u4e8e <a href=\"https:\/\/github.com\/wailsapp\/wails\">Wails.app<\/a> \u5f00\u53d1\u7684 macOS \u83dc\u5355\u680f\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/liupan1890\/aliyunpan\">\u963f\u91cc\u4e91\u76d8\u5c0f\u767d\u7f8a\u7248<\/a> - UI\u7531Flutter\u6784\u5efa<\/li>\n<\/ul>\n<h3 id=\"\u79fb\u52a8\u7aef\">\u79fb\u52a8\u7aef<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/golang\/mobile\">golang\/mobile<\/a> - Go support for Mobile devices<\/li>\n<\/ul>\n<h3 id=\"\u534f\u7a0b\u7ebf\u7a0b\">\u534f\u7a0b\/\u7ebf\u7a0b<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/panjf2000\/ants\">ants<\/a> - \u534f\u7a0b\u6c60<\/li>\n<li><a href=\"https:\/\/github.com\/Jeffail\/tunny\">tunny<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/catmullet\/go-workers\">go-workers<\/a> - \u5b89\u5168\u5730\u5e76\u53d1\u8fd0\u884c\u4e00\u7ec4 worker\uff0c\u901a\u8fc7 channel \u8fdb\u884c\u8f93\u5165\u8f93\u51fa<\/li>\n<li><a href=\"https:\/\/github.com\/autom8ter\/machine\">Machine<\/a> - \u53d7 errgroup.Group \u542f\u53d1\u7684\u534f\u7a0b\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/golang-design\/thread\">thread<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/sourcegraph\/conc\"><strong>conc<\/strong><\/a> - \u66f4\u597d\u7528\u7684\u7ed3\u6784\u5316\u5e76\u53d1\u63a7\u5236<\/li>\n<li><a href=\"https:\/\/github.com\/colega\/zeropool\">zeropool<\/a> - \u96f6\u56de\u6536\u3001\u7c7b\u578b\u5b89\u5168\u7684\u534f\u7a0b\u6c60<\/li>\n<li><a href=\"https:\/\/github.com\/gammazero\/workerpool\">workerpool<\/a> - \u65e0\u963b\u585e\u961f\u5217\u4efb\u52a1\u6c60<\/li>\n<li><a href=\"https:\/\/github.com\/alitto\/pond\">pond<\/a> - \u534f\u7a0b\u6c60<\/li>\n<\/ul>\n<h3 id=\"\u4efb\u52a1\u5b9a\u65f6\u5668\">\u4efb\u52a1\/\u5b9a\u65f6\u5668<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/ReactiveX\/RxGo\">RxGo<\/a> - Go \u7248 <a href=\"https:\/\/github.com\/ReactiveX\">ReactiveX<\/a>\uff0c\u7b80\u5355\u65b9\u4fbf\u7684\u5904\u7406\u5f02\u6b65\u6570\u636e\u6d41<\/li>\n<li><a href=\"https:\/\/github.com\/markbates\/grift\">Grift<\/a> - Go based task runner<\/li>\n<li><a href=\"https:\/\/github.com\/robfig\/cron\">cron<\/a> - a cron library for go<\/li>\n<li><a href=\"https:\/\/github.com\/go-co-op\/gocron\">gocron<\/a> - \u4efb\u52a1\u5b9a\u65f6\u8c03\u5ea6\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/bamzi\/jobrunner\">jobrunner<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/mcmathja\/curlyq\">CurlyQ<\/a> - \u540e\u53f0\u4efb\u52a1\u5904\u7406\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/overtalk\/task\">overtalk\/task<\/a> - \u4efb\u52a1\u7684\u7ba1\u7406&amp;\u6267\u884c\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u6b21\u6570\u7684\u91cd\u53d1<\/li>\n<li><a href=\"https:\/\/github.com\/george518\/PPGo_Job\">PPGo_Job<\/a> - \u5b9a\u65f6\u4efb\u52a1\u7ba1\u7406\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/gocelery\/gocelery\">gocelery<\/a> - Celery \u7684 Go \u8bed\u8a00\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/RichardKnop\/machinery\">Machinery<\/a> - \u901a\u8fc7\u5206\u5e03\u5f0f\u6d88\u606f\u5b9e\u73b0\u5f02\u6b65\u4efb\u52a1\u8c03\u5ea6<\/li>\n<li><a href=\"https:\/\/github.com\/distribworks\/dkron\">dkron<\/a> - \u5206\u5e03\u5f0f\u4efb\u52a1\u8c03\u5ea6\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/climech\/grit\">Grit<\/a> - \u57fa\u4e8e MultiTree \u5b9e\u73b0\u7684\u4efb\u52a1\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/hibiken\/asynq\">Asynq<\/a> - \u5f02\u6b65\u5206\u5e03\u5f0f\u4efb\u52a1\u961f\u5217<\/li>\n<li><a href=\"https:\/\/github.com\/shunfei\/cronsun\">cronsun<\/a> - \u5206\u5e03\u5f0f\u4efb\u52a1\u7cfb\u7edf<\/li>\n<\/ul>\n<h3 id=\"\u6d41\u5904\u7406\">\u6d41\u5904\u7406<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/Jeffail\/benthos\">benthos<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/itsubaki\/gostream\">gostream<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/ThreeDotsLabs\/watermill\">watermill<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/reugn\/go-streams\">go-streams<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/s8sg\/goflow\">goflow<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/uber\/cadence\">Cadence<\/a> (<a href=\"https:\/\/github.com\/uber\/cadence-web\">Cadence Web UI<\/a>) - Uber\u5f00\u6e90\u7684\u5206\u5e03\u5f0f\u5de5\u4f5c\u6d41\u5f15\u64ce\uff0c\u4e3b\u8981\u7528\u4e8e\u5fae\u670d\u52a1\u7f16\u6392\u548c\u5206\u5e03\u5f0f\u4e8b\u52a1\u7b49\u573a\u666f<\/li>\n<\/ul>\n<h3 id=\"\u5fae\u4fe1\">\u5fae\u4fe1<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/medivhzhan\/weapp\">weapp<\/a> - \u5fae\u4fe1\u5c0f\u7a0b\u5e8f SDK<\/li>\n<li><a href=\"https:\/\/github.com\/silenceper\/wechat\">wechat<\/a> - WeChat SDK for Go<\/li>\n<li><a href=\"https:\/\/github.com\/songtianyi\/wechat-go\">wechat-go<\/a> - \u5fae\u4fe1 Web \u7248 API \u7684 Go \u5b9e\u73b0<\/li>\n<\/ul>\n<h3 id=\"sdk\">SDK<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/iGoogle-ink\/gopay\">gopay<\/a> - QQ\u3001\u5fae\u4fe1\uff08WeChat\uff09\u3001\u652f\u4ed8\u5b9d\uff08AliPay\uff09\u7684Go\u7248\u672cSDK<\/li>\n<li><a href=\"https:\/\/github.com\/smartwalle\/alipay\">alipay<\/a> - \u652f\u4ed8\u5b9dSDK<\/li>\n<\/ul>\n<h3 id=\"\u533a\u5757\u94fe\">\u533a\u5757\u94fe<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/hyperledger\/fabric\">Hyperledger Fabric<\/a> - \u57fa\u4e8e\u533a\u5757\u94fe\u7684\u8d85\u7ea7\u8d26\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/ethereum\/go-ethereum\">go-ethereum<\/a> - \u4ee5\u592a\u574a\u534f\u8bae\u7684\u5b98\u65b9 Go \u8bed\u8a00\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/c9s\/bbgo\">bbgo<\/a> - \u7528 Go \u7f16\u5199\u7684\u52a0\u5bc6\u8d27\u5e01\u4ea4\u6613\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/btcsuite\/btcd\">btcd<\/a> - \u6bd4\u7279\u5e01\u5b9e\u73b0<\/li>\n<\/ul>\n<h3 id=\"\u5f00\u53d1\u8f85\u52a9\u5305\">\u5f00\u53d1\u8f85\u52a9\u5305<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/shockerli\/cvt\">cvt<\/a> - \u4efb\u610f\u6570\u636e\u7c7b\u578b\u8f6c\u6362\uff0c\u652f\u6301\u81ea\u5b9a\u4e49\u7c7b\u578b\u3001\u63d0\u53d6\u7ed3\u6784\u4f53\u5b57\u6bb5\u548c\u503c<\/li>\n<li><a href=\"https:\/\/github.com\/jinzhu\/copier\">copier<\/a> - struct \u4e4b\u95f4\u62f7\u8d1d\u503c<\/li>\n<li><a href=\"https:\/\/github.com\/spf13\/cast\">cast<\/a> - \u6570\u636e\u7c7b\u578b\u8f6c\u6362<\/li>\n<li><a href=\"https:\/\/github.com\/r3labs\/diff\">diff<\/a> - \u7ed3\u6784\u4f53&amp;\u503c\u6bd4\u8f83<\/li>\n<li><a href=\"https:\/\/github.com\/thinkeridea\/go-extend\">go-extend<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Unknwon\/com\">com<\/a> - \u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/syyongx\/php2go\">php2go<\/a> - Go \u5b9e\u73b0\u7684 140+ \u4e2a PHP \u51fd\u6570\u529f\u80fd\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/labstack\/gommon\">gommon<\/a> - Common packages for Go<\/li>\n<li><a href=\"https:\/\/github.com\/modern-go\/reflect2\"><strong>reflect2<\/strong><\/a> - reflect api without runtime reflect.Value cost<\/li>\n<li><a href=\"https:\/\/github.com\/mitchellh\/mapstructure\">mapstructure<\/a> - \u5c06 map \u503c\u8f6c\u6362\u5230\u7ed3\u6784\u4f53\u4e2d<\/li>\n<li><a href=\"https:\/\/github.com\/q191201771\/naza\">naza<\/a> - Go\u8bed\u8a00\u57fa\u7840\u5e93<\/li>\n<li><a href=\"https:\/\/github.com\/uber-go\/automaxprocs\">automaxprocs<\/a> - \u81ea\u52a8\u8bbe\u7f6e <code>GOMAXPROCS<\/code><\/li>\n<li><a href=\"https:\/\/github.com\/elliotchance\/c2go\">c2go<\/a> - \u5c06 C \u4ee3\u7801\u8f6c\u6362\u4e3a Go \u4ee3\u7801\u7684\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/raviqqe\/rnm\">rnm<\/a> - \u4ee3\u7801\u91cd\u6784\u8f85\u52a9\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/bradleyjkemp\/memviz\">memviz<\/a> - \u56fe\u5f62\u5316\u6570\u636e\u7ed3\u6784<\/li>\n<li><a href=\"https:\/\/github.com\/ahl5esoft\/golang-underscore\">underscore.go<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/maxatome\/go-testdeep\">go-testdeep<\/a> - \u975e\u5e38\u7075\u6d3b\u7684\u6df1\u5ea6\u6bd4\u8f83\u5305\uff0c\u6269\u5c55\u4e86 Go \u6d4b\u8bd5\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/jeevatkm\/go-model\">go-model<\/a> - <code>struct<\/code> \u64cd\u4f5c\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/orcaman\/concurrent-map\">concurrent-map<\/a> - \u5e76\u53d1\u5b89\u5168 <code>map<\/code><\/li>\n<li><a href=\"https:\/\/github.com\/uber-go\/goleak\">goleak<\/a> - \u68c0\u6d4b goroutine \u6cc4\u6f0f<\/li>\n<li><a href=\"https:\/\/github.com\/guregu\/null\">guregu\/null<\/a> - SQL\/JSON\u7684<code>null<\/code>\u5904\u7406\u5305\uff0c\u63d0\u4f9b\u66ff\u4ee3\u7c7b\u578b<\/li>\n<li><a href=\"https:\/\/github.com\/montanaflynn\/stats\">stats<\/a> - \u6807\u51c6\u6570\u5b57\u7edf\u8ba1<\/li>\n<li><a href=\"https:\/\/github.com\/amit-davidson\/Chronos\">Chronos<\/a> - \u9759\u6001\u7ade\u4e89\u68c0\u6d4b\u5668<\/li>\n<li><a href=\"https:\/\/github.com\/jianfengye\/collection\">collection<\/a> - \u66ff\u4ee3\u539f\u751f\u7684 Slice<\/li>\n<li><a href=\"https:\/\/github.com\/rsc\/rf\">rf<\/a> - \u4ee3\u7801\u91cd\u6784\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/valyala\/bytebufferpool\">bytebufferpool<\/a> - byte buffers pool<\/li>\n<li><a href=\"https:\/\/github.com\/oxtoacart\/bpool\">bpool<\/a> - byte buffers pool\uff0c\u652f\u6301 bytes.Buffers<\/li>\n<li><a href=\"https:\/\/github.com\/imdario\/mergo\">mergo<\/a> - \u5408\u5e76\u7ed3\u6784\u4f53\u548c\u5b57\u5178\u6570\u636e<\/li>\n<li><a href=\"https:\/\/github.com\/thoas\/go-funk\">go-funk<\/a> - \u57fa\u4e8e\u53cd\u5c04\u5b9e\u73b0\u7684\u5e38\u7528\u51fd\u6570<\/li>\n<li><a href=\"https:\/\/github.com\/samber\/lo\">lo<\/a> - \u57fa\u4e8e 1.18+ \u6cdb\u578b\u7684\u5e38\u7528\u51fd\u6570<\/li>\n<li><a href=\"https:\/\/github.com\/bradenaw\/juniper\">juniper<\/a> - \u57fa\u4e8e\u6cdb\u578b\u5b9e\u73b0\u5e38\u7528\u7684\u5bb9\u5668\u3001\u8fed\u4ee3\u5668\u3001\u6570\u636e\u6d41\u7b49\u529f\u80fd<\/li>\n<li><a href=\"https:\/\/github.com\/imdario\/mergo\">mergo<\/a> - \u5408\u5e76\u7ed3\u6784\u4f53\u548c\u5b57\u5178<\/li>\n<li><a href=\"https:\/\/github.com\/huandu\/xstrings\">xstrings<\/a> - \u5b57\u7b26\u4e32\u76f8\u5173\u51fd\u6570<\/li>\n<li><a href=\"https:\/\/github.com\/elliotchance\/pie\">pie<\/a> - slice\/map \u94fe\u5f0f\u5904\u7406<\/li>\n<\/ul>\n<h3 id=\"\u4ee3\u7801\u751f\u6210-2\">\u4ee3\u7801\u751f\u6210<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/ChimeraCoder\/gojson\">ChimeraCoder\/gojson<\/a> - \u6839\u636e JSON \u751f\u6210\u7ed3\u6784\u4f53<\/li>\n<li><a href=\"https:\/\/github.com\/Shelnutt2\/db2struct\">db2struct<\/a> - \u6839\u636e\u8868\u7ed3\u6784\u751f\u6210\u7ed3\u6784\u4f53<\/li>\n<li><a href=\"https:\/\/github.com\/smallnest\/gen\">smallnest\/gen<\/a> - \u6839\u636e\u8868\u7ed3\u6784\u751f\u6210\u7ed3\u6784\u4f53<\/li>\n<li><a href=\"https:\/\/github.com\/kyleconroy\/sqlc\"><strong>sqlc<\/strong><\/a> - \u6839\u636e SQL \u8bed\u53e5\u751f\u6210 Go \u4ee3\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/xo\/xo\">xo<\/a> - \u6839\u636e\u8868\u7ed3\u6784\u6216\u67e5\u8be2\u8bed\u53e5\u81ea\u52a8\u751f\u6210 Go \u4ee3\u7801<\/li>\n<\/ul>\n<h3 id=\"\u7cfb\u7edf\u5f00\u53d1\">\u7cfb\u7edf\u5f00\u53d1<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/linuxkit\/linuxkit\">LinuxKit<\/a> - \u4e3a\u5bb9\u5668\u6784\u5efa\u5b89\u5168\u3001\u4fbf\u643a\u3001\u53ef\u79fb\u690d\u64cd\u4f5c\u7cfb\u7edf\u7684\u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/coreos\/go-systemd\">go-systemd<\/a> - \u7ed1\u5b9a systemd<\/li>\n<li><a href=\"https:\/\/github.com\/AkihiroSuda\/lima\">Lima<\/a> - Linux-on-Mac (&ldquo;macOS subsystem for Linux&rdquo;, &ldquo;containerd for Mac&rdquo;)<\/li>\n<li><a href=\"https:\/\/github.com\/gopher-os\/gopher-os\">gopher-os<\/a> - \u4e00\u4e2a\u517c\u5bb9 Linux \u7684 64 \u4f4d POSIX \u98ce\u683c\u7cfb\u7edf<\/li>\n<li><a href=\"https:\/\/github.com\/ii64\/gouring\">gouring<\/a> - \u4e0d\u4f9d\u8d56 CGO \u5b9e\u73b0\u7cfb\u7edf\u8c03\u7528<\/li>\n<\/ul>\n<h3 id=\"\u672a\u5f52\u7c7b\">\u672a\u5f52\u7c7b<\/h3>\n<ul>\n<li><a href=\"https:\/\/github.com\/x1unix\/go-playground\">go-playground<\/a> - \u6bd4\u5b98\u65b9\u66f4\u597d\u7528\u7684 Go Playground<\/li>\n<li><a href=\"https:\/\/github.com\/go-vgo\/robotgo\">Robotgo<\/a> - Golang \u8de8\u5e73\u53f0\u81ea\u52a8\u5316\u7cfb\u7edf\uff0c\u63a7\u5236\u952e\u76d8\u9f20\u6807\u4f4d\u56fe\u548c\u8bfb\u53d6\u5c4f\u5e55\uff0c\u7a97\u53e3\u53e5\u67c4\u4ee5\u53ca\u5168\u5c40\u4e8b\u4ef6\u76d1\u542c<\/li>\n<li><a href=\"https:\/\/github.com\/mitchellh\/go-homedir\">go-homedir<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/Unknwon\/i18n\">i18n<\/a> - <code>i18n<\/code> \u591a\u8bed\u8a00\u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/nicksnyder\/go-i18n\">go-i18n<\/a> - \u591a\u8bed\u8a00\u5de5\u5177\u5305<\/li>\n<li><a href=\"https:\/\/github.com\/Unknwon\/paginater\">Paginater<\/a> - \u5206\u9875\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/jtolds\/gls\">gls<\/a> - Goroutine local storage<\/li>\n<li><a href=\"https:\/\/github.com\/mcuadros\/go-version\">mcuadros\/go-version<\/a> - \u7248\u672c\u53f7\u6bd4\u8f83<\/li>\n<li><a href=\"https:\/\/github.com\/coreos\/go-semver\">go-semver<\/a> - \u8bed\u4e49\u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/Masterminds\/semver\">semver<\/a> - \u53e6\u4e00\u4e2a\u8bed\u4e49\u7248\u672c<\/li>\n<li><a href=\"https:\/\/github.com\/hashicorp\/go-version\">hashicorp\/go-version<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/keighl\/metabolize\">Metabolize<\/a> - Decodes HTML meta tags into a Golang struct<\/li>\n<li><a href=\"https:\/\/github.com\/pquerna\/otp\">otp<\/a> - \u4e00\u6b21\u6027\u5bc6\u7801\u5de5\u5177\u5305(One Time Password utilities)<\/li>\n<li><a href=\"https:\/\/github.com\/client9\/misspell\">misspell<\/a> - \u5e38\u62fc\u5199\u9519\u8bef\u7684\u82f1\u8bed\u5355\u8bcd<\/li>\n<li><a href=\"https:\/\/github.com\/neurodrone\/crdt\">CRDT<\/a> - CRDT(Convergent and Commutative Replicated Data Types)\u6700\u7ec8\u4e00\u81f4\u6027\u7b97\u6cd5\u7684\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/bitfield\/script\">script<\/a> - Making it easy to write shell-like scripts in Go<\/li>\n<li><a href=\"https:\/\/github.com\/skx\/sysadmin-util\">sysadmin-utils<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/google\/licenseclassifier\">licenseclassifier<\/a> - \u8bc6\u522b\u6587\u4ef6\u4e2d\u7684 LICENSE \u7c7b\u578b<\/li>\n<li><a href=\"https:\/\/github.com\/go-enry\/go-license-detector\">go-license-detector<\/a><\/li>\n<li><a href=\"https:\/\/gitlab.com\/DevelopmentDuck\/rose\">rose<\/a> - \u5728 HTML \u4e2d\u5d4c\u5165\u548c\u8fd0\u884c Go \u4ee3\u7801<\/li>\n<li><a href=\"https:\/\/github.com\/evanw\/esbuild\">esbuild<\/a> - JavaScript \u6784\u5efa\u6253\u5305\u5de5\u5177<\/li>\n<li><a href=\"https:\/\/github.com\/d-tsuji\/clipboard\">clipboard<\/a> - \u526a\u5207\u677f<\/li>\n<li><a href=\"https:\/\/github.com\/atotto\/clipboard\">clipboard<\/a> - \u526a\u5207\u677f<\/li>\n<li><a href=\"https:\/\/github.com\/golang-design\/clipboard\">clipboard<\/a> - \u526a\u5207\u677f<\/li>\n<li><a href=\"https:\/\/github.com\/mholt\/timeliner\">Timeliner<\/a> - \u641c\u96c6\u6574\u7406\u4e2a\u4eba\u5728\u793e\u4ea4\u7f51\u7ad9\u4e0a\u7684\u6570\u636e\u5e76\u7d22\u5f15\u6210\u65f6\u95f4\u7ebf<\/li>\n<li><a href=\"https:\/\/github.com\/brutella\/hc\">hc<\/a> - <code>HomeKit<\/code> \u5e73\u53f0\u5f00\u53d1\u6846\u67b6<\/li>\n<li><a href=\"https:\/\/github.com\/bojanz\/address\">address<\/a> - \u5730\u5740\u5904\u7406\u5e93\uff0c\u652f\u6301\u591a\u56fd\u8bed\u8a00<\/li>\n<li><a href=\"https:\/\/github.com\/adnanh\/webhook\">webhook<\/a> - \u53ef\u6267\u884c Shell \u547d\u4ee4\u7684 Web Hook \u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/ncarlier\/webhookd\">webhookd<\/a> - \u4e3a Shell \u811a\u672c\u63d0\u4f9b Web Hook \u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/ipfs\/go-cid\">go-cid<\/a> - <a href=\"https:\/\/github.com\/ipld\/cid\">CID spec<\/a> Go \u8bed\u8a00\u5b9e\u73b0<\/li>\n<li><a href=\"https:\/\/github.com\/appleboy\/gorush\">gorush<\/a> - APP \u6d88\u606f\u901a\u77e5\u670d\u52a1<\/li>\n<li><a href=\"https:\/\/github.com\/asaskevich\/EventBus\">EventBus<\/a> - \u4e8b\u4ef6\u603b\u7ebf<\/li>\n<li><a href=\"https:\/\/github.com\/microsoft\/go-winio\">go-winio<\/a> - \u4e3a Win32 IO \u64cd\u4f5c\u63d0\u4f9b\u63a5\u53e3\u652f\u6301<\/li>\n<li><a href=\"https:\/\/github.com\/wader\/fq\">fq<\/a> - \u4ee5 <a href=\"https:\/\/github.com\/stedolan\/jq\">jq<\/a> \u8bed\u6cd5\u8bfb\u53d6\u4e8c\u8fdb\u5236\u6570\u636e\/\u6587\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/go-acme\/lego\">lego<\/a> - Let&rsquo;s Encrypt client and ACME library<\/li>\n<\/ul>\n<h2 id=\"logo\">logo<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/egonelbre\/gophers\">Gophers<\/a><\/li>\n<\/ul>\n<h2 id=\"\u5de5\u5177\">\u5de5\u5177<\/h2>\n<ul>\n<li><a href=\"https:\/\/github.com\/syndbg\/goenv\">syndbg\/goenv<\/a> - Go \u7248\u672c\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/wfarr\/goenv\">wfarr\/goenv<\/a> - Go \u7248\u672c\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/github.com\/moovweb\/gvm\">gvm<\/a> - Go \u7248\u672c\u7ba1\u7406<\/li>\n<li><a href=\"https:\/\/www.jetbrains.com\/go\/\">GoLand<\/a> - IDE \u8f6f\u4ef6<\/li>\n<li><a href=\"https:\/\/github.com\/microsoft\/vscode\">Visual Studio Code<\/a><\/li>\n<\/ul>\n<h2 id=\"\u8d44\u6e90\u7ad9\u70b9\">\u8d44\u6e90\u7ad9\u70b9<\/h2>\n<ul>\n<li><a href=\"https:\/\/go101.org\">Go 101<\/a><\/li>\n<li><a href=\"http:\/\/studygolang.com\">Go \u8bed\u8a00\u4e2d\u6587\u7f51<\/a><\/li>\n<li><a href=\"https:\/\/www.golangtc.com\">Golang \u4e2d\u56fd<\/a><\/li>\n<li><a href=\"https:\/\/go-zh.org\">go-zh<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/tyranron\/golang-sizeof.tips\">Golang sizeof tips<\/a> - \u8f93\u5165\u7ed3\u6784\u4f53\u5b9a\u4e49\uff0c\u4f1a\u663e\u793a\u5185\u5b58\u5e03\u5c40<\/li>\n<li><a href=\"https:\/\/www.golangprograms.com\">Golang Programs<\/a><\/li>\n<li><a href=\"https:\/\/golangbot.com\">Golang bot<\/a><\/li>\n<\/ul>\n"},{"title":"\u56fe\u4e66\u63a8\u8350 [2019.10.23\u66f4\u65b0]","link":"https:\/\/shockerli.net\/post\/recommend-books\/","pubDate":"Wed, 23 Oct 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/recommend-books\/","description":"<blockquote>\n<p>\u6211\u6240\u9605\u8bfb\u6216\u4e86\u89e3\u7684\u4f18\u79c0\u4e66\u7c4d\uff0c\u63a8\u8350\u7ed9\u5927\u5bb6\uff0c\u4e0d\u9650\u4e8e\u6280\u672f\uff0c\u5404\u79cd\u7c7b\u578b\u90fd\u6709\uff0c\u5176\u5b9e\u66f4\u591a\u7684\u662f\u5386\u53f2\u3001\u4f20\u8bb0\u7b49\u3002<\/p>\n<\/blockquote>\n<h2 id=\"\u5386\u53f2\">\u5386\u53f2<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u4e66\u540d<\/th>\n<th>\u8bf4\u660e<\/th>\n<th>\u63a8\u8350\u6307\u6570<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/12203945.html\">\u7528\u5e74\u8868\u8bfb\u61c2\u4e2d\u56fd\u53f2<\/a><\/td>\n<td>\u4e2d\u56fd\u5386\u53f2\u5165\u95e8\u4e66\u7c4d<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11954829.html\">\u6d41\u8840\u7684\u4ed5\u9014\uff08\u51682\u518c\uff09<\/a><\/td>\n<td>\u7ad9\u5728\u5927\u79e6\u4e1e\u76f8\u674e\u65af\u7684\u89d2\u5ea6\u8bb2\u8ff0\u5176\u4e00\u751f\u4ed5\u9014\u7684\u5386\u53f2<strong>\u5c0f\u8bf4<\/strong><\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/3079029\/\">\u5927\u79e6\u5e1d\u56fd\uff08\u51686\u90e8\uff09<\/a><\/td>\n<td>\u8bb2\u8ff0\u81ea\u5546\u9785\u53d8\u6cd5\u8d77\u7684\u79e6\u56fd\u5386\u53f2\u5c0f\u8bf4<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/series\/2654\">\u5982\u679c\u8fd9\u662f\u5b8b\u53f2\uff08\u516810\u518c\uff09<\/a><\/td>\n<td>\u9ad8\u5929\u6d41\u4e91<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/12222708.html\">\u660e\u671d\u90a3\u4e9b\u4e8b\u513f\uff08\u51687\u518c\uff09<\/a><\/td>\n<td>\u5f53\u5e74\u660e\u6708<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/item.jd.com\/10341251.html\">\u4e2d\u56fd\u7684\u5308\u5974<\/a><\/td>\n<td>\u6768\u732e\u5e73<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11959683.html\">\u8d3e\u5fd7\u521a\u8bf4\u6625\u79cb\uff08\u51687\u518c\uff09<\/a><\/td>\n<td>\u8d3e\u5fd7\u521a<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/series\/18134\">\u8840\u8165\u7684\u76db\u5510\uff08\u51687\u518c\uff09<\/a><\/td>\n<td>\u738b\u89c9\u4ec1<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/26998107\/\">\u4e2d\u56fd\u8fd1\u4ee3\u901a\u53f2\uff08\u516810\u518c\uff09<\/a><\/td>\n<td>1840-1949\uff0c\u53ef\u80fd\u662f\u6700\u6743\u5a01\u3001\u6700\u5168\u9762\u7684\u8fd1\u4ee3\u53f2\u4e1b\u4e66<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/6116441\/\">\u8d1e\u89c2\u653f\u8981<\/a><\/td>\n<td>\u8bb0\u8f7d\u4e86\u5510\u592a\u5b97\u5728\u4f4d\u7684\u4e8c\u5341\u4e09\u5e74\u4e2d\u4e00\u4e9b\u653f\u6cbb\u3001\u7ecf\u6d4e\u4e0a\u7684\u91cd\u5927\u63aa\u65bd<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/25777432\/\">\u7f57\u9a6c\u4eba\u7684\u6545\u4e8b\uff08\u516815\u518c\uff09<\/a><\/td>\n<td>\u76d0\u91ce\u4e03\u751f<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"\u4f20\u8bb0\">\u4f20\u8bb0<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u4e66\u540d<\/th>\n<th>\u8bf4\u660e<\/th>\n<th>\u63a8\u8350\u6307\u6570<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/12273584.html\">\u5b9e\u5f55\u6bdb\u6cfd\u4e1c\uff08\u51684\u518c\uff09<\/a><\/td>\n<td>\u674e\u6377<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11140980.html\">\u9093\u5c0f\u5e73\u65f6\u4ee3<\/a><\/td>\n<td>\u5085\u9ad8\u4e49\u3001\u63cf\u8ff0\u9093\u5c0f\u5e73\u4e0e\u4e2d\u56fd\u6539\u9769\u5f00\u653e\u7684\u4f5c\u54c1<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/item.jd.com\/11574341.html\">\u66fe\u56fd\u85e9\uff08\u51683\u518c\uff09<\/a><\/td>\n<td>\u5510\u6d69\u660e\u3001\u4f20\u8bb0\u5c0f\u8bf4<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/item.jd.com\/11199205.html\">\u66fe\u56fd\u85e9\u5168\u96c6\uff08\u516831\u518c\uff09<\/a><\/td>\n<td>\u5510\u6d69\u660e\u7f16\u3001\u5cb3\u9e93\u4e66\u793e\u51fa\u7248<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/item.jd.com\/11138599.html\">\u7ea2\u9876\u5546\u4eba\u80e1\u96ea\u5ca9<\/a><\/td>\n<td>\u9ad8\u9633<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11303441.html\">\u6731\u5143\u748b\u4f20<\/a><\/td>\n<td>\u5434\u6657<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11877751.html\">\u6148\u79a7\u5168\u4f20\uff08\u516810\u518c\uff09<\/a><\/td>\n<td>\u9ad8\u9633<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11234620.html\">\u6148\u79a7\u5168\u4f20\uff08\u51683\u518c\uff09<\/a><\/td>\n<td>\u88d5\u5fb7\u9f84(\u7f8e)<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11338540.html\">\u5f20\u5c45\u6b63\uff08\u5168\u56db\u518c\uff09<\/a><\/td>\n<td>\u718a\u53ec\u653f<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/12085209.html\">\u6768\u5ea6\uff08\u51683\u518c\uff09<\/a><\/td>\n<td>\u5510\u6d69\u660e<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/12087234.html\">\u5f20\u4e4b\u6d1e\uff08\u51683\u518c\uff09<\/a><\/td>\n<td>\u5510\u6d69\u660e<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11896501.html\">\u77e5\u884c\u5408\u4e00\u738b\u9633\u660e\uff08\u51684\u518c\uff09<\/a><\/td>\n<td>\u5ea6\u9634\u5c71<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"\u5c0f\u8bf4\">\u5c0f\u8bf4<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u4e66\u540d<\/th>\n<th>\u8bf4\u660e<\/th>\n<th>\u63a8\u8350\u6307\u6570<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/3523041\/\">\u5e73\u51e1\u7684\u4e16\u754c<\/a><\/td>\n<td>\u4e00\u90e8\u5168\u666f\u5f0f\u5730\u8868\u73b0\u4e2d\u56fd\u5f53\u4ee3\u57ce\u4e61\u793e\u4f1a\u751f\u6d3b\u7684\u957f\u7bc7\u5c0f\u8bf4<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/3432304\/\">\u5927\u6c5f\u4e1c\u53bb\uff08\u51683\u518c\uff09<\/a><\/td>\n<td>\u4e00\u90e8\u5168\u666f\u5c55\u73b0\u6539\u9769\u5f00\u653e\u4e8c\u5341\u5e74\u4e2d\u56fd\u7ecf\u6d4e\u751f\u6d3b\u7684\u957f\u8fbe150\u4e07\u5b57\u7684\u957f\u7bc7\u5c0f\u8bf4<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td>\u300a\u6c11\u4f01\u6c5f\u6e56\uff08\u51682\u518c\uff09\u300b<\/td>\n<td>\u4ee5\u7f16\u5e74\u4f53\u7684\u5f62\u5f0f\u8be6\u5c3d\u8fd8\u539f\u4e86\u5341\u5e74\u6765\u4e00\u6279\u5178\u578b\u6c11\u4f01\u4ece\u8d77\u5bb6\u3001\u751f\u5b58\u5230\u53d1\u5c55\u7684\u5168\u8fc7\u7a0b<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td>\u300a\u8270\u96be\u7684\u5236\u9020\u300b<\/td>\n<td>\u8bb2\u8ff0\u5236\u9020\u4e1a\u5728\u653f\u7b56\u548c\u5e02\u573a\u5939\u7f1d\u4e2d\u7684\u751f\u5b58\u6545\u4e8b\uff0c\u300a\u5927\u6c5f\u4e1c\u53bb\u300b\u7eed\u96c6<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"\u751f\u6d3b\">\u751f\u6d3b<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u4e66\u540d<\/th>\n<th>\u8bf4\u660e<\/th>\n<th>\u63a8\u8350\u6307\u6570<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/26760925\/\">\u8001\u5a46\u6000\u5b55\u6211\u5e72\u5565<\/a><\/td>\n<td>\u753b\u7ed9\u5976\u7238\u7684\u6000\u5b55\u4e66<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td>\u533b\u5b66\u5c31\u4f1a<\/td>\n<td>\u6f2b\u753b\u4e2d\u533b\u5165\u95e8\u77e5\u8bc6<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"\u6210\u957f\">\u6210\u957f<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u4e66\u540d<\/th>\n<th>\u8bf4\u660e<\/th>\n<th>\u63a8\u8350\u6307\u6570<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"http:\/\/item.jd.com\/12035511.html\">\u597d\u597d\u5b66\u4e60\uff1a\u4e2a\u4eba\u77e5\u8bc6\u7ba1\u7406\u7cbe\u8fdb\u6307\u5357<\/a><\/td>\n<td>\u6210\u7532<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/5377591\/\">\u5f00\u542f\u6f5c\u610f\u8bc6\uff1a\u770b\u900f\u4f60\u672a\u77e5\u7684\u5fc3<\/a><\/td>\n<td>\u963f\u52cb<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"\u7ecf\u7ba1\">\u7ecf\u7ba1<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u4e66\u540d<\/th>\n<th>\u8bf4\u660e<\/th>\n<th>\u63a8\u8350\u6307\u6570<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"http:\/\/item.jd.com\/11512713.html\">\u53c2\u4e0e\u611f<\/a><\/td>\n<td>\u9ece\u4e07\u5f3a<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/item.jd.com\/11847321.html\">\u8ba4\u8bc6\u5546\u4e1a<\/a><\/td>\n<td>\u5546\u4e1a\u5165\u95e8\u4e66<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11825266.html\">\u4ece\u96f6\u5f00\u59cb\u505a\u8fd0\u8425<\/a><\/td>\n<td>\u5f20\u4eae<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/item.jd.com\/11954631.html\">\u9b54\u9b3c\u7ecf\u6d4e\u5b66\uff08\u51684\u518c\uff09<\/a><\/td>\n<td>\u53f2\u8482\u82ac\u00b7\u5217\u7ef4\u7279(\u7f8e)<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/21331443\/\">\u4e2d\u56fd\u662f\u90e8\u91d1\u878d\u53f2<\/a><\/td>\n<td>\u9648\u96e8\u9732\/\u6768\u5fe0\u6055\uff0c\u7ad9\u5728\u91d1\u878d\u7ecf\u6d4e\u7684\u89d2\u5ea6\u770b\u5f85\u5386\u53f2<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/25840005\/\">\u4e2d\u56fd\u662f\u90e8\u91d1\u878d\u53f22\uff1a\u5929\u4e0b\u4e4b\u8d22<\/a><\/td>\n<td>\u9648\u96e8\u9732\/\u6768\u5fe0\u6055<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/27007549\/\">\u4e2d\u592e\u5e1d\u56fd\u7684\u8d22\u653f\u5bc6\u7801<\/a><\/td>\n<td>\u90ed\u5efa\u9f99\uff0c\u4ece\u5386\u53f2\u4e2d\u5bfb\u89c5\u4e2d\u56fd\u8d22\u653f\u5386\u53f2<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/26901114\/\">\u4e2d\u56fd\u56fd\u5bb6\u6cbb\u7406\u7684\u5236\u5ea6\u903b\u8f91<\/a><\/td>\n<td>\u5468\u96ea\u5149<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/1085366\/\">\u7ec4\u7ec7\u793e\u4f1a\u5b66\u5341\u8bb2<\/a><\/td>\n<td>\u5468\u96ea\u5149<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/25747852\/\">\u4e16\u754c\u4e0a\u6700\u7b80\u5355\u7684\u4f1a\u8ba1\u4e66<\/a><\/td>\n<td>\u5c0f\u5b66\u751f\u90fd\u80fd\u770b\u61c2\u7684\u4f1a\u8ba1\u5165\u95e8\u4e66\u7c4d<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/27668032\/\">\u6709\u6548\u7ba1\u7406\u76845\u5927\u5175\u6cd5<\/a><\/td>\n<td>\u7ecf\u8425\u7ba1\u7406\u7ecf\u9a8c\u5b9e\u529b\u4e4b\u4f5c<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/26794032\/\">\u521b\u4e1a36\u6761\u519b\u89c4<\/a><\/td>\n<td>\u521b\u4e1a\u4e4b\u8def\u7ecf\u9a8c\u8c08<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/26582558\/\">\u7ecf\u6d4e\u5b66\u901a\u8bc6<\/a><\/td>\n<td>\u859b\u5146\u4e30<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"\u6280\u672f\">\u6280\u672f<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u4e66\u540d<\/th>\n<th>\u8bf4\u660e<\/th>\n<th>\u63a8\u8350\u6307\u6570<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/23008813\/\">\u9ad8\u6027\u80fd MySQL<\/a><\/td>\n<td>\u5168\u9762\u6df1\u5165\u4e86\u89e3 MySQL \u7684\u7ecf\u5178\u4e66\u7c4d<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/25863515\/\">\u56fe\u89e3 HTTP<\/a><\/td>\n<td>\u7528\u6709\u8da3\u7684\u56fe\u6765\u4ecb\u7ecd HTTP \u534f\u8bae<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"http:\/\/www.php-internals.com\">\u6df1\u5165\u7406\u89e3 PHP \u5185\u6838<\/a><\/td>\n<td>PHP \u5185\u6838\u6e90\u7801\u5206\u6790\uff0c\u5f00\u6e90\u56fe\u4e66<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/github.com\/Unknwon\/the-way-to-go_ZH_CN\">The Way to Go<\/a><\/td>\n<td>Go \u5165\u95e8\u6307\u5357\uff0c\u5f00\u6e90\u56fe\u4e66<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/26785199\/\">R \u8bed\u8a00\u5b9e\u6218<\/a><\/td>\n<td>R \u8bed\u8a00\u6570\u636e\u5206\u6790<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/4262627\/\">\u91cd\u6784<\/a><\/td>\n<td>\u6539\u5584\u65e2\u6709\u4ee3\u7801\u7684\u8bbe\u8ba1\uff0c\u600e\u6837\u66f4\u597d\u7684\u7f16\u7801<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/10769749\/\">\u63a8\u8350\u7cfb\u7edf\u5b9e\u8df5<\/a><\/td>\n<td>\u4ea7\u54c1\u7ecf\u7406\u4e5f\u80fd\u770b\u61c2\u7684\u63a8\u8350\u7cfb\u7edf\u8bbe\u8ba1<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/3729677\/\">MySQL \u6027\u80fd\u8c03\u4f18\u4e0e\u67b6\u6784\u8bbe\u8ba1<\/a><\/td>\n<td>MySQL \u5165\u95e8\u8be6\u89e3\u4e66\u7c4d<\/td>\n<td>\u2605\u2605\u2605<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2 id=\"\u80b2\u513f\">\u80b2\u513f<\/h2>\n<table>\n<thead>\n<tr>\n<th>\u4e66\u540d<\/th>\n<th>\u8bf4\u660e<\/th>\n<th>\u63a8\u8350\u6307\u6570<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/23008813\/\">\u5e7c\u4e09\u56fd<\/a><\/td>\n<td>\u624b\u7ed8\u7248\u4e09\u56fd\uff0c\u5b69\u5b50\u9605\u8bfb\u4e09\u56fd\u7684\u597d\u4e66<\/td>\n<td>\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/book.douban.com\/subject\/3576486\/\">\u5c0f\u72d7\u94b1\u94b1<\/a><\/td>\n<td>\u5f15\u5bfc\u5b69\u5b50\u6b63\u786e\u8ba4\u8bc6\u8d22\u5bcc\u3001\u521b\u9020\u8d22\u5bcc\u7684\u201c\u91d1\u94b1\u7ae5\u8bdd&quot;<\/td>\n<td>\u2605\u2605\u2605\u2605\u2605<\/td>\n<\/tr>\n<\/tbody>\n<\/table>"},{"title":"PHP \u5b9e\u73b0\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u8ba1\u7b97","link":"https:\/\/shockerli.net\/post\/php-expression-string\/","pubDate":"Tue, 03 Sep 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/php-expression-string\/","description":"<blockquote>\n<p>\u4ec0\u4e48\u662f\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\uff1f\u5373\uff0c\u5c06\u6211\u4eec\u5e38\u89c1\u7684\u8868\u8fbe\u5f0f\u6587\u672c\u5199\u5230\u4e86\u5b57\u7b26\u4e32\u4e2d\uff0c\u5982\uff1a<code>&quot;$age &gt;= 20&quot;<\/code>\uff0c<code>$age<\/code> \u7684\u503c\u662f\u52a8\u6001\u7684\u6574\u578b\u53d8\u91cf\u3002<\/p>\n<p>\u4ec0\u4e48\u662f\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u8ba1\u7b97\uff1f\u5373\uff0c\u6211\u4eec\u9700\u8981\u4e00\u6bb5\u7a0b\u5e8f\u6765\u6267\u884c\u52a8\u6001\u7684\u8868\u8fbe\u5f0f\uff0c\u5982\u7ed9\u5b9a\u4e00\u4e2a\u542b\u8868\u8fbe\u5f0f\u7684\u5b57\u7b26\u4e32\u53d8\u91cf\u5e76\u8ba1\u7b97\u5176\u7ed3\u679c\uff0c\u800c\u8868\u8fbe\u5f0f\u5b57\u7b26\u4e32\u662f\u52a8\u6001\u7684\uff0c\u6bd4\u5982\u4e3a\u5ba2\u6237A\u6267\u884c\u7684\u8868\u8fbe\u5f0f\u662f <code>$orderCount &gt;= 10<\/code>\uff0c\u800c\u4e3a\u5ba2\u6237B\u6267\u884c\u7684\u8868\u8fbe\u5f0f\u662f <code>$orderTotal &gt;= 1000<\/code>\u3002<\/p>\n<p>\u573a\u666f\u5728\u54ea\u513f\uff1f\u540c\u4e00\u4efd\u7a0b\u5e8f\u5177\u6709\u5b8c\u5168\u901a\u7528\u6027\uff0c\u4f46\u5dee\u5f02\u5c31\u5176\u4e2d\u4e00\u4e2a\u8868\u8fbe\u5f0f\u800c\u5df2\uff0c\u90a3\u4e48\u6211\u4eec\u9700\u8981\u5c06\u5176\u62bd\u8c61\u51fa\u6765\uff0c\u8ba9\u8868\u8fbe\u5f0f\u53d8\u6210\u52a8\u6001\u7684\u3001\u53ef\u914d\u7f6e\u7684\u3001\u6216\u53ef\u751f\u6210\u7684\u3002<\/p>\n<\/blockquote>\n<h2 id=\"\u65b9\u6848\u4e00eval-\u51fd\u6570\">\u65b9\u6848\u4e00\uff1aeval \u51fd\u6570<\/h2>\n<p><a href=\"https:\/\/www.php.net\/manual\/zh\/function.eval.php\"><code>eval<\/code><\/a> \u51fd\u6570\u53ef\u80fd\u662f\u6211\u4eec\u7b2c\u4e00\u4e2a\u60f3\u5230\u7684\u65b9\u6848\uff0c\u4e5f\u662f\u6700\u7b80\u5355\u76f4\u63a5\u7684\u65b9\u6848\u3002\u6211\u4eec\u6765\u8bd5\u9a8c\u4e0b\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$a<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">10<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">var_dump<\/span><span class=\"p\">(<\/span><span class=\"k\">eval<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;return $a &gt; 5;&#39;<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u8f93\u51fa:\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ bool(true)\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u55ef~\u5b8c\u5168\u80fd\u6ee1\u8db3\u6211\u4eec\u7684\u9700\u6c42\uff0c\u56e0\u4e3a <code>eval<\/code> \u51fd\u6570\u6267\u884c\u7684 PHP \u8868\u8fbe\u5f0f\uff0c\u53ea\u8981\u5b57\u7b26\u4e32\u5185\u8868\u8fbe\u5f0f\u7b26\u5408 PHP \u8bed\u6cd5\u5c31\u884c\u3002<\/p>\n<p>\u4f46\u9700\u6ce8\u610f\u7684\u662f\uff0c<code>eval<\/code> \u51fd\u6570<strong>\u53ef\u6267\u884c\u4efb\u610f PHP \u4ee3\u7801<\/strong>\uff0c\u4e5f\u5c31\u610f\u5473\u7740\u6743\u9650\u5927\u3001\u98ce\u9669\u9ad8\u3001<strong>\u4e0d\u5b89\u5168<\/strong>\u3002\u5982\u679c\u4f60\u7684\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u6765\u81ea\u4e8e\u5916\u90e8\u8f93\u5165\uff0c\u90a3\u52a1\u5fc5\u6ce8\u610f\u4e86\u8bf7\u81ea\u884c\u505a\u597d\u5b89\u5168\u68c0\u67e5\u548c\u8fc7\u6ee4\uff0c\u5e76\u8003\u8651\u98ce\u9669\u3002\u5f53\u7136\uff0c\u6267\u884c\u7684\u662f\u5916\u90e8\u8f93\u5165\u8868\u8fbe\u5f0f\uff0c\u975e\u5e38\u4e0d\u5efa\u8bae\u4f7f\u7528\u6b64\u51fd\u6570\u3002<\/p>\n<h2 id=\"\u65b9\u6848\u4e8cinclude-\u4e34\u65f6\u6587\u4ef6\">\u65b9\u6848\u4e8c\uff1ainclude \u4e34\u65f6\u6587\u4ef6<\/h2>\n<p>\u5982\u4f55\u5b9e\u73b0\uff1f\u5c06\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u5199\u5165\u4e00\u4e2a\u4e34\u65f6\u6587\u4ef6\uff0c\u7136\u540e <code>include<\/code> \u8fd9\u4e2a\u4e34\u65f6\u6587\u4ef6\uff0c\u6267\u884c\u5b8c\u6210\u540e\u518d\u5220\u9664\u8fd9\u4e2a\u4e34\u65f6\u6587\u4ef6\u3002<\/p>\n<p>\u65b9\u6848\u4f9d\u7136\u5f88\u7b80\u5355\u3002\u9700\u8981\u8003\u8651\u7684\u6709\uff1a<\/p>\n<ul>\n<li>\u4e34\u65f6\u6587\u4ef6\u4f1a\u5f88\u591a\uff0c\u4e00\u4e2a\u8bf7\u6c42\u5c31\u6709\u5f88\u591a\u4e2a\uff0c\u6587\u4ef6\u7684\u8fc7\u671f\u548c\u5220\u9664\u52a1\u5fc5\u8003\u8651\u5728\u5185<\/li>\n<li>\u6587\u4ef6\u7684\u8bfb\u5199\uff0c\u4e5f\u5c31\u7275\u626f\u5230\u4e86\u78c1\u76d8 IO\uff0c\u90a3\u6027\u80fd\u5fc5\u5b9a\u53d7\u5230\u4e25\u91cd\u5f71\u54cd<\/li>\n<\/ul>\n<p>\u90a3\u8fd9\u4e2a\u65b9\u6848\u6211\u4eec\u8fd8\u91c7\u7528\u5417\uff1f<\/p>\n<h2 id=\"\u65b9\u6848\u4e09assert-\u65ad\u8a00\">\u65b9\u6848\u4e09\uff1aassert \u65ad\u8a00<\/h2>\n<p>\u5176\u5b9e <a href=\"https:\/\/www.php.net\/manual\/zh\/function.assert.php\"><code>assert<\/code><\/a> \u505a\u4e0d\u5230\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u7684\u8ba1\u7b97\uff0c\u4f46\u63d0\u51fa\u6765\u4e5f\u7b97\u4e2a\u731c\u60f3\uff0c\u56e0\u4e3a\u80fd\u5b9e\u73b0 PHP \u8868\u8fbe\u5f0f\u662f\u5426\u5408\u6cd5\u7684\u6821\u9a8c\u3002<\/p>\n<p>\u4e0b\u4f8b\u6f14\u793a\u4e86\u5982\u4f55\u9a8c\u8bc1\u67d0\u4e2a\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u662f\u5426\u4e3a\u5408\u6cd5\u7684 PHP \u8868\u8fbe\u5f0f:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">assert<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;a +== 1&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">Throwable<\/span> <span class=\"nv\">$e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">echo<\/span> <span class=\"nv\">$e<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">getMessage<\/span><span class=\"p\">(),<\/span> <span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u8fd0\u884c\u7ed3\u679c:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">Failure evaluating code: \n<\/span><\/span><span class=\"line\"><span class=\"cl\">a +== 1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u53ef\u4f9d\u7136\u9762\u4e34\u4e00\u4e2a\u95ee\u9898\uff0c\u90a3\u5c31\u662f\u5b89\u5168\u6027\uff0c\u56e0\u4e3a\u4e0e <code>eval<\/code> \u4e00\u6837\u80fd\u6267\u884c\u4efb\u610f\u4ee3\u7801\u3002\u6240\u4ee5\uff0c\u4ece PHP 7.2 \u5f00\u59cb\u5c31\u4e0d\u53ef\u4ee5\u518d\u6267\u884c\u5b57\u7b26\u4e32\u7c7b\u578b\u7684\u8868\u8fbe\u5f0f\u4e86\u3002\u5173\u4e8e PHP assert \u65ad\u8a00\uff0c\u53ef\u53c2\u8003 <a href=\"https:\/\/shockerli.net\/post\/php-assert\/\">\u4f60\u6240\u4e0d\u77e5\u7684 PHP \u65ad\u8a00(assert)<\/a><\/p>\n<h2 id=\"\u65b9\u6848\u56dbsystemexec-\u51fd\u6570\">\u65b9\u6848\u56db\uff1asystem\/exec \u51fd\u6570<\/h2>\n<p><a href=\"https:\/\/www.php.net\/manual\/zh\/function.system.php\">system<\/a>\u3001<a href=\"https:\/\/www.php.net\/manual\/zh\/function.exec.php\">exec<\/a>\u3001<a href=\"https:\/\/www.php.net\/manual\/zh\/function.proc-open.php\">proc_open<\/a>\u3001<a href=\"https:\/\/www.php.net\/manual\/zh\/function.shell-exec.php\">shell_exec<\/a>\u3001<a href=\"https:\/\/www.php.net\/manual\/zh\/function.passthru.php\">passthru<\/a> \u7b49\u7cfb\u5217\u51fd\u6570\uff0c\u672c\u8d28\u4e0a\u90fd\u662f\u6267\u884c\u5916\u90e8\u547d\u4ee4\u6216\u811a\u672c\uff0c\u4ee5\u8fbe\u5230\u6267\u884c PHP \u4ee3\u7801\u7684\u6548\u679c\uff0c\u4e0e include \u5b9e\u73b0\u7c7b\u4f3c\uff0c\u867d\u80fd\u5b9e\u73b0\u4f46<strong>\u4e0d\u5b89\u5168<\/strong>\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">system<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;php -r &#34;echo 1 + 2;&#34;&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">echo<\/span> <span class=\"nx\">exec<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;php -r &#34;echo 1 + 2;&#34;&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u65b9\u6848\u4e94create_function-\u51fd\u6570\">\u65b9\u6848\u4e94\uff1acreate_function \u51fd\u6570<\/h2>\n<p><a href=\"https:\/\/www.php.net\/manual\/zh\/function.create-function.php\"><code>create_function<\/code><\/a> \u51fd\u6570\u662f\u533f\u540d\u51fd\u6570\u7684\u524d\u751f\u4e34\u65f6\u66ff\u4ee3\u54c1\uff0c\u867d\u7136\u73b0\u4eca\u8fd8\u672a\u5e9f\u5f03\u3002\u4f5c\u7528\u662f\u4ec0\u4e48\u5462\uff1f\u5141\u8bb8\u7528\u5b57\u7b26\u4e32\u521b\u5efa\u4e00\u4e2a <code>lambda<\/code> \u98ce\u683c\u7684\u533f\u540d\u51fd\u6570\u3002<\/p>\n<p><strong>\u51fd\u6570\u8bed\u6cd5\u5b9a\u4e49:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">create_function<\/span> <span class=\"p\">(<\/span> <span class=\"nx\">string<\/span> <span class=\"nv\">$args<\/span> <span class=\"p\">,<\/span> <span class=\"nx\">string<\/span> <span class=\"nv\">$code<\/span> <span class=\"p\">)<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">string<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u4f7f\u7528\u793a\u4f8b:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$newfunc<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">create_function<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;$a, $b&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;var_dump($a, $b); return $a === $b;&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">var_dump<\/span><span class=\"p\">(<\/span><span class=\"nv\">$newfunc<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u793a\u4f8b\u8f93\u51fa:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">int(1)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">int(2)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">bool(false)\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u53d1\u73b0\u5b8c\u5168\u80fd\u5b9e\u73b0\u6211\u4eec\u7684\u573a\u666f\u9700\u6c42~\u4f46\u662f\u53c8\u6765\u4e86\uff0c\u8fd9\u4e2a\u51fd\u6570<strong>\u4e0d\u5b89\u5168<\/strong>\u3002\u4e3a\u4ec0\u4e48\u5462\uff1f\u770b\u4e0b\u624b\u518c\u4e2d\u7684 Caution\uff1a<\/p>\n<blockquote>\n<p>This function internally performs an eval() and as such has the same security issues as eval(). Additionally it has bad performance and memory usage characteristics.<\/p>\n<p>If you are using PHP 5.3.0 or newer a native anonymous function should be used instead.<\/p>\n<\/blockquote>\n<p><code>create_function<\/code> \u51fd\u6570\u5e95\u5c42\u8d70\u7684\u662f <code>eval<\/code> \u51fd\u6570\uff0c\u6240\u4ee5\u9762\u4e34\u7740\u4e0e <code>eval<\/code> \u4e00\u6837\u7684\u5b89\u5168\u95ee\u9898\u3002\u5e76\u4e14\uff0c<code>create_function<\/code> \u51fd\u6570\u6027\u80fd\u4f4e\u4e0b\u3001\u5360\u7528\u5185\u5b58\u9ad8\u3002\u800c\u8fd9\u51fd\u6570\u6700\u521d\u5c31\u662f\u4e3a\u4e86\u533f\u540d\u51fd\u6570\u800c\u751f\u7684\uff0c\u4ece PHP 5.3.0 \u5f00\u59cb\u5c31\u5185\u7f6e\u5b9e\u73b0\u4e86\u533f\u540d\u51fd\u6570\uff0c\u6240\u4ee5\u901a\u8fc7 <code>create_function<\/code> \u53bb\u521b\u5efa <code>lambda<\/code> \u98ce\u683c\u81ea\u5b9a\u4e49\u51fd\u6570\u5c31\u6beb\u65e0\u5b58\u5728\u7684\u5fc5\u8981\u4e86\u3002<\/p>\n<h2 id=\"\u65b9\u6848\u516dinclude-\u6587\u4ef6\u6d41\">\u65b9\u6848\u516d\uff1ainclude \u6587\u4ef6\u6d41<\/h2>\n<p>\u4e3a\u4f55\u53c8\u662f <a href=\"https:\/\/www.php.net\/manual\/zh\/function.include.php\">include<\/a> \uff1f<\/p>\n<p>\u6211\u4eec\u4ece\u5b98\u65b9\u624b\u518c\u4e2d\u4e86\u89e3\u5230\uff0c<code>include<\/code> \u8bed\u53e5\u7528\u4e8e<strong>\u5305\u542b\u5e76\u8fd0\u884c\u6307\u5b9a\u6587\u4ef6<\/strong>\uff0c\u5e76\u4e14\u652f\u6301<strong>\u8fdc\u7a0b\u6587\u4ef6<\/strong>\uff0c\u6bd4\u5982 <code>include 'http:\/\/www.example.com\/file.php?foo=1&amp;bar=2';<\/code>\u3002<\/p>\n<p>\u6211\u4eec\u8fd8\u4ece\u624b\u518c\u4e2d\u80fd\u627e\u5230\u8fd9\u53e5\u8bdd\uff1a<\/p>\n<blockquote>\n<p>\u5982\u679c\u201c<a href=\"https:\/\/www.php.net\/manual\/zh\/filesystem.configuration.php#ini.allow-url-include\">URL include wrappers<\/a>\u201d\u5728 PHP \u4e2d\u88ab\u6fc0\u6d3b\uff0c\u53ef\u4ee5\u7528 URL\uff08\u901a\u8fc7 HTTP \u6216\u8005\u5176\u5b83\u652f\u6301\u7684\u5c01\u88c5\u534f\u8bae\u2014\u2014\u89c1<a href=\"https:\/\/www.php.net\/manual\/zh\/wrappers.php\">\u652f\u6301\u7684\u534f\u8bae\u548c\u5c01\u88c5\u534f\u8bae<\/a>\uff09\u800c\u4e0d\u662f\u672c\u5730\u6587\u4ef6\u6765\u6307\u5b9a\u8981\u88ab\u5305\u542b\u7684\u6587\u4ef6\u3002<\/p>\n<\/blockquote>\n<p>\u6b64\u65f6\uff0c\u6211\u4eec\u662f\u5426\u60f3\u8d77\u4e86\u719f\u6089\u7684 <code>php:\/\/input<\/code> \u7b49 <code>scheme:\/\/...<\/code> \u98ce\u683c\u5185\u7f6e\u6216\u81ea\u5b9a\u4e49\u7684URL\u5c01\u88c5\u534f\u8bae\u3002\u800c\u8fd9\u4e9b\u534f\u8bae\u90fd\u6709\u4e2a\u7279\u70b9\uff0c\u5373\u53ef\u7528\u4e8e\u7c7b\u4f3c <a href=\"https:\/\/www.php.net\/manual\/zh\/function.fopen.php\"><code>fopen()<\/code><\/a>\u3001<a href=\"https:\/\/www.php.net\/manual\/zh\/function.file-exists.php\"><code>file_exists()<\/code><\/a> \u548c <a href=\"https:\/\/www.php.net\/manual\/zh\/function.file-get-contents.php\"><code>file_get_contents()<\/code><\/a> \u7684\u6587\u4ef6\u7cfb\u7edf\u51fd\u6570\u6253\u5f00\u3002<code>include<\/code> \u8bfb\u53d6\u6587\u4ef6\u5176\u5b9e\u4e0e\u8fd9\u4e9b\u51fd\u6570\u662f\u4e00\u81f4\u7684\u3002<\/p>\n<p>\u90a3\u6211\u4eec\u5c31\u53ef\u4ee5\u4f7f\u7528 <a href=\"https:\/\/www.php.net\/manual\/zh\/function.stream-wrapper-register.php\"><code>stream_wrapper_register()<\/code><\/a> \u6765\u6ce8\u518c\u4e00\u4e2a\u7528 PHP \u7c7b\u5b9e\u73b0\u7684 URL \u5c01\u88c5\u534f\u8bae\u3002\u8be5\u51fd\u6570\u5141\u8bb8\u7528\u6237\u5b9e\u73b0\u81ea\u5b9a\u4e49\u7684\u534f\u8bae\u5904\u7406\u5668\u548c\u6d41\uff0c\u7528\u4e8e\u6240\u6709\u5176\u5b83\u7684\u6587\u4ef6\u7cfb\u7edf\u51fd\u6570\u4e2d\uff08\u4f8b\u5982 <code>fopen()<\/code>\uff0c<code>fread()<\/code> \u7b49\uff09\u3002\u5173\u4e8e\u5982\u4f55\u5b9e\u73b0\u5e76\u6ce8\u518c\u4e00\u4e2a Stream Wrapper\uff0c\u53ef\u53c2\u8003<a href=\"https:\/\/www.php.net\/manual\/zh\/class.streamwrapper.php\">\u5b98\u65b9\u624b\u518c<\/a>\uff0c\u672c\u6587\u4ec5\u63d0\u4f9b\u4e2a\u6700\u7b80\u5355\u7684\u793a\u4f8b\uff0c\u6765\u5b9e\u73b0\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u7684\u8ba1\u7b97\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"nc\">VarStream<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">private<\/span> <span class=\"nv\">$string<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">private<\/span> <span class=\"nv\">$position<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"nf\">stream_open<\/span><span class=\"p\">(<\/span><span class=\"nv\">$path<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$mode<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$options<\/span><span class=\"p\">,<\/span> <span class=\"o\">&amp;<\/span><span class=\"nv\">$opened_path<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nv\">$path<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">explode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;:\/\/&#39;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$path<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">)[<\/span><span class=\"mi\">1<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"c1\">\/\/ \u6b64\u5904\u53ef\u5bf9\u4f20\u5165\u7684\u53c2\u6570\u8fdb\u884c\u81ea\u5b9a\u4e49\u89e3\u6790\uff0c\u5e76\u4f5c\u8fdb\u4e00\u6b65\u7684\u64cd\u4f5c\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">string<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$path<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">position<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"nf\">stream_read<\/span><span class=\"p\">(<\/span><span class=\"nv\">$count<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nv\">$ret<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">substr<\/span><span class=\"p\">(<\/span><span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">string<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">position<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$count<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nv\">$this<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">position<\/span> <span class=\"o\">+=<\/span> <span class=\"nx\">strlen<\/span><span class=\"p\">(<\/span><span class=\"nv\">$ret<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"nv\">$ret<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"nf\">stream_eof<\/span><span class=\"p\">()<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">public<\/span> <span class=\"k\">function<\/span> <span class=\"nf\">stream_stat<\/span><span class=\"p\">()<\/span> <span class=\"p\">{}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">stream_wrapper_register<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;var&#34;<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;VarStream&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$params<\/span> <span class=\"o\">=<\/span> <span class=\"p\">[<\/span><span class=\"s1\">&#39;count&#39;<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"mi\">1<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$expression<\/span> <span class=\"o\">=<\/span> <span class=\"s1\">&#39;($count += 111) - 8&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$result<\/span> <span class=\"o\">=<\/span> <span class=\"k\">include<\/span> <span class=\"s1\">&#39;var:\/\/&lt;?php extract($params); return &#39;<\/span> <span class=\"o\">.<\/span> <span class=\"nv\">$expression<\/span> <span class=\"o\">.<\/span> <span class=\"s1\">&#39;;&#39;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">var_dump<\/span><span class=\"p\">(<\/span><span class=\"nv\">$result<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">Throwable<\/span> <span class=\"nv\">$t<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">echo<\/span> <span class=\"nv\">$t<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">getMessage<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u8f93\u51fa\u7ed3\u679c:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">int(104)\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u65b9\u6848\u4e03\u8bed\u6cd5\u89e3\u6790\">\u65b9\u6848\u4e03\uff1a\u8bed\u6cd5\u89e3\u6790<\/h2>\n<p>\u8fd9\u4e2a\u65b9\u6848\u5c31\u6bd4\u8f83\u9ad8\u5927\u4e0a\u8bb8\u591a\uff0c\u5f53\u7136\u5b9e\u73b0\u65b9\u5f0f\u4e5f\u96be\u4e86\u592a\u591a\u3002\u5177\u4f53\u5c31\u662f\u81ea\u5df1\u5199\u4e2a\u8bed\u6cd5\u89e3\u6790\u5668\uff0c\u5c06\u4ee3\u7801\u5b57\u7b26\u4e32\u89e3\u6790\u6210 <strong>AST \u8bed\u6cd5\u6811<\/strong>\uff0c\u7136\u540e\u518d\u628a\u8bed\u6cd5\u6811\u7684\u5185\u5bb9\u8ba1\u7b97\u6210\u6700\u7ec8\u7684\u503c\u3002<\/p>\n<p>\u600e\u4e48\u5b9e\u73b0\u5462\uff1f\u4e0d\u7528\u6211\u4eec\u81ea\u5df1\u518d\u53bb\u5199\u4e86\uff0c\u5df2\u7ecf\u6709\u5927\u4f6c\u5199\u597d\u4e86\u3002\u5f53\u7136\uff0c\u5982\u679c\u5bf9 AST \u8bed\u6cd5\u89e3\u6790\u611f\u5174\u8da3\uff0c\u90a3\u5b66\u4e60\u4e0b\u5982\u4f55\u5b9e\u73b0\u662f\u6700\u597d\u4e0d\u8fc7\u7684\u4e86\uff0c\u4f1a\u89e3\u6790\u8bed\u6cd5\u4e5f\u5c31\u610f\u5473\u7740\u53ef\u4ee5\u81ea\u5df1\u5199\u95e8\u8bed\u8a00\u4e86\u5440 \ud83d\ude06<\/p>\n<p>GitHub \u4e2d\u6bd4\u8f83\u6709\u540d\u7684 PHP \u5b9e\u73b0\u5982\u4e0b 2 \u4e2a\uff0c\u5f88\u591a\u4ee3\u7801\u9759\u6001\u5206\u6790\u5668\u90fd\u662f\u57fa\u4e8e\u8fd9 2 \u4e2a\u5e93\u5f00\u53d1\u7684\u3002<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/nikic\/PHP-Parser\">PHP-Parser<\/a> - \u6700\u6d41\u884c<\/li>\n<li><a href=\"https:\/\/github.com\/microsoft\/tolerant-php-parser\">Tolerant PHP Parser<\/a> - \u5fae\u8f6f\u5f00\u6e90<\/li>\n<\/ul>\n<p>\u6211\u4eec\u6765\u770b\u4e2a <a href=\"https:\/\/github.com\/nikic\/PHP-Parser\"><code>nikic\/php-parser<\/code><\/a> \u7684\u4f8b\u5b50\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"o\">&lt;?<\/span><span class=\"nx\">php<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">use<\/span> <span class=\"nx\">PhpParser\\Error<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">use<\/span> <span class=\"nx\">PhpParser\\NodeDumper<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">use<\/span> <span class=\"nx\">PhpParser\\ParserFactory<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$code<\/span> <span class=\"o\">=<\/span> <span class=\"s\">&lt;&lt;&lt;&#39;<\/span><span class=\"dl\">CODE<\/span><span class=\"s\">&#39;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">&lt;?php\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">function test($foo)\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">{\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">    var_dump($foo);\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\">}\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s\"><\/span><span class=\"dl\">CODE<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$parser<\/span> <span class=\"o\">=<\/span> <span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nx\">ParserFactory<\/span><span class=\"p\">)<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">create<\/span><span class=\"p\">(<\/span><span class=\"nx\">ParserFactory<\/span><span class=\"o\">::<\/span><span class=\"na\">PREFER_PHP7<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$ast<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$parser<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">parse<\/span><span class=\"p\">(<\/span><span class=\"nv\">$code<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">Error<\/span> <span class=\"nv\">$error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">echo<\/span> <span class=\"s2\">&#34;Parse error: <\/span><span class=\"si\">{<\/span><span class=\"nv\">$error<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">getMessage<\/span><span class=\"p\">()<\/span><span class=\"si\">}<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$dumper<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">NodeDumper<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">echo<\/span> <span class=\"nv\">$dumper<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">dump<\/span><span class=\"p\">(<\/span><span class=\"nv\">$ast<\/span><span class=\"p\">)<\/span> <span class=\"o\">.<\/span> <span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u793a\u4f8b\u8f93\u51fa:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">array(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    0: Stmt_Function(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        byRef: false\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        name: Identifier(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            name: test\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        params: array(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            0: Param(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                type: null\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                byRef: false\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                variadic: false\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                var: Expr_Variable(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    name: foo\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                default: null\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        returnType: null\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        stmts: array(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            0: Stmt_Expression(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                expr: Expr_FuncCall(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    name: Name(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        parts: array(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            0: var_dump\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    args: array(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        0: Arg(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            value: Expr_Variable(\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                name: foo\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            byRef: false\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                            unpack: false\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                        )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                    )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    )\n<\/span><\/span><span class=\"line\"><span class=\"cl\">)\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u7531\u6b64\uff0c\u6211\u4eec\u53ef\u4ee5\u4efb\u610f\u7684\u5b9e\u73b0\u6211\u4eec\u6240\u9700\u7684\uff0c\u4e5f\u4e0d\u7528\u62c5\u5fc3\u5b89\u5168\u6027\u95ee\u9898\u3002<\/p>\n<p>\u6700\u540e\uff0c\u603b\u7ed3\u4e0b\u3002\u6211\u4eec\u5c1d\u8bd5\u4e86\u5f88\u591a\u79cd\u65b9\u6cd5\uff0c\u90fd\u80fd\u89e3\u51b3\u6211\u4eec\u6216\u591a\u6216\u5c11\u7684\u573a\u666f\u9700\u6c42\uff0c\u4f46\u54ea\u4e2a\u6700\u9002\u5408\u9700\u8981\u6211\u4eec\u81ea\u5df1\u53bb\u8003\u91cf\uff0c\u4f46\u601d\u8def\u503c\u5f97\u6211\u4eec\u53bb\u6df1\u5165\u63a2\u8ba8\u3002<\/p>"},{"title":"\u89e3\u51b3 Homebrew \u5b89\u88c5\u8f6f\u4ef6\u4e0b\u8f7d\u5931\u8d25","link":"https:\/\/shockerli.net\/post\/homebrew-install-download-error\/","pubDate":"Sun, 11 Aug 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/homebrew-install-download-error\/","description":"<blockquote>\n<p>\u5f53\u6211\u4eec\u4f7f\u7528 <a href=\"https:\/\/brew.sh\">Homebrew<\/a> \u5b89\u88c5\u8f6f\u4ef6\u65f6\uff0c\u7531\u4e8e\u4e00\u4e9b\u7279\u6b8a\u539f\u56e0\u4f1a\u51fa\u73b0\u8f6f\u4ef6\u5305\u4e0b\u8f7d\u5931\u8d25\u7684\u60c5\u51b5\u3002\u8fd9\u79cd\u8fd8\u5f88\u5e38\u89c1\uff0c\u6211\u4eec\u6ca1\u6cd5\u6539\u53d8\u73af\u5883\uff0c\u4f46\u5374\u53ef\u4ee5\u53d6\u5de7\u7684\u89e3\u51b3\uff0c\u90a3\u5c31\u662f\u5229\u7528 Homebrew \u7f13\u5b58\u7684\u7279\u6027\uff0c\u624b\u52a8\u9884\u5148\u4e0b\u8f7d\u8f6f\u4ef6\u3002<\/p>\n<\/blockquote>\n<h2 id=\"\u65b9\u6cd5\u4e00-\u624b\u52a8\u4e0b\u8f7d\u8f6f\u4ef6\u5305\u5230\u7f13\u5b58\u76ee\u5f55\">\u65b9\u6cd5\u4e00: \u624b\u52a8\u4e0b\u8f7d\u8f6f\u4ef6\u5305\u5230\u7f13\u5b58\u76ee\u5f55<\/h2>\n<p>\u4ee5\u5b89\u88c5 <code>Dart<\/code> \u4e3a\u4f8b:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ brew install <span class=\"nv\">dart<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Installing dart from dart-lang\/dart\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Downloading https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">curl: <span class=\"o\">(<\/span>56<span class=\"o\">)<\/span> LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno <span class=\"m\">54<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Error: An exception occurred within a child process:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  DownloadError: Failed to download resource <span class=\"s2\">&#34;dart&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Download failed: https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u65e0\u6cd5\u6210\u529f\u4e0b\u8f7d\u5bf9\u5e94\u7684\u8f6f\u4ef6\u5305\uff0c\u4f46 Homebrew \u4f1a\u544a\u77e5\u8f6f\u4ef6\u7684\u4e0b\u8f7d\u5730\u5740:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">Download failed: https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4e8e\u662f\uff0c\u6211\u4eec\u53ef\u4ee5\u624b\u52a8\u4e0b\u8f7d\u8fd9\u4e2a\u8f6f\u4ef6\u3002\u7136\u540e\u6211\u4eec\u83b7\u53d6\u7f13\u5b58\u76ee\u5f55:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ brew --cache\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/Users\/shockerli\/Library\/Caches\/Homebrew\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u628a\u521a\u4e0b\u8f7d\u597d\u7684\u8f6f\u4ef6\u5305\u62f7\u8d1d\u5230\u8fd9\u4e2a\u76ee\u5f55\u4e0b:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ cp ~\/Downloads\/dartsdk-macos-x64-release.zip \/Users\/shockerli\/Library\/Caches\/Homebrew\/\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6211\u4eec\u518d\u6267\u884c\u5b89\u88c5\u547d\u4ee4\uff0c\u4e0d\u51fa\u610f\u5916\uff0c\u90a3\u4e48\u606d\u559c\u4f60\uff0c\u6210\u529f\u89e3\u51b3\u4e86\u95ee\u9898\u3002<\/p>\n<p>\u4f46\u51e1\u662f\u4e5f\u5c31\u6709\u610f\u5916\uff0c\u4e0d\u5e78\u7684\u4f60\u8ddf\u6211\u4e00\u6837\uff0c\u53d1\u73b0\u8fd8\u662f\u62a5\u9519\u4e86:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">$ brew install <span class=\"nv\">dart<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Installing dart from dart-lang\/dart\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Downloading https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">curl: <span class=\"o\">(<\/span>56<span class=\"o\">)<\/span> LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno <span class=\"m\">54<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Error: An exception occurred within a child process:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  DownloadError: Failed to download resource <span class=\"s2\">&#34;dart&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Download failed: https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u90a3\u8be5\u600e\u4e48\u89e3\u51b3\uff1f\u6211\u4eec\u7ed9\u547d\u4ee4\u52a0\u4e2a <code>-v<\/code> \u6253\u5370\u547d\u4ee4\u7684\u8be6\u7ec6\u65e5\u5fd7\u770b\u770b:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">brew install dart -v\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Installing dart from dart-lang\/dart\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/usr\/bin\/sandbox-exec -f \/private\/tmp\/homebrew20190810-60798-mlb2s.sb nice \/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/bin\/ruby -W0 -I \/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/simplecov-cobertura-1.3.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ruby-macho-2.2.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rubocop-rspec-1.35.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rubocop-performance-1.4.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rubocop-0.74.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/unicode-display_width-1.6.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ruby-progressbar-1.10.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-wait-0.0.9\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-retry-0.6.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-its-1.3.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-3.8.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-mocks-3.8.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-expectations-3.8.4\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-core-3.8.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-support-3.8.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ronn-0.7.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rdiscount-2.2.0.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/rdiscount-2.2.0.1:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rainbow-3.0.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/plist-3.5.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/parser-2.6.3.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/parallel_tests-2.29.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/parallel-1.17.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mustache-1.1.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mechanize-2.7.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/webrobots-0.1.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ntlm-http-0.1.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/nokogiri-1.10.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/nokogiri-1.10.3:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mini_portile2-2.4.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/net-http-persistent-3.1.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/net-http-digest_auth-1.4.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mime-types-3.2.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mime-types-data-3.2019.0331\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/jaro_winkler-1.5.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/jaro_winkler-1.5.3:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/http-cookie-1.0.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/hpricot-0.8.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/hpricot-0.8.6:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/domain_name-0.5.20190701\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/unf-0.1.4\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/unf_ext-0.0.7.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/unf_ext-0.0.7.6:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/diff-lcs-1.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/coveralls-0.8.23\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/thor-0.20.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/term-ansicolor-1.7.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/tins-1.21.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/simplecov-0.16.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/simplecov-html-0.10.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/docile-1.3.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/json-2.2.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/json-2.2.0:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/connection_pool-2.2.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/backports-3.15.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ast-2.4.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/activesupport-5.2.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/tzinfo-1.2.5\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/thread_safe-0.3.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/minitest-5.11.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/i18n-1.6.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/concurrent-ruby-1.1.5\/lib:\/Library\/Ruby\/Site\/2.3.0:\/Library\/Ruby\/Site\/2.3.0\/x86_64-darwin18:\/Library\/Ruby\/Site\/2.3.0\/universal-darwin18:\/Library\/Ruby\/Site:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby\/2.3.0:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby\/2.3.0\/x86_64-darwin18:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby\/2.3.0\/universal-darwin18:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/2.3.0:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/2.3.0\/x86_64-darwin18:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/2.3.0\/universal-darwin18:\/usr\/local\/Homebrew\/Library\/Homebrew -- \/usr\/local\/Homebrew\/Library\/Homebrew\/build.rb \/usr\/local\/Homebrew\/Library\/Taps\/dart-lang\/homebrew-dart\/dart.rb --verbose\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Downloading https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/usr\/bin\/curl -q --show-error --user-agent Homebrew\/2.1.9-21-g625a780<span class=\"se\">\\ \\(<\/span>Macintosh<span class=\"se\">\\;\\ <\/span>Intel<span class=\"se\">\\ <\/span>Mac<span class=\"se\">\\ <\/span>OS<span class=\"se\">\\ <\/span>X<span class=\"se\">\\ <\/span>10.14.2<span class=\"se\">\\)\\ <\/span>curl\/7.54.0 --fail --location --remote-time --continue-at <span class=\"m\">0<\/span> --output \/Users\/shockerli\/Library\/Caches\/Homebrew\/downloads\/4d2412a5d84521393e0e1ecdce0662569e13c2c47762093a760939fa9dd4a917--dartsdk-macos-x64-release.zip.incomplete https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current\n<\/span><\/span><span class=\"line\"><span class=\"cl\">                                 Dload  Upload   Total   Spent    Left  Speed\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"m\">0<\/span>     <span class=\"m\">0<\/span>    <span class=\"m\">0<\/span>     <span class=\"m\">0<\/span>    <span class=\"m\">0<\/span>     <span class=\"m\">0<\/span>      <span class=\"m\">0<\/span>      <span class=\"m\">0<\/span> --:--:--  0:00:43 --:--:--     <span class=\"m\">0<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">curl: <span class=\"o\">(<\/span>56<span class=\"o\">)<\/span> LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno <span class=\"m\">60<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Error: An exception occurred within a child process:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  DownloadError: Failed to download resource <span class=\"s2\">&#34;dart&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Download failed: https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6ce8\u610f\u5230\u8fd9\u6761\u4fe1\u606f:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">\/usr\/bin\/curl -q --show-error --user-agent Homebrew\/2.1.9-21-g625a780<span class=\"se\">\\ \\(<\/span>Macintosh<span class=\"se\">\\;\\ <\/span>Intel<span class=\"se\">\\ <\/span>Mac<span class=\"se\">\\ <\/span>OS<span class=\"se\">\\ <\/span>X<span class=\"se\">\\ <\/span>10.14.2<span class=\"se\">\\)\\ <\/span>curl\/7.54.0 --fail --location --remote-time --continue-at <span class=\"m\">0<\/span> --output \/Users\/shockerli\/Library\/Caches\/Homebrew\/downloads\/4d2412a5d84521393e0e1ecdce0662569e13c2c47762093a760939fa9dd4a917--dartsdk-macos-x64-release.zip.incomplete https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6211\u4eec\u770b\u5230 Homebrew \u4e0b\u8f7d dart \u7684\u7f13\u5b58\u5730\u5740\u4e3a:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">\/Users\/shockerli\/Library\/Caches\/Homebrew\/downloads\/4d2412a5d84521393e0e1ecdce0662569e13c2c47762093a760939fa9dd4a917--dartsdk-macos-x64-release.zip.incomplete\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><code>XXX.incomplete<\/code> \u8868\u793a\u4e0b\u8f7d\u672a\u5b8c\u6210\uff0c\u4f46\u8fd9\u662f Homebrew \u671f\u671b\u7684\u4e0b\u8f7d\u6587\u4ef6\u8def\u5f84\u3002<\/p>\n<p>\u90a3\u6211\u4eec\u5c31\u5c06\u4e0b\u8f7d\u7684\u8f6f\u4ef6\u5305\u62f7\u8d1d\u5230\u8fd9\u4e2a\u8def\u5f84\uff0c\u5e76\u53bb\u9664 <code>.incomplete<\/code>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">mv ~\/Downloads\/dartsdk-macos-x64-release.zip \/Users\/shockerli\/Library\/Caches\/Homebrew\/downloads\/4d2412a5d84521393e0e1ecdce0662569e13c2c47762093a760939fa9dd4a917--dartsdk-macos-x64-release.zip\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6b64\u65f6\u6211\u4eec\u518d\u6267\u884c\u5b89\u88c5\u547d\u4ee4:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-bash\" data-lang=\"bash\"><span class=\"line\"><span class=\"cl\">brew install dart -v\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Installing dart from dart-lang\/dart\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/usr\/bin\/sandbox-exec -f \/private\/tmp\/homebrew20190811-62563-1rnamem.sb nice \/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/bin\/ruby -W0 -I \/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/simplecov-cobertura-1.3.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ruby-macho-2.2.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rubocop-rspec-1.35.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rubocop-performance-1.4.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rubocop-0.74.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/unicode-display_width-1.6.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ruby-progressbar-1.10.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-wait-0.0.9\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-retry-0.6.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-its-1.3.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-3.8.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-mocks-3.8.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-expectations-3.8.4\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-core-3.8.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-support-3.8.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ronn-0.7.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rdiscount-2.2.0.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/rdiscount-2.2.0.1:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rainbow-3.0.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/plist-3.5.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/parser-2.6.3.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/parallel_tests-2.29.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/parallel-1.17.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mustache-1.1.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mechanize-2.7.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/webrobots-0.1.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ntlm-http-0.1.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/nokogiri-1.10.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/nokogiri-1.10.3:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mini_portile2-2.4.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/net-http-persistent-3.1.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/net-http-digest_auth-1.4.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mime-types-3.2.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mime-types-data-3.2019.0331\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/jaro_winkler-1.5.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/jaro_winkler-1.5.3:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/http-cookie-1.0.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/hpricot-0.8.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/hpricot-0.8.6:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/domain_name-0.5.20190701\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/unf-0.1.4\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/unf_ext-0.0.7.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/unf_ext-0.0.7.6:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/diff-lcs-1.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/coveralls-0.8.23\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/thor-0.20.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/term-ansicolor-1.7.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/tins-1.21.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/simplecov-0.16.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/simplecov-html-0.10.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/docile-1.3.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/json-2.2.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/json-2.2.0:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/connection_pool-2.2.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/backports-3.15.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ast-2.4.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/activesupport-5.2.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/tzinfo-1.2.5\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/thread_safe-0.3.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/minitest-5.11.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/i18n-1.6.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/concurrent-ruby-1.1.5\/lib:\/Library\/Ruby\/Site\/2.3.0:\/Library\/Ruby\/Site\/2.3.0\/x86_64-darwin18:\/Library\/Ruby\/Site\/2.3.0\/universal-darwin18:\/Library\/Ruby\/Site:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby\/2.3.0:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby\/2.3.0\/x86_64-darwin18:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby\/2.3.0\/universal-darwin18:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/2.3.0:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/2.3.0\/x86_64-darwin18:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/2.3.0\/universal-darwin18:\/usr\/local\/Homebrew\/Library\/Homebrew -- \/usr\/local\/Homebrew\/Library\/Homebrew\/build.rb \/usr\/local\/Homebrew\/Library\/Taps\/dart-lang\/homebrew-dart\/dart.rb --verbose\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Downloading https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Already downloaded: \/Users\/shockerli\/Library\/Caches\/Homebrew\/downloads\/4d2412a5d84521393e0e1ecdce0662569e13c2c47762093a760939fa9dd4a917--dartsdk-macos-x64-release.zip\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Verifying 4d2412a5d84521393e0e1ecdce0662569e13c2c47762093a760939fa9dd4a917--dartsdk-macos-x64-release.zip checksum\n<\/span><\/span><span class=\"line\"><span class=\"cl\">unzip \/Users\/shockerli\/Library\/Caches\/Homebrew\/downloads\/4d2412a5d84521393e0e1ecdce0662569e13c2c47762093a760939fa9dd4a917--dartsdk-macos-x64-release.zip -d \/private\/tmp\/d20190811-62564-1me3qph\n<\/span><\/span><span class=\"line\"><span class=\"cl\">cp -pR \/private\/tmp\/d20190811-62564-1me3qph\/dart-sdk\/. \/private\/tmp\/dart-20190811-62564-hu8qrn\/dart-sdk\n<\/span><\/span><span class=\"line\"><span class=\"cl\">chmod -Rf +w \/private\/tmp\/d20190811-62564-1me3qph\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; <span class=\"nv\">Cleaning<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Finishing up\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s ..\/Cellar\/dart\/2.4.1\/bin\/dart dart\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s ..\/Cellar\/dart\/2.4.1\/bin\/dart2aot dart2aot\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s ..\/Cellar\/dart\/2.4.1\/bin\/dart2js dart2js\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s ..\/Cellar\/dart\/2.4.1\/bin\/dartanalyzer dartanalyzer\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s ..\/Cellar\/dart\/2.4.1\/bin\/dartaotruntime dartaotruntime\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s ..\/Cellar\/dart\/2.4.1\/bin\/dartdevc dartdevc\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s ..\/Cellar\/dart\/2.4.1\/bin\/dartdoc dartdoc\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s ..\/Cellar\/dart\/2.4.1\/bin\/dartfmt dartfmt\n<\/span><\/span><span class=\"line\"><span class=\"cl\">ln -s ..\/Cellar\/dart\/2.4.1\/bin\/pub pub\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\/usr\/bin\/sandbox-exec -f \/private\/tmp\/homebrew20190811-62996-w9cwbv.sb nice \/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/bin\/ruby -W0 -I \/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/simplecov-cobertura-1.3.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ruby-macho-2.2.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rubocop-rspec-1.35.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rubocop-performance-1.4.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rubocop-0.74.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/unicode-display_width-1.6.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ruby-progressbar-1.10.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-wait-0.0.9\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-retry-0.6.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-its-1.3.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-3.8.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-mocks-3.8.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-expectations-3.8.4\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-core-3.8.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rspec-support-3.8.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ronn-0.7.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rdiscount-2.2.0.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/rdiscount-2.2.0.1:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/rainbow-3.0.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/plist-3.5.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/parser-2.6.3.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/parallel_tests-2.29.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/parallel-1.17.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mustache-1.1.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mechanize-2.7.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/webrobots-0.1.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ntlm-http-0.1.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/nokogiri-1.10.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/nokogiri-1.10.3:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mini_portile2-2.4.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/net-http-persistent-3.1.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/net-http-digest_auth-1.4.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mime-types-3.2.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/mime-types-data-3.2019.0331\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/jaro_winkler-1.5.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/jaro_winkler-1.5.3:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/http-cookie-1.0.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/hpricot-0.8.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/hpricot-0.8.6:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/domain_name-0.5.20190701\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/unf-0.1.4\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/unf_ext-0.0.7.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/unf_ext-0.0.7.6:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/diff-lcs-1.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/coveralls-0.8.23\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/thor-0.20.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/term-ansicolor-1.7.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/tins-1.21.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/simplecov-0.16.1\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/simplecov-html-0.10.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/docile-1.3.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/json-2.2.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/extensions\/universal-darwin-18\/2.3.0\/json-2.2.0:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/connection_pool-2.2.2\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/backports-3.15.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/ast-2.4.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/activesupport-5.2.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/tzinfo-1.2.5\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/thread_safe-0.3.6\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/minitest-5.11.3\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/i18n-1.6.0\/lib:\/usr\/local\/Homebrew\/Library\/Homebrew\/vendor\/bundle\/bundler\/..\/ruby\/2.3.0\/gems\/concurrent-ruby-1.1.5\/lib:\/Library\/Ruby\/Site\/2.3.0:\/Library\/Ruby\/Site\/2.3.0\/x86_64-darwin18:\/Library\/Ruby\/Site\/2.3.0\/universal-darwin18:\/Library\/Ruby\/Site:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby\/2.3.0:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby\/2.3.0\/x86_64-darwin18:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby\/2.3.0\/universal-darwin18:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/vendor_ruby:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/2.3.0:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/2.3.0\/x86_64-darwin18:\/System\/Library\/Frameworks\/Ruby.framework\/Versions\/2.3\/usr\/lib\/ruby\/2.3.0\/universal-darwin18:\/usr\/local\/Homebrew\/Library\/Homebrew -- \/usr\/local\/Homebrew\/Library\/Homebrew\/postinstall.rb \/usr\/local\/Homebrew\/Library\/Taps\/dart-lang\/homebrew-dart\/dart.rb -v\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Caveats\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Please note the path to the Dart SDK:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  \/usr\/local\/opt\/dart\/libexec\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"o\">==<\/span>&gt; Summary\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\ud83c\udf7a  \/usr\/local\/Cellar\/dart\/2.4.1: <span class=\"m\">387<\/span> files, 344.4MB, built in <span class=\"m\">3<\/span> minutes <span class=\"m\">11<\/span> seconds\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>Homebrew \u6210\u529f\u7528\u5230\u4e86\u7f13\u5b58\u5e76\u5b89\u88c5\u6210\u529f~\u795d\u8d3a\u4f60\ud83d\ude06<\/p>\n<h2 id=\"\u65b9\u6cd5\u4e8c-\u4fee\u6539\u8f6f\u4ef6\u5305\u7684\u4e0b\u8f7d\u5730\u5740\">\u65b9\u6cd5\u4e8c: \u4fee\u6539\u8f6f\u4ef6\u5305\u7684\u4e0b\u8f7d\u5730\u5740<\/h2>\n<p>\u5177\u4f53\u53ef\u89c1 <code>brew edit<\/code> \u547d\u4ee4<\/p>\n<p>\u6bd4\u5982\u4fee\u6539 dart \u5305\uff0c<code>brew edit dart<\/code>:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><span class=\"lnt\">25\n<\/span><span class=\"lnt\">26\n<\/span><span class=\"lnt\">27\n<\/span><span class=\"lnt\">28\n<\/span><span class=\"lnt\">29\n<\/span><span class=\"lnt\">30\n<\/span><span class=\"lnt\">31\n<\/span><span class=\"lnt\">32\n<\/span><span class=\"lnt\">33\n<\/span><span class=\"lnt\">34\n<\/span><span class=\"lnt\">35\n<\/span><span class=\"lnt\">36\n<\/span><span class=\"lnt\">37\n<\/span><span class=\"lnt\">38\n<\/span><span class=\"lnt\">39\n<\/span><span class=\"lnt\">40\n<\/span><span class=\"lnt\">41\n<\/span><span class=\"lnt\">42\n<\/span><span class=\"lnt\">43\n<\/span><span class=\"lnt\">44\n<\/span><span class=\"lnt\">45\n<\/span><span class=\"lnt\">46\n<\/span><span class=\"lnt\">47\n<\/span><span class=\"lnt\">48\n<\/span><span class=\"lnt\">49\n<\/span><span class=\"lnt\">50\n<\/span><span class=\"lnt\">51\n<\/span><span class=\"lnt\">52\n<\/span><span class=\"lnt\">53\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-ruby\" data-lang=\"ruby\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">class<\/span> <span class=\"nc\">Dart<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">Formula<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"n\">desc<\/span> <span class=\"s2\">&#34;The Dart SDK&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"n\">homepage<\/span> <span class=\"s2\">&#34;https:\/\/www.dartlang.org\/&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"n\">version<\/span> <span class=\"s2\">&#34;2.4.1&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">if<\/span> <span class=\"no\">Hardware<\/span><span class=\"o\">::<\/span><span class=\"no\">CPU<\/span><span class=\"o\">.<\/span><span class=\"n\">is_64_bit?<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">url<\/span> <span class=\"s2\">&#34;https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-x64-release.zip&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">sha256<\/span> <span class=\"s2\">&#34;62006127bd3acd1b7eb2e4fc7baed061eb19b80c4ba4af481db5244a081fff3e&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">else<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">url<\/span> <span class=\"s2\">&#34;https:\/\/storage.googleapis.com\/dart-archive\/channels\/stable\/release\/2.4.1\/sdk\/dartsdk-macos-ia32-release.zip&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">sha256<\/span> <span class=\"s2\">&#34;3591578902f3b3ee155aa90bf893f3d0b50fd12567454a8f980440fa8dd1ff23&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">end<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"n\">devel<\/span> <span class=\"k\">do<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">version<\/span> <span class=\"s2\">&#34;2.5.0-dev.1.0&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"no\">Hardware<\/span><span class=\"o\">::<\/span><span class=\"no\">CPU<\/span><span class=\"o\">.<\/span><span class=\"n\">is_64_bit?<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"n\">url<\/span> <span class=\"s2\">&#34;https:\/\/storage.googleapis.com\/dart-archive\/channels\/dev\/release\/2.5.0-dev.1.0\/sdk\/dartsdk-macos-x64-release.zip&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"n\">sha256<\/span> <span class=\"s2\">&#34;2fc3967437e8a3e2f5ee9d0abbf15ebf5823fdc6a648ee58a72bed550f93281f&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">else<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"n\">url<\/span> <span class=\"s2\">&#34;https:\/\/storage.googleapis.com\/dart-archive\/channels\/dev\/release\/2.5.0-dev.1.0\/sdk\/dartsdk-macos-ia32-release.zip&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"n\">sha256<\/span> <span class=\"s2\">&#34;6c0b7c6719ded33eb9ada8a6f52d80b3fe94ab43e008bb432ef8f7fd4997145b&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">end<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">end<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">def<\/span> <span class=\"nf\">install<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">libexec<\/span><span class=\"o\">.<\/span><span class=\"n\">install<\/span> <span class=\"no\">Dir<\/span><span class=\"o\">[<\/span><span class=\"s2\">&#34;*&#34;<\/span><span class=\"o\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">bin<\/span><span class=\"o\">.<\/span><span class=\"n\">install_symlink<\/span> <span class=\"s2\">&#34;<\/span><span class=\"si\">#{<\/span><span class=\"n\">libexec<\/span><span class=\"si\">}<\/span><span class=\"s2\">\/bin\/dart&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">bin<\/span><span class=\"o\">.<\/span><span class=\"n\">write_exec_script<\/span> <span class=\"no\">Dir<\/span><span class=\"o\">[<\/span><span class=\"s2\">&#34;<\/span><span class=\"si\">#{<\/span><span class=\"n\">libexec<\/span><span class=\"si\">}<\/span><span class=\"s2\">\/bin\/{pub,dart?*}&#34;<\/span><span class=\"o\">]<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">end<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">def<\/span> <span class=\"nf\">shim_script<\/span><span class=\"p\">(<\/span><span class=\"n\">target<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"o\">&lt;&lt;~<\/span><span class=\"no\">EOS<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"c1\">#!\/usr\/bin\/env bash<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"nb\">exec<\/span> <span class=\"s2\">&#34;<\/span><span class=\"si\">#{<\/span><span class=\"n\">prefix<\/span><span class=\"si\">}<\/span><span class=\"s2\">\/<\/span><span class=\"si\">#{<\/span><span class=\"n\">target<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#34;<\/span> <span class=\"s2\">&#34;$@&#34;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"no\">EOS<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">end<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">def<\/span> <span class=\"nf\">caveats<\/span><span class=\"p\">;<\/span> <span class=\"o\">&lt;&lt;~<\/span><span class=\"no\">EOS<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"no\">Please<\/span> <span class=\"n\">note<\/span> <span class=\"n\">the<\/span> <span class=\"n\">path<\/span> <span class=\"n\">to<\/span> <span class=\"n\">the<\/span> <span class=\"no\">Dart<\/span> <span class=\"ss\">SDK<\/span><span class=\"p\">:<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"c1\">#{opt_libexec}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"no\">EOS<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">end<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"nb\">test<\/span> <span class=\"k\">do<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">(<\/span><span class=\"n\">testpath<\/span><span class=\"o\">\/<\/span><span class=\"s2\">&#34;sample.dart&#34;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">write<\/span> <span class=\"o\">&lt;&lt;~<\/span><span class=\"no\">EOS<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"n\">void<\/span> <span class=\"n\">main<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nb\">print<\/span><span class=\"p\">(<\/span><span class=\"n\">r<\/span><span class=\"s2\">&#34;test message&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">      <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"no\">EOS<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"n\">assert_equal<\/span> <span class=\"s2\">&#34;test message<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">,<\/span> <span class=\"n\">shell_output<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;<\/span><span class=\"si\">#{<\/span><span class=\"n\">bin<\/span><span class=\"si\">}<\/span><span class=\"s2\">\/dart sample.dart&#34;<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">  <span class=\"k\">end<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">end<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6211\u4eec\u628a tap \u91cc\u5305\u5bf9\u5e94\u7684 url \u7ed9\u6539\u6210\u53ef\u7528\u7684\u5730\u5740\u5373\u53ef\u3002\u5f53\u7136\u8fd9\u79cd\u65b9\u6cd5\u7684\u524d\u63d0\u662f\u6709\u53ef\u7528\u7684\u4e0b\u8f7d\u5730\u5740\uff0c\u6bd4\u5982\u6e05\u534e\u5927\u5b66\u3001\u4e2d\u79d1\u5927\u7b49\u56fd\u5185\u955c\u50cf\u6e90\u63d0\u4f9b\u7684\u52a0\u901f\u5730\u5740\uff0c\u5426\u5219\u4f9d\u7136\u65e0\u6548\u3002<\/p>"},{"title":"\u4f60\u6240\u4e0d\u77e5\u7684 PHP \u65ad\u8a00(assert)","link":"https:\/\/shockerli.net\/post\/php-assert\/","pubDate":"Wed, 29 May 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/php-assert\/","description":"<blockquote>\n<p>PHP \u4e2d\u7684\u65ad\u8a00\u5e38\u7528\u4e8e\u8c03\u8bd5\uff0c\u68c0\u67e5\u4e00\u4e2a\u8868\u8fbe\u5f0f\u6216\u8bed\u53e5\u662f\u5426\u4e3a FALSE\u3002\u672c\u6587\u5e26\u4f60\u91cd\u65b0\u8ba4\u8bc6 PHP <code>assert()<\/code> \u51fd\u6570\u7684\u795e(Qi)\u901a(Yin)\u5e7f(Ji)\u5927(Qiao)\u3002<\/p>\n<p>\u672c\u6587\u57fa\u4e8e PHP Version 7.1.28<\/p>\n<\/blockquote>\n<h2 id=\"\u4ec0\u4e48\u662f\u65ad\u8a00\">\u4ec0\u4e48\u662f\u65ad\u8a00<\/h2>\n<p>\u7f16\u5199\u7a0b\u5e8f\u65f6\uff0c\u5e38\u4f1a\u505a\u51fa\u4e00\u5b9a\u7684\u5047\u8bbe\uff0c\u90a3\u65ad\u8a00\u5c31\u662f\u7528\u6765\u6355\u83b7\u5047\u8bbe\u7684\u5f02\u5e38\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u8ba4\u4e3a\u65ad\u8a00\u662f\u5f02\u5e38\u7684\u4e00\u79cd\u7279\u6b8a\u5f62\u5f0f\u3002<\/p>\n<p>\u65ad\u8a00\u4e00\u822c\u7528\u4e8e\u7a0b\u5e8f\u6267\u884c\u7ed3\u6784\u7684\u5224\u65ad\uff0c\u4e0d\u53ef\u8ba9\u65ad\u8a00\u5904\u7406\u4e1a\u52a1\u6d41\u7a0b\u3002\u7528\u7684\u6700\u591a\u7684\u573a\u666f\u5c31\u662f\u5355\u5143\u6d4b\u8bd5\uff0c\u4e00\u822c\u7684\u5355\u5143\u6d4b\u8bd5\u6846\u67b6\u90fd\u91c7\u7528\u4e86\u65ad\u8a00\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">assert<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">2<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u8fd0\u884c\u7ed3\u679c:\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ Warning: assert(): assert(1 == 2) failed in \/Users\/shocker\/Desktop\/demo.php on line 25\n<\/span><\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"php-\u4e2d\u7684\u65ad\u8a00\">PHP \u4e2d\u7684\u65ad\u8a00<\/h2>\n<p>\u5728 PHP \u4e2d\uff0c\u91c7\u7528 <a href=\"https:\/\/www.php.net\/manual\/zh\/function.assert.php\">assert()<\/a> \u51fd\u6570\u5bf9\u8868\u8fbe\u5f0f\u8fdb\u884c\u65ad\u8a00\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ PHP 5\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"nx\">assert<\/span> <span class=\"p\">(<\/span> <span class=\"nx\">mixed<\/span> <span class=\"nv\">$assertion<\/span> <span class=\"p\">[,<\/span> <span class=\"nx\">string<\/span> <span class=\"nv\">$description<\/span> <span class=\"p\">]<\/span> <span class=\"p\">)<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">bool<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ PHP 7\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"nx\">assert<\/span> <span class=\"p\">(<\/span> <span class=\"nx\">mixed<\/span> <span class=\"nv\">$assertion<\/span> <span class=\"p\">[,<\/span> <span class=\"nx\">Throwable<\/span> <span class=\"nv\">$exception<\/span> <span class=\"p\">]<\/span> <span class=\"p\">)<\/span> <span class=\"o\">:<\/span> <span class=\"nx\">bool<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u4f20\u7edf\u7684\u65ad\u8a00\u65b9\u5f0f-php-5--7\">\u4f20\u7edf\u7684\u65ad\u8a00\u65b9\u5f0f (PHP 5 &amp; 7)<\/h3>\n<blockquote>\n<p>\u53c2\u6570 assertion \u65e2\u652f\u6301\u8868\u8fbe\u5f0f\uff0c\u4e5f\u652f\u6301\u8868\u8fbe\u5f0f\u5b57\u7b26\u4e32\uff08\u67d0\u4e9b\u7279\u5b9a\u7684\u573a\u666f\u4f1a\u7528\u5230\uff0c\u6bd4\u5982\u5224\u65ad\u67d0\u4e2a\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u662f\u5426\u5408\u6cd5\uff09<\/p>\n<\/blockquote>\n<p>\u5982\u679c assertion \u662f\u5b57\u7b26\u4e32\uff0c\u5b83\u5c06\u4f1a\u88ab <code>assert()<\/code> \u5f53\u505a PHP \u4ee3\u7801\u6765\u6267\u884c\u3002assertion \u662f\u5b57\u7b26\u4e32\u7684\u4f18\u52bf\u662f\u5f53\u7981\u7528\u65ad\u8a00\u65f6\u5b83\u7684\u5f00\u9500\u4f1a\u66f4\u5c0f\uff0c<strong>\u5e76\u4e14\u5728\u65ad\u8a00\u5931\u8d25\u65f6\u6d88\u606f\u4f1a\u5305\u542b assertion \u8868\u8fbe\u5f0f<\/strong>\u3002<\/p>\n<p>\u65ad\u8a00\u8fd9\u4e2a\u529f\u80fd\u5e94\u8be5\u53ea\u88ab\u7528\u6765\u8c03\u8bd5\u3002\u4f60\u5e94\u8be5\u7528\u4e8e\u5b8c\u6574\u6027\u68c0\u67e5\u65f6\u6d4b\u8bd5\u6761\u4ef6\u662f\u5426\u59cb\u7ec8\u5e94\u8be5\u4e3a TRUE\uff0c\u6765\u6307\u793a\u67d0\u4e9b\u7a0b\u5e8f\u9519\u8bef\uff0c\u6216\u8005\u68c0\u67e5\u5177\u4f53\u529f\u80fd\u7684\u5b58\u5728\uff08\u7c7b\u4f3c\u6269\u5c55\u51fd\u6570\u6216\u7279\u5b9a\u7684\u7cfb\u7edf\u9650\u5236\u548c\u529f\u80fd\uff09\u3002<\/p>\n<p>\u65ad\u8a00\u4e0d\u5e94\u8be5\u7528\u4e8e\u666e\u901a\u8fd0\u884c\u65f6\u64cd\u4f5c\uff0c\u7c7b\u4f3c\u8f93\u5165\u53c2\u6570\u7684\u68c0\u67e5\u3002\u4f5c\u4e3a\u4e00\u4e2a\u7ecf\u9a8c\u6cd5\u5219\uff0c\u5728\u65ad\u8a00\u7981\u7528\u65f6\u4f60\u7684\u4ee3\u7801\u4e5f\u5e94\u8be5\u80fd\u591f\u6b63\u786e\u5730\u8fd0\u884c\u3002<\/p>\n<p><strong>\u4f7f\u7528\u793a\u4f8b:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">function<\/span> <span class=\"nf\">my_assert_handler<\/span><span class=\"p\">(<\/span><span class=\"nv\">$file<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$line<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$code<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$desc<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">echo<\/span> <span class=\"s2\">&#34;Assertion Failed:\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">    File &#39;<\/span><span class=\"si\">{<\/span><span class=\"nv\">$file<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#39;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">    Line &#39;<\/span><span class=\"si\">{<\/span><span class=\"nv\">$line<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#39;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">    Code &#39;<\/span><span class=\"si\">{<\/span><span class=\"nv\">$code<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#39;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">    Desc &#39;<\/span><span class=\"si\">{<\/span><span class=\"nv\">$desc<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#39;\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u8bbe\u7f6e\u56de\u8c03\u51fd\u6570\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"nx\">assert_options<\/span><span class=\"p\">(<\/span><span class=\"nx\">ASSERT_CALLBACK<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;my_assert_handler&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\">\/\/ \u8ba9\u4e00\u5219\u65ad\u8a00\u5931\u8d25\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span><span class=\"nx\">assert<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;1 == 2&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;1 \u4e0d\u53ef\u80fd\u7b49\u4e8e 2&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u8fd0\u884c\u7ed3\u679c:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">Assertion Failed:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    File &#39;\/Users\/shocker\/Desktop\/demo.php&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    Line &#39;29&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    Code &#39;1 == 2&#39;\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    Desc &#39;1 \u4e0d\u53ef\u80fd\u7b49\u4e8e 2&#39;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u652f\u6301\u5f02\u5e38\u7684\u65ad\u8a00-\u4ec5-php-7\">\u652f\u6301\u5f02\u5e38\u7684\u65ad\u8a00 (\u4ec5 PHP 7)<\/h3>\n<p>\u5728 PHP 7 \u4e2d\uff0c<code>assert()<\/code> \u662f\u4e00\u4e2a\u8bed\u8a00\u7ed3\u6784\uff0c\u5141\u8bb8\u5728\u4e0d\u540c\u73af\u5883\u4e2d\u751f\u6548\u4e0d\u540c\u7684\u63aa\u65bd\uff0c\u5177\u4f53\u53ef\u89c1 <a href=\"https:\/\/www.php.net\/manual\/zh\/ini.core.php#ini.zend.assertions\">zend.assertions<\/a> \u914d\u7f6e\u3002<\/p>\n<p>\u53e6\u5916\uff0c\u8fd8\u652f\u6301\u901a\u8fc7 <a href=\"https:\/\/www.php.net\/manual\/en\/class.assertionerror.php\">AssertionError<\/a> \u6355\u83b7\u9519\u8bef\u3002<\/p>\n<p><strong>\u4f7f\u7528\u793a\u4f8b:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><span class=\"lnt\">8\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">assert_options<\/span><span class=\"p\">(<\/span><span class=\"nx\">ASSERT_EXCEPTION<\/span><span class=\"p\">,<\/span> <span class=\"mi\">1<\/span><span class=\"p\">);<\/span> <span class=\"c1\">\/\/ \u5728\u65ad\u8a00\u5931\u8d25\u65f6\u4ea7\u751f\u5f02\u5e38\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"c1\">\/\/ \u7528 AssertionError \u5f02\u5e38\u66ff\u4ee3\u666e\u901a\u5b57\u7b26\u4e32\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"c1\"><\/span>    <span class=\"nx\">assert<\/span><span class=\"p\">(<\/span><span class=\"k\">true<\/span> <span class=\"o\">==<\/span> <span class=\"k\">false<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nx\">AssertionError<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;True is not false!&#39;<\/span><span class=\"p\">));<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">Throwable<\/span> <span class=\"nv\">$e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">echo<\/span> <span class=\"nv\">$e<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">getMessage<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u8fd0\u884c\u7ed3\u679c:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">True is not false!\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u5bf9\u65ad\u8a00\u884c\u4e3a\u8fdb\u884c\u63a7\u5236\">\u5bf9\u65ad\u8a00\u884c\u4e3a\u8fdb\u884c\u63a7\u5236<\/h2>\n<p>PHP \u652f\u6301 <a href=\"https:\/\/www.php.net\/manual\/zh\/function.assert-options.php\">assert_options()<\/a> \u51fd\u6570\u5bf9\u65ad\u8a00\u8fdb\u884c\u914d\u7f6e\uff0c\u4e5f\u53ef\u7528 ini \u8fdb\u884c\u8bbe\u7f6e<\/p>\n<blockquote>\n<p>\u4ee5\u4e0b\u914d\u7f6e\u4e2d\uff0c\u5e38\u91cf\u6807\u5fd7\u7528\u4e8e <code>assert_options()<\/code> \u51fd\u6570\u8fdb\u884c\u914d\u7f6e\uff0cini \u8bbe\u7f6e\u7528\u4e8e <code>ini_set()<\/code> \u51fd\u6570\u8bbe\u7f6e\uff0c\u6548\u679c\u4e00\u6837<\/p>\n<\/blockquote>\n<table>\n<thead>\n<tr>\n<th>\u6807\u5fd7<\/th>\n<th>INI \u8bbe\u7f6e<\/th>\n<th style=\"text-align:center\">\u9ed8\u8ba4\u503c<\/th>\n<th>\u63cf\u8ff0<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>ASSERT_ACTIVE<\/td>\n<td>assert.active<\/td>\n<td style=\"text-align:center\">&ldquo;1&rdquo;<\/td>\n<td>\u542f\u7528 <code>assert()<\/code> \u65ad\u8a00<\/td>\n<\/tr>\n<tr>\n<td>ASSERT_WARNING<\/td>\n<td>assert.warning<\/td>\n<td style=\"text-align:center\">&ldquo;1&rdquo;<\/td>\n<td>\u4e3a\u6bcf\u4e2a\u5931\u8d25\u7684\u65ad\u8a00\u4ea7\u751f\u4e00\u4e2a PHP \u8b66\u544a\uff08warning\uff09<\/td>\n<\/tr>\n<tr>\n<td>ASSERT_BAIL<\/td>\n<td>assert.bail<\/td>\n<td style=\"text-align:center\">&ldquo;0&rdquo;<\/td>\n<td>\u5728\u65ad\u8a00\u5931\u8d25\u65f6\u4e2d\u6b62\u6267\u884c<\/td>\n<\/tr>\n<tr>\n<td>ASSERT_QUIET_EVAL<\/td>\n<td>assert.quiet_eval<\/td>\n<td style=\"text-align:center\">&ldquo;0&rdquo;<\/td>\n<td>\u5728\u65ad\u8a00\u8868\u8fbe\u5f0f\u6c42\u503c\u65f6\u7981\u7528 error_reporting<\/td>\n<\/tr>\n<tr>\n<td>ASSERT_CALLBACK<\/td>\n<td>assert.callback<\/td>\n<td style=\"text-align:center\">NULL<\/td>\n<td>\u65ad\u8a00<strong>\u5931\u8d25\u65f6<\/strong>\u8c03\u7528\u8be5\u56de\u8c03\u51fd\u6570<\/td>\n<\/tr>\n<tr>\n<td>ASSERT_EXCEPTION<\/td>\n<td>assert.exception<\/td>\n<td style=\"text-align:center\">&ldquo;0&rdquo;<\/td>\n<td>\u5728\u65ad\u8a00\u5931\u8d25\u65f6\u4ea7\u751f <a href=\"https:\/\/www.php.net\/manual\/en\/class.assertionerror.php\">AssertionError<\/a> \u5f02\u5e38 \uff08\u81ea PHP 7.0.0 \u8d77\u6709\u6548\uff09<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><code>zend.assertions<\/code> \u662f\u4e2a\u7279\u6b8a\u7684\u914d\u7f6e\uff08PHP &gt;= 7.0.0 \u652f\u6301\uff09\uff0c<strong>\u63a7\u5236\u4e0d\u540c\u8fd0\u884c\u73af\u5883\u4e0b\u65ad\u8a00\u7684\u884c\u4e3a<\/strong>\uff0c\u4ec5\u53ef\u7528 <code>ini_set()<\/code> \u8fdb\u884c\u8bbe\u7f6e\u3002\u5e76\u4e14\uff0c\u8bbe\u7f6e\u4e86<code>1<\/code>\u5c31\u4e0d\u80fd\u518d\u8bbe\u7f6e\u4e3a<code>-1<\/code>\uff0c\u53cd\u4e4b\u4ea6\u7136\uff0c\u5176\u4ed6\u4e0d\u53d7\u9650\u3002<\/p>\n<blockquote>\n<ul>\n<li><strong>1<\/strong>: \u7f16\u8bd1\u4ee3\u7801\uff0c\u5e76\u6267\u884c(\u5f00\u53d1\u6a21\u5f0f)<\/li>\n<li><strong>0<\/strong>: \u7f16\u8f91\u4ee3\u7801\uff0c\u4f46\u8fd0\u884c\u65f6\u8df3\u8fc7<\/li>\n<li><strong>-1<\/strong>: \u4e0d\u7f16\u8bd1\u4ee3\u7801(\u751f\u4ea7\u6a21\u5f0f)<\/li>\n<\/ul>\n<\/blockquote>\n<h2 id=\"\u7248\u672c\u7684\u4e0d\u517c\u5bb9\">\u7248\u672c\u7684\u4e0d\u517c\u5bb9<\/h2>\n<ul>\n<li>\n<p>PHP &gt;= 5.4.8\uff0cdescription \u53ef\u4f5c\u4e3a\u7b2c\u56db\u4e2a\u53c2\u6570\u63d0\u4f9b\u7ed9 ASSERT_CALLBACK \u6a21\u5f0f\u91cc\u7684\u56de\u8c03\u51fd\u6570<\/p>\n<\/li>\n<li>\n<p>\u5728 PHP 5 \u4e2d\uff0c\u53c2\u6570 assertion \u5fc5\u987b\u662f\u53ef\u6267\u884c\u7684\u5b57\u7b26\u4e32\uff0c\u6216\u8005\u8fd0\u884c\u7ed3\u679c\u4e3a\u5e03\u5c14\u503c\u7684\u8868\u8fbe\u5f0f<\/p>\n<\/li>\n<li>\n<p>\u5728 PHP 7 \u4e2d\uff0c\u53c2\u6570 assertion \u53ef\u4ee5\u662f\u4efb\u610f\u8868\u8fbe\u5f0f\uff0c\u5e76\u7528\u5176\u8fd0\u7b97\u7ed3\u679c\u4f5c\u4e3a\u65ad\u8a00\u7684\u4f9d\u636e<\/p>\n<\/li>\n<li>\n<p>\u5728 PHP 7 \u4e2d\uff0c\u53c2\u6570 exception \u53ef\u4ee5\u662f\u4e2a <a href=\"https:\/\/www.php.net\/manual\/en\/class.throwable.php\">Throwable<\/a> \u5bf9\u8c61\uff0c\u7528\u4e8e\u6355\u83b7\u8868\u8fbe\u5f0f\u8fd0\u884c\u9519\u8bef\u6216\u65ad\u8a00\u7ed3\u679c\u4e3a\u5931\u8d25\u3002(\u5f53\u7136 <a href=\"https:\/\/www.php.net\/manual\/zh\/info.configuration.php#ini.assert.exception\">assert.exception<\/a> \u9700\u5f00\u542f)<\/p>\n<\/li>\n<li>\n<p>PHP &gt;= 7.0.0\uff0c\u652f\u6301 <code>zend.assertions<\/code>\u3001<code>assert.exception<\/code> \u76f8\u5173\u914d\u7f6e\u53ca\u5176\u7279\u6027<\/p>\n<\/li>\n<li>\n<p>PHP &gt;= 7.2 \u7248\u672c\u5f00\u59cb\uff0c\u53c2\u6570 assertion \u4e0d\u518d\u652f\u6301\u5b57\u7b26\u4e32<\/p>\n<blockquote>\n<p>\u8be6\u89c1 <a href=\"https:\/\/www.php.net\/manual\/zh\/migration72.deprecated.php\">PHP 7.2.x \u4e2d\u5e9f\u5f03\u7684\u529f\u80fd<\/a><\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">Deprecated: assert(): Calling assert() with a string argument is deprecated\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><\/li>\n<\/ul>\n<h2 id=\"\u5e94\u7528\u573a\u666f\">\u5e94\u7528\u573a\u666f<\/h2>\n<h3 id=\"\u8c03\u8bd5\u8f93\u51fa\">\u8c03\u8bd5\u8f93\u51fa<\/h3>\n<p><strong>\u5148\u770b\u793a\u4f8b:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"nx\">assert<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;1 == 2&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;1 \u4e0d\u53ef\u80fd\u7b49\u4e8e 2&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u8fd0\u884c\u7ed3\u679c:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">Warning: assert(): 1 \u4e0d\u53ef\u80fd\u7b49\u4e8e 2: &#34;1 == 2&#34; failed in \/Users\/shocker\/Desktop\/demo.php on line 10\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u7c7b\u4f3c\u4e8e:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$expression<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"p\">(<\/span><span class=\"nv\">$expression<\/span><span class=\"p\">))<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">echo<\/span> <span class=\"s2\">&#34;1 \u4e0d\u53ef\u80fd\u7b49\u4e8e 2<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">var_dump<\/span><span class=\"p\">(<\/span><span class=\"nv\">$expression<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">echo<\/span> <span class=\"no\">__FILE__<\/span> <span class=\"o\">.<\/span> <span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4f46\u662f\uff0c\u6211\u4eec\u65e0\u6cd5\u5f97\u77e5 $expression \u7684\u5177\u4f53\u8868\u8fbe\u5f0f\uff0c\u4e5f\u65e0\u6cd5\u5f97\u77e5\u5177\u4f53\u7684\u6267\u884c\u884c\u6570\u3002<\/p>\n<h3 id=\"\u5355\u5143\u6d4b\u8bd5\">\u5355\u5143\u6d4b\u8bd5<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">function<\/span> <span class=\"nf\">arraySum<\/span><span class=\"p\">(<\/span><span class=\"k\">array<\/span> <span class=\"nv\">$nums<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$sum<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">0<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$nums<\/span> <span class=\"k\">as<\/span> <span class=\"nv\">$n<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"nv\">$sum<\/span> <span class=\"o\">+=<\/span> <span class=\"nv\">$n<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nv\">$sum<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">assert<\/span><span class=\"p\">(<\/span><span class=\"nx\">arraySum<\/span><span class=\"p\">([<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">])<\/span> <span class=\"o\">==<\/span> <span class=\"mi\">6<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;arraySum() \u6d4b\u8bd5\u4e0d\u901a\u8fc7:&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">assert<\/span><span class=\"p\">(<\/span><span class=\"nx\">is_numeric<\/span><span class=\"p\">(<\/span><span class=\"nx\">arraySum<\/span><span class=\"p\">([<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">2<\/span><span class=\"p\">,<\/span> <span class=\"mi\">3<\/span><span class=\"p\">])),<\/span> <span class=\"s1\">&#39;arraySum() \u6d4b\u8bd5\u4e0d\u901a\u8fc7:&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u662f\u4e0d\u662f\u8ddf\u6211\u4eec\u7528 <a href=\"https:\/\/phpunit.de\">PHPUnit<\/a> \u5199\u5355\u5143\u6d4b\u8bd5\u5f88\u50cf\ud83d\ude06<\/p>\n<h3 id=\"\u9a8c\u8bc1\u8868\u8fbe\u5f0f\">\u9a8c\u8bc1\u8868\u8fbe\u5f0f<\/h3>\n<blockquote>\n<p><strong>Tip:<\/strong><\/p>\n<p>PHP 7 \u5f00\u59cb\uff0c\u65b0\u589e\u4e86 <a href=\"https:\/\/www.php.net\/manual\/en\/class.error.php\">Error<\/a> \u7c7b\u7528\u4e8e\u6355\u83b7 PHP \u5185\u7f6e\u9519\u8bef\uff0c\u5305\u62ec\u8bed\u6cd5\u9519\u8bef\u3002Error \u4e0e\u4e4b\u524d\u7684 Exception \u5747\u7ee7\u627f\u81ea <a href=\"https:\/\/www.php.net\/manual\/en\/class.throwable.php\">Throwable<\/a>\uff0c\u6240\u4ee5\u4ece 7.0.0 \u5f00\u59cb\uff0cThrowable \u53ef\u4ee5\u6355\u83b7\u4e00\u5207\u9519\u8bef\u548c\u5f02\u5e38\u3002<\/p>\n<\/blockquote>\n<p>\u4e0b\u4f8b\u6f14\u793a\u4e86\u5982\u4f55\u9a8c\u8bc1\u67d0\u4e2a\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u662f\u5426\u4e3a\u5408\u6cd5\u7684 PHP \u8868\u8fbe\u5f0f:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">assert<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;a +== 1&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span> <span class=\"k\">catch<\/span> <span class=\"p\">(<\/span><span class=\"nx\">Throwable<\/span> <span class=\"nv\">$e<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">echo<\/span> <span class=\"nv\">$e<\/span><span class=\"o\">-&gt;<\/span><span class=\"na\">getMessage<\/span><span class=\"p\">(),<\/span> <span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p><strong>\u8fd0\u884c\u7ed3\u679c:<\/strong><\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">Failure evaluating code: \n<\/span><\/span><span class=\"line\"><span class=\"cl\">a +== 1\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u5b89\u5168\u95ee\u9898\">\u5b89\u5168\u95ee\u9898<\/h2>\n<p>\u5047\u8bbe\u662f\u4e0b\u5217\u4ee3\u7801\uff0c\u4f1a\u6709\u4ec0\u4e48\u7ed3\u679c\u5462\uff1f<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><span class=\"lnt\">7\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">function<\/span> <span class=\"nf\">demo<\/span><span class=\"p\">(){<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nx\">file_put_contents<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;data.log&#39;<\/span><span class=\"p\">,<\/span> <span class=\"s1\">&#39;shockerli.net&#39;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$func<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$_GET<\/span><span class=\"p\">[<\/span><span class=\"s2\">&#34;func&#34;<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">assert<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#34;<\/span><span class=\"si\">$func<\/span><span class=\"s2\">()&#34;<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6240\u4ee5\uff0c\u5bf9\u4e8e assert \u51fd\u6570\uff0c\u6b63\u5e38\u60c5\u51b5\u4e0b\u662f\u4e0d\u5efa\u8bae\u7528\u4e8e\u751f\u4ea7\u73af\u5883\u7684\u3002<\/p>\n<p>\u4e0e eval \u4e00\u6837\u4f1a\u6267\u884c\u4efb\u4f55 PHP \u4ee3\u7801\uff0c\u5371\u5bb3\u6781\u5927\u3002\u8fd9\u4e5f\u662f PHP \u4ece 7.2 \u5f00\u59cb\u5e9f\u5f03\u652f\u6301\u5b57\u7b26\u4e32\u8868\u8fbe\u5f0f\u7684\u539f\u56e0\u3002<\/p>"},{"title":"\u66ff\u6362 Docker \u6216 Laradock \u4e2d Debian \u7cfb\u7edf\u955c\u50cf\u6e90\u89e3\u51b3\u8f6f\u4ef6\u5b89\u88c5\u95ee\u9898","link":"https:\/\/shockerli.net\/post\/replace-docker-laradock-debian-mirrors\/","pubDate":"Tue, 23 Apr 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/replace-docker-laradock-debian-mirrors\/","description":"<h2 id=\"docker-debian-\u955c\u50cf\u6e90\u66ff\u6362\">Docker Debian \u955c\u50cf\u6e90\u66ff\u6362<\/h2>\n<p>\u56e0\u591a\u6570\u9ed8\u8ba4\u7684 Docker \u955c\u50cf\u4e3a\u56fd\u5916\u7684\uff0c\u800c\u91c7\u7528\u7684\u955c\u50cf\u6e90\u4e5f\u662f\u56fd\u5916\u7684\uff0c\u6545\u8bbf\u95ee\u5f88\u6162\uff0c\u6240\u4ee5\u6211\u4eec\u9700\u8981\u66ff\u6362\u4e3a\u56fd\u5185\u7684\uff08\u6bd4\u5982\u963f\u91cc\u4e91\u6216163\u7b49\uff09\u3002<\/p>\n<ul>\n<li><a href=\"http:\/\/mirrors.163.com\/.help\/debian.html\">163 - Debian<\/a><\/li>\n<li><a href=\"https:\/\/opsx.alibaba.com\/mirror\">Aliyun - Debian<\/a><\/li>\n<\/ul>\n<blockquote>\n<p>\u6ce8\u610f: \u4e0d\u540c\u7248\u672c\u7684 Debian \u955c\u50cf\u6e90\u5730\u5740\u4e0d\u4e00\u6837<\/p>\n<\/blockquote>\n<h3 id=\"debian-7x-wheezy\">Debian 7.x (wheezy)<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u66f4\u65b0apt-get\u6e90<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">RUN <span class=\"nb\">echo<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ wheezy main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ wheezy-proposed-updates main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian\/ wheezy main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    &gt; \/etc\/apt\/sources.list\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"debian-8x-jessie\">Debian 8.x (jessie)<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><span class=\"lnt\">6\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u66f4\u65b0apt-get\u6e90<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">RUN <span class=\"nb\">echo<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ jessie main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ jessie-proposed-updates main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian\/ jessie main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    &gt; \/etc\/apt\/sources.list\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"debian-9x-stretch\">Debian 9.x (stretch)<\/h3>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u66f4\u65b0apt-get\u6e90<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">RUN <span class=\"nb\">echo<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ stretch main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian\/ stretch main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian-security stretch\/updates main<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian-security stretch\/updates main<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ stretch-updates main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian\/ stretch-updates main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ stretch-backports main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian\/ stretch-backports main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    &gt; \/etc\/apt\/sources.list\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"laradock-\u955c\u50cf\u6784\u5efa\u5931\u8d25\">Laradock \u955c\u50cf\u6784\u5efa\u5931\u8d25<\/h2>\n<blockquote>\n<p>\u56e0\u4e3a\u9ed8\u8ba4\u7528\u7684\u662f\u56fd\u5916 Debian \u955c\u50cf\u6e90\uff0c\u6545\u5728\u6267\u884c <code>apt-get<\/code> \u7b49\u547d\u4ee4\u62c9\u53d6\u8f6f\u4ef6\u5305\u65f6\u4f1a\u5931\u8d25\uff0c\u6211\u4eec\u9700\u624b\u52a8\u5728\u5bf9\u4e8e\u7684 <code>Dockerfile<\/code> \u4e2d\u6dfb\u52a0\u4e00\u4e2a RUN \u6307\u4ee4\u6765\u66ff\u6362\u6389\u9ed8\u8ba4\u7684\u955c\u50cf\u6e90<\/p>\n<\/blockquote>\n<p><strong>\u4ee5\u4e0b\u4ec5\u4e3a\u793a\u4f8b<\/strong>:<\/p>\n<blockquote>\n<p>\u9700\u6839\u636e\u81ea\u5df1\u5f53\u524d Laradock \u7248\u672c\u67e5\u770b\u5f15\u7528\u7684\u7cfb\u7edf\u955c\u50cf\u53ca\u5176\u7248\u672c\u6ce8\u610f\u4e0d\u540c\uff0c\u5176\u4ed6\u7cfb\u7edf(eg: CentOS)\u8bf7\u5bf9\u75c7\u4e0b\u836f\u3002<\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\"><span class=\"c1\"># \u66f4\u65b0apt-get\u6e90<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">RUN <span class=\"nb\">echo<\/span> <span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ stretch main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian\/ stretch main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian-security stretch\/updates main<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian-security stretch\/updates main<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ stretch-updates main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian\/ stretch-updates main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb http:\/\/mirrors.aliyun.com\/debian\/ stretch-backports main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    deb-src http:\/\/mirrors.aliyun.com\/debian\/ stretch-backports main non-free contrib<span class=\"se\">\\\n<\/span><\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"se\"><\/span>    &gt; \/etc\/apt\/sources.list\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div>"},{"title":"Shell \u547d\u4ee4\u7ec4\u5408\u96c6[2019.04.05\u66f4\u65b0]","link":"https:\/\/shockerli.net\/post\/shell-practical-command-collection\/","pubDate":"Fri, 05 Apr 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/shell-practical-command-collection\/","description":"<blockquote>\n<p>\u672c\u6587\u6863\u6536\u96c6\u4e86\u5e38\u7528\u7684 Shell \u547d\u4ee4\u7ec4\u5408\uff0c\u4f9d\u7136\u5728\u4e0d\u5b9a\u671f\u66f4\u65b0\u4e2d&hellip;<\/p>\n<\/blockquote>\n<h2 id=\"\u7ec8\u7aef\u547d\u4ee4\">\u7ec8\u7aef\u547d\u4ee4<\/h2>\n<h3 id=\"\u65e5\u5fd7\">\u65e5\u5fd7<\/h3>\n<h4 id=\"\u7edf\u8ba1\u72ec\u7acb-ip-\u6570\u91cf\">\u7edf\u8ba1\u72ec\u7acb IP \u6570\u91cf<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">awk <span class=\"s1\">&#39;{print $1}&#39;<\/span> access.log <span class=\"p\">|<\/span> sort -n <span class=\"p\">|<\/span> uniq <span class=\"p\">|<\/span> wc -l\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u67e5\u770b\u67d0\u4e00\u65f6\u95f4\u6bb5\u7684-ip-\u8bbf\u95ee\u91cf\">\u67e5\u770b\u67d0\u4e00\u65f6\u95f4\u6bb5\u7684 IP \u8bbf\u95ee\u91cf<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">grep <span class=\"s2\">&#34;05\/Apr\/2019:0[1-9]&#34;<\/span> access.log <span class=\"p\">|<\/span> awk <span class=\"s1\">&#39;{print $1}&#39;<\/span> <span class=\"p\">|<\/span> sort <span class=\"p\">|<\/span> uniq -c<span class=\"p\">|<\/span> sort -nr <span class=\"p\">|<\/span> wc -l\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u67e5\u770b\u8bbf\u95ee\u6700\u9891\u7e41\u7684\u524d-100-\u4e2a-ip\">\u67e5\u770b\u8bbf\u95ee\u6700\u9891\u7e41\u7684\u524d 100 \u4e2a IP<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">awk <span class=\"s1\">&#39;{print $1}&#39;<\/span> access.log <span class=\"p\">|<\/span> sort -n <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -n <span class=\"m\">100<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u67e5\u770b\u8bbf\u95ee-100-\u6b21\u4ee5\u4e0a\u7684-ip\">\u67e5\u770b\u8bbf\u95ee 100 \u6b21\u4ee5\u4e0a\u7684 IP<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">awk <span class=\"s1\">&#39;{print $1}&#39;<\/span> access.log <span class=\"p\">|<\/span> sort -n <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> awk <span class=\"s1\">&#39;{if($1 &gt; 100) print $0}&#39;<\/span> <span class=\"p\">|<\/span> sort -rn\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u67e5\u8be2\u67d0\u4e2a-ip-\u7684\u8be6\u7ec6\u8bbf\u95ee\u60c5\u51b5\u6309\u8bbf\u95ee\u9891\u7387\u6392\u5e8f\">\u67e5\u8be2\u67d0\u4e2a IP \u7684\u8be6\u7ec6\u8bbf\u95ee\u60c5\u51b5\uff0c\u6309\u8bbf\u95ee\u9891\u7387\u6392\u5e8f<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">grep <span class=\"s1\">&#39;127.0.0.1&#39;<\/span> access.log <span class=\"p\">|<\/span> awk <span class=\"s1\">&#39;{print $7}&#39;<\/span> <span class=\"p\">|<\/span> sort <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -n <span class=\"m\">100<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u7edf\u8ba1-url-\u8bbf\u95ee\u91cf\u6392\u884c\">\u7edf\u8ba1 URL \u8bbf\u95ee\u91cf\u6392\u884c<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">awk <span class=\"s1\">&#39;{url[$7]++} END {for (k in url) {print url[k],k}}&#39;<\/span> nginx.access.log <span class=\"p\">|<\/span> sort -rn\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4f7f\u7528 <code>awk<\/code> \u4ece Nginx \u65e5\u5fd7\u4e2d\u9010\u884c\u7edf\u8ba1 URL \u8bbf\u95ee\u8ba1\u6570\uff0c\u7136\u540e\u4f7f\u7528 <code>sort<\/code> \u5bf9\u7ed3\u679c\u8fdb\u884c\u6392\u540d<\/p>\n<h4 id=\"\u8bbf\u95ee\u6700\u9891\u7e41\u7684-url\">\u8bbf\u95ee\u6700\u9891\u7e41\u7684 URL<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">awk <span class=\"s1\">&#39;{print $7}&#39;<\/span> access.log <span class=\"p\">|<\/span> sort <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -n <span class=\"m\">100<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6216\u8005<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">awk <span class=\"s1\">&#39;{url[$7]++} END {for (k in url) {print url[k],k}}&#39;<\/span> access.log <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -n <span class=\"m\">100<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u9664\u4e86-php-\u4ee5\u5916\u8bbf\u95ee\u6700\u9891\u7e41\u7684-url\">\u9664\u4e86 .php \u4ee5\u5916\uff0c\u8bbf\u95ee\u6700\u9891\u7e41\u7684 URL<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">grep -v <span class=\"s2\">&#34;.php&#34;<\/span> access.log <span class=\"p\">|<\/span> awk <span class=\"s1\">&#39;{print $7}&#39;<\/span> <span class=\"p\">|<\/span> sort <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -n <span class=\"m\">100<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"url-\u8bbf\u95ee\u6b21\u6570\u8d85\u8fc7-100-\u6b21\u7684\u9875\u9762\">URL \u8bbf\u95ee\u6b21\u6570\u8d85\u8fc7 100 \u6b21\u7684\u9875\u9762<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">awk <span class=\"s1\">&#39;{print $7}&#39;<\/span> access.log <span class=\"p\">|<\/span> sort -n <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -n <span class=\"m\">100<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u67e5\u770b\u6700\u8fd11000\u6761\u8bb0\u5f55\u8bbf\u95ee\u91cf\u6700\u9ad8\u7684-url\">\u67e5\u770b\u6700\u8fd11000\u6761\u8bb0\u5f55\uff0c\u8bbf\u95ee\u91cf\u6700\u9ad8\u7684 URL<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">tail -1000 access.log <span class=\"p\">|<\/span> awk <span class=\"s1\">&#39;{print $7}&#39;<\/span> <span class=\"p\">|<\/span> sort <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> less\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u7edf\u8ba1\u6bcf\u79d2\u7684\u8bf7\u6c42\u6570top100\u7684\u65f6\u95f4\u70b9\u7cbe\u786e\u5230\u79d2\">\u7edf\u8ba1\u6bcf\u79d2\u7684\u8bf7\u6c42\u6570\uff0cTOP100\u7684\u65f6\u95f4\u70b9(\u7cbe\u786e\u5230\u79d2)<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">awk <span class=\"s1\">&#39;{print $4}&#39;<\/span> access.log <span class=\"p\">|<\/span> cut -c 14-21 <span class=\"p\">|<\/span> sort <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -n <span class=\"m\">100<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u7edf\u8ba1\u6bcf\u5c0f\u65f6\u7684\u8bf7\u6c42\u6570top100\u7684\u65f6\u95f4\u70b9\u7cbe\u786e\u5230\u5c0f\u65f6\">\u7edf\u8ba1\u6bcf\u5c0f\u65f6\u7684\u8bf7\u6c42\u6570\uff0cTOP100\u7684\u65f6\u95f4\u70b9(\u7cbe\u786e\u5230\u5c0f\u65f6)<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">awk <span class=\"s1\">&#39;{print $4}&#39;<\/span> access.log <span class=\"p\">|<\/span> cut -c 14-15 <span class=\"p\">|<\/span> sort <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -n <span class=\"m\">100<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u5217\u51fa\u4f20\u8f93\u65f6\u95f4\u8d85\u8fc73\u79d2\u7684\u9875\u9762\u5e76\u7edf\u8ba1\u5176\u51fa\u73b0\u7684\u6b21\u6570\u663e\u793a\u524d20\u6761\">\u5217\u51fa\u4f20\u8f93\u65f6\u95f4\u8d85\u8fc73\u79d2\u7684\u9875\u9762\uff0c\u5e76\u7edf\u8ba1\u5176\u51fa\u73b0\u7684\u6b21\u6570\uff0c\u663e\u793a\u524d20\u6761<\/h4>\n<blockquote>\n<p>\u5728 Nginx log \u6700\u540e\u4e00\u4e2a\u5b57\u6bb5\u52a0\u5165 <code>$request_time<\/code><\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">cat access.log <span class=\"p\">|<\/span> awk <span class=\"s1\">&#39;($NF &gt; 3){print $7}&#39;<\/span> <span class=\"p\">|<\/span> sort -n <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -20\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u5217\u51faphp\u9875\u9762\u8bf7\u6c42\u65f6\u95f4\u8d85\u8fc73\u79d2\u7684\u9875\u9762\u5e76\u7edf\u8ba1\u5176\u51fa\u73b0\u7684\u6b21\u6570\u663e\u793a\u524d100\u6761\">\u5217\u51faPHP\u9875\u9762\u8bf7\u6c42\u65f6\u95f4\u8d85\u8fc73\u79d2\u7684\u9875\u9762\uff0c\u5e76\u7edf\u8ba1\u5176\u51fa\u73b0\u7684\u6b21\u6570\uff0c\u663e\u793a\u524d100\u6761<\/h4>\n<blockquote>\n<p>\u5728 Nginx log \u6700\u540e\u4e00\u4e2a\u5b57\u6bb5\u52a0\u5165 <code>$request_time<\/code><\/p>\n<\/blockquote>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">cat access.log <span class=\"p\">|<\/span> awk <span class=\"s1\">&#39;($NF &gt; 1 &amp;&amp; $7~\/\\.php\/){print $7}&#39;<\/span> <span class=\"p\">|<\/span> sort -n <span class=\"p\">|<\/span> uniq -c <span class=\"p\">|<\/span> sort -rn <span class=\"p\">|<\/span> head -100\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u6587\u4ef6\">\u6587\u4ef6<\/h3>\n<h4 id=\"\u5217\u51fa\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6240\u6709\u6587\u4ef6\u5305\u62ec\u9690\u85cf\u6587\u4ef6\u7684\u7edd\u5bf9\u8def\u5f84\">\u5217\u51fa\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6240\u6709\u6587\u4ef6\uff08\u5305\u62ec\u9690\u85cf\u6587\u4ef6\uff09\u7684\u7edd\u5bf9\u8def\u5f84<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">find <span class=\"nv\">$PWD<\/span> -maxdepth <span class=\"m\">1<\/span> <span class=\"p\">|<\/span> xargs ls -ld\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u9012\u5f52\u5217\u51fa\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6240\u6709\u6587\u4ef6\u5305\u62ec\u9690\u85cf\u6587\u4ef6\u7684\u7edd\u5bf9\u8def\u5f84\">\u9012\u5f52\u5217\u51fa\u5f53\u524d\u76ee\u5f55\u4e0b\u7684\u6240\u6709\u6587\u4ef6\uff08\u5305\u62ec\u9690\u85cf\u6587\u4ef6\uff09\u7684\u7edd\u5bf9\u8def\u5f84<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">find <span class=\"nv\">$PWD<\/span> <span class=\"p\">|<\/span> xargs ls -ld\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u5728\u6bcf\u884c\u8bb0\u5f55\u7684\u5f00\u5934\u52a0\u4e0a\u5f53\u524d\u8def\u5f84\">\u5728\u6bcf\u884c\u8bb0\u5f55\u7684\u5f00\u5934\u52a0\u4e0a\u5f53\u524d\u8def\u5f84<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">ls <span class=\"p\">|<\/span> sed <span class=\"s2\">&#34;s:^:`pwd`\/:&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u5220\u9664\u6307\u5b9a\u65f6\u95f4\u4e4b\u524d\u7684\u6587\u4ef6\">\u5220\u9664\u6307\u5b9a\u65f6\u95f4\u4e4b\u524d\u7684\u6587\u4ef6<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">find \/path\/to\/dir -mtime +30 -type f <span class=\"p\">|<\/span> xargs rm -f\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><ul>\n<li><code>\/path\/to\/dir<\/code> \u8bbe\u7f6e\u67e5\u627e\u7684\u76ee\u5f55<\/li>\n<li><code>--mtime +30<\/code> \u8bbe\u7f6e\u65f6\u95f4\u4e3a30\u5929\u524d<\/li>\n<li><code>-type f<\/code> \u6307\u5b9a\u67e5\u627e\u7684\u7c7b\u578b\u4e3a\u6587\u4ef6<\/li>\n<\/ul>\n<h4 id=\"\u5220\u9664\u6587\u4ef6\u524d\u540en\u884c\">\u5220\u9664\u6587\u4ef6\u524d\/\u540eN\u884c<\/h4>\n<p>\u5220\u9664\u4e86\u524d2\u884c\u3002\u5148\u7528<code>tail<\/code>\u628a\u4ece\u7b2c3\u884c\u5f00\u59cb\u7684\u6240\u6709\u5185\u5bb9\u8f93\u51fa\u5230\u65b0\u6587\u4ef6\uff0c\u7136\u540e\u518d\u91cd\u547d\u540d\u6587\u4ef6\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">tail -n +3 old_file &gt; new_file \n<\/span><\/span><span class=\"line\"><span class=\"cl\">mv new_file old_file\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u4ec5\u4fdd\u7559\u6700\u540e3\u884c\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">tail -n -3 old_file &gt; new_file \n<\/span><\/span><span class=\"line\"><span class=\"cl\">mv new_file old_file\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5982\u679c\u5199\u5b9a\u65f6\u4efb\u52a1\uff0c\u90a3\u53ef\u653e\u7f6e\u5230\u4e00\u884c\u3002<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\"><span class=\"m\">0<\/span> <span class=\"m\">0<\/span> * * * tail -n -3 old_file &gt; new_file <span class=\"o\">&amp;&amp;<\/span> mv -f new_file old_file\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u7f51\u7edc\">\u7f51\u7edc<\/h3>\n<h4 id=\"\u7edf\u8ba1\u7f51\u5361\u7684\u6d41\u91cf\u6570\u636e\">\u7edf\u8ba1\u7f51\u5361\u7684\u6d41\u91cf\u6570\u636e<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><span class=\"lnt\">4\n<\/span><span class=\"lnt\">5\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">sar -n DEV <span class=\"m\">1<\/span> <span class=\"m\">5<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u5e73\u5747\u65f6\u95f4:     IFACE   rxpck\/s   txpck\/s    rxkB\/s    txkB\/s   rxcmp\/s   txcmp\/s  rxmcst\/s\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u5e73\u5747\u65f6\u95f4:        lo      2.21      2.21      0.18      0.18      0.00      0.00      0.00\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\u5e73\u5747\u65f6\u95f4:      eth0      4.62      3.82      0.37      1.90      0.00      0.00      0.00\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u547d\u4ee4\u4e2d 1 5 \u8868\u793a\u6bcf\u4e00\u79d2\u949f\u53d6 1 \u6b21\u503c\uff0c\u4e00\u5171\u53d6 5 \u6b21\u3002<\/p>\n<p>\u547d\u4ee4\u6267\u884c\u540e\u4f1a\u5217\u51fa\u6bcf\u4e2a\u7f51\u5361\u8fd9 5 \u6b21\u53d6\u503c\u7684\u5e73\u5747\u6570\u636e\uff0c\u6839\u636e\u5b9e\u9645\u60c5\u51b5\u6765\u786e\u5b9a\u5e26\u5bbd\u8dd1\u6ee1\u7684\u7f51\u5361\u540d\u79f0\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b eth0 \u4e3a\u5185\u7f51\u7f51\u5361\uff0ceth1 \u4e3a\u5916\u7f51\u7f51\u5361\u3002<\/p>\n<h4 id=\"\u67e5\u8be2\u5360\u7528\u7aef\u53e3\u7684\u8fdb\u7a0b\u7a0b\u5e8f\">\u67e5\u8be2\u5360\u7528\u7aef\u53e3\u7684\u8fdb\u7a0b\/\u7a0b\u5e8f<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">netstat -tunlp <span class=\"p\">|<\/span> grep <span class=\"s1\">&#39;:80&#39;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    \n<\/span><\/span><span class=\"line\"><span class=\"cl\">tcp        <span class=\"m\">0<\/span>      <span class=\"m\">0<\/span> 0.0.0.0:80      0.0.0.0:*    LISTEN      26655\/nginx\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6216\u8005\u4f7f\u7528 <code>lsof<\/code> \u547d\u4ee4\uff1a<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">lsof -i :80\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u67e5\u770b\u6d41\u91cf\u5360\u7528\u60c5\u51b5\">\u67e5\u770b\u6d41\u91cf\u5360\u7528\u60c5\u51b5<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">iftop -P\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u67e5\u770b\u7a0b\u5e8f\u6d41\u91cf\u6392\u884c\">\u67e5\u770b\u7a0b\u5e8f\u6d41\u91cf\u6392\u884c<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">nethogs\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h3 id=\"\u8fdb\u7a0b\u7a0b\u5e8f\">\u8fdb\u7a0b\/\u7a0b\u5e8f<\/h3>\n<h4 id=\"grep-\u7a0b\u5e8f\u5e76\u6740\u6b7b\">grep \u7a0b\u5e8f\u5e76\u6740\u6b7b<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">ps -ef <span class=\"p\">|<\/span> grep process_name <span class=\"p\">|<\/span> grep -v grep <span class=\"p\">|<\/span> cut -c 9-15 <span class=\"p\">|<\/span> xargs <span class=\"nb\">kill<\/span> -s <span class=\"m\">9<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u67e5\u770b\u6307\u5b9a\u8fdb\u7a0b\u7684\u5177\u4f53\u5360\u7528\u5185\u5b58\">\u67e5\u770b\u6307\u5b9a\u8fdb\u7a0b\u7684\u5177\u4f53\u5360\u7528\u5185\u5b58<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">cat \/proc\/<span class=\"o\">[<\/span>pid<span class=\"o\">]<\/span>\/status\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><span class=\"lnt\">22\n<\/span><span class=\"lnt\">23\n<\/span><span class=\"lnt\">24\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">Name:\tmemcached\n<\/span><\/span><span class=\"line\"><span class=\"cl\">State:\tS (sleeping)\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Tgid:\t1954\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Pid:\t1954\n<\/span><\/span><span class=\"line\"><span class=\"cl\">PPid:\t1\n<\/span><\/span><span class=\"line\"><span class=\"cl\">TracerPid:\t0\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Uid:\t500\t500\t500\t500\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Gid:\t500\t500\t500\t500\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Utrace:\t0\n<\/span><\/span><span class=\"line\"><span class=\"cl\">FDSize:\t128\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Groups:\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmPeak:\t  413792 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmSize:\t  360544 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmLck:\t       0 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmHWM:\t   29704 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmRSS:\t   29376 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmData:\t  341768 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmStk:\t    2132 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmExe:\t      80 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmLib:\t    2152 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmPTE:\t     164 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">VmSwap:\t       0 kB\n<\/span><\/span><span class=\"line\"><span class=\"cl\">Threads:\t6\n<\/span><\/span><span class=\"line\"><span class=\"cl\">...\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5176\u4e2d\uff0c<code>VmRSS<\/code>\u9879\u8868\u793a\u5b9e\u9645\u5360\u7528\u5185\u5b58\u503c\u3002<\/p>\n<p>\u6216\u8005\uff0c\u7528<code>ps<\/code>\u547d\u4ee4<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">ps aux <span class=\"p\">|<\/span> grep &lt;pid&gt;\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND\n<\/span><\/span><span class=\"line\"><span class=\"cl\">jxcdn     1954  0.0  0.1 360544 29376 ?        Ssl  Apr13   7:56 memcached -m 128 -p 11211\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u5176\u4e2d<code>RSS<\/code>\u5217\u8868\u793a\u5b9e\u9645\u4f7f\u7528\u5185\u5b58(\u5355\u4f4d: KB)\u3002\u53ef\u4ee5\u770b\u51fa\uff0c\u4e0e<code>\/proc\/[pid]\/status<\/code>\u7684\u503c\u662f\u4e00\u81f4\u7684\u3002<\/p>\n<h2 id=\"\u811a\u672c\u547d\u4ee4\">\u811a\u672c\u547d\u4ee4<\/h2>\n<h4 id=\"\u83b7\u53d6\u811a\u672c\u6587\u4ef6\u6240\u5728\u76ee\u5f55\">\u83b7\u53d6\u811a\u672c\u6587\u4ef6\u6240\u5728\u76ee\u5f55<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">script_path<\/span><span class=\"o\">=<\/span><span class=\"k\">$(<\/span><span class=\"nb\">cd<\/span> <span class=\"sb\">`<\/span>dirname <span class=\"nv\">$0<\/span><span class=\"sb\">`<\/span><span class=\"p\">;<\/span> <span class=\"nb\">pwd<\/span><span class=\"k\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u83b7\u53d6\u811a\u672c\u6587\u4ef6\u7684\u4e0a\u7ea7\u76ee\u5f55\">\u83b7\u53d6\u811a\u672c\u6587\u4ef6\u7684\u4e0a\u7ea7\u76ee\u5f55<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">script_path<\/span><span class=\"o\">=<\/span><span class=\"k\">$(<\/span><span class=\"nb\">cd<\/span> <span class=\"sb\">`<\/span>dirname <span class=\"nv\">$0<\/span><span class=\"sb\">`<\/span><span class=\"p\">;<\/span> <span class=\"nb\">pwd<\/span><span class=\"k\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nv\">root_path<\/span><span class=\"o\">=<\/span><span class=\"k\">$(<\/span><span class=\"nb\">cd<\/span> <span class=\"sb\">`<\/span>dirname <span class=\"s2\">&#34;<\/span><span class=\"nv\">$script_path<\/span><span class=\"s2\">&#34;<\/span><span class=\"sb\">`<\/span><span class=\"p\">;<\/span> <span class=\"nb\">pwd<\/span><span class=\"k\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u683c\u5f0f\u5316\u5f53\u524d\u65f6\u95f4\">\u683c\u5f0f\u5316\u5f53\u524d\u65f6\u95f4<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">datetime<\/span><span class=\"o\">=<\/span><span class=\"k\">$(<\/span>date +<span class=\"s2\">&#34;%Y-%m-%d %H:%M:%S&#34;<\/span><span class=\"k\">)<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h4 id=\"\u53bb\u9664\u6587\u672c\u4e2d\u7684\u989c\u8272\u8f6c\u4e49\u7b26\">\u53bb\u9664\u6587\u672c\u4e2d\u7684\u989c\u8272\u8f6c\u4e49\u7b26<\/h4>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-sh\" data-lang=\"sh\"><span class=\"line\"><span class=\"cl\">sed -r <span class=\"s2\">&#34;s\/\\x1B\\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]\/\/g&#34;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><blockquote>\n<p>\u6765\u6e90: <a href=\"https:\/\/www.commandlinefu.com\/commands\/view\/3584\/remove-color-codes-special-characters-with-sed\">https:\/\/www.commandlinefu.com\/commands\/view\/3584\/remove-color-codes-special-characters-with-sed<\/a><\/p>\n<\/blockquote>"},{"title":"PHP \u7b97\u6cd5 \u2014\u2014 \u5feb\u901f\u6392\u5e8f","link":"https:\/\/shockerli.net\/post\/quick-sort-implement-by-php\/","pubDate":"Sun, 31 Mar 2019 00:00:00 +0000","guid":"https:\/\/shockerli.net\/post\/quick-sort-implement-by-php\/","description":"<h2 id=\"\u7b97\u6cd5\u539f\u7406\">\u7b97\u6cd5\u539f\u7406<\/h2>\n<p>\u4e0b\u5217\u52a8\u56fe\u6765\u81ea**@\u4e94\u5206\u949f\u5b66\u7b97\u6cd5**\uff0c\u6f14\u793a\u4e86\u5feb\u901f\u6392\u5e8f\u7b97\u6cd5\u7684\u539f\u7406\u548c\u6b65\u9aa4\u3002<\/p>\n<p><img src=\"media\/quick.gif\" alt=\"quick\"><\/p>\n<p><strong>\u6b65\u9aa4:<\/strong><\/p>\n<ul>\n<li>\u4ece\u6570\u7ec4\u4e2d\u9009\u4e2a\u57fa\u51c6\u503c<\/li>\n<li>\u5c06\u6570\u7ec4\u4e2d\u5927\u4e8e\u57fa\u51c6\u503c\u7684\u653e\u540c\u4e00\u8fb9\u3001\u5c0f\u4e8e\u57fa\u51c6\u503c\u7684\u653e\u53e6\u4e00\u8fb9\uff0c\u57fa\u51c6\u503c\u4f4d\u4e8e\u4e2d\u95f4\u4f4d\u7f6e<\/li>\n<li>\u9012\u5f52\u7684\u5bf9\u5206\u5217\u4e24\u8fb9\u7684\u6570\u7ec4\u518d\u6392\u5e8f<\/li>\n<\/ul>\n<h2 id=\"\u4ee3\u7801\u5b9e\u73b0\">\u4ee3\u7801\u5b9e\u73b0<\/h2>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><span class=\"lnt\">11\n<\/span><span class=\"lnt\">12\n<\/span><span class=\"lnt\">13\n<\/span><span class=\"lnt\">14\n<\/span><span class=\"lnt\">15\n<\/span><span class=\"lnt\">16\n<\/span><span class=\"lnt\">17\n<\/span><span class=\"lnt\">18\n<\/span><span class=\"lnt\">19\n<\/span><span class=\"lnt\">20\n<\/span><span class=\"lnt\">21\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"k\">function<\/span> <span class=\"nf\">quickSort<\/span><span class=\"p\">(<\/span><span class=\"nv\">$arr<\/span><span class=\"p\">)<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$len<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">count<\/span><span class=\"p\">(<\/span><span class=\"nv\">$arr<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$len<\/span> <span class=\"o\">&lt;=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">return<\/span> <span class=\"nv\">$arr<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$v<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$arr<\/span><span class=\"p\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$low<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$up<\/span> <span class=\"o\">=<\/span> <span class=\"k\">array<\/span><span class=\"p\">();<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">for<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$i<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span> <span class=\"nv\">$i<\/span> <span class=\"o\">&lt;<\/span> <span class=\"nv\">$len<\/span><span class=\"p\">;<\/span> <span class=\"o\">++<\/span><span class=\"nv\">$i<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"nv\">$arr<\/span><span class=\"p\">[<\/span><span class=\"nv\">$i<\/span><span class=\"p\">]<\/span> <span class=\"o\">&gt;<\/span> <span class=\"nv\">$v<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nv\">$up<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$arr<\/span><span class=\"p\">[<\/span><span class=\"nv\">$i<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span> <span class=\"k\">else<\/span> <span class=\"p\">{<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">            <span class=\"nv\">$low<\/span><span class=\"p\">[]<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">$arr<\/span><span class=\"p\">[<\/span><span class=\"nv\">$i<\/span><span class=\"p\">];<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">        <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"p\">}<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$low<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">quickSort<\/span><span class=\"p\">(<\/span><span class=\"nv\">$low<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"nv\">$up<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">quickSort<\/span><span class=\"p\">(<\/span><span class=\"nv\">$up<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\">    <span class=\"k\">return<\/span> <span class=\"nx\">array_merge<\/span><span class=\"p\">(<\/span><span class=\"nv\">$low<\/span><span class=\"p\">,<\/span> <span class=\"k\">array<\/span><span class=\"p\">(<\/span><span class=\"nv\">$v<\/span><span class=\"p\">),<\/span> <span class=\"nv\">$up<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"p\">}<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6d4b\u8bd5\u4ee3\u7801:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\"> 1\n<\/span><span class=\"lnt\"> 2\n<\/span><span class=\"lnt\"> 3\n<\/span><span class=\"lnt\"> 4\n<\/span><span class=\"lnt\"> 5\n<\/span><span class=\"lnt\"> 6\n<\/span><span class=\"lnt\"> 7\n<\/span><span class=\"lnt\"> 8\n<\/span><span class=\"lnt\"> 9\n<\/span><span class=\"lnt\">10\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-php\" data-lang=\"php\"><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$startTime<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">microtime<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$arr<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">range<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">,<\/span> <span class=\"mi\">10<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nx\">shuffle<\/span><span class=\"p\">(<\/span><span class=\"nv\">$arr<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">echo<\/span> <span class=\"s2\">&#34;before sort: &#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">implode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;, &#39;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$arr<\/span><span class=\"p\">),<\/span> <span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"nv\">$sortArr<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">quickSort<\/span><span class=\"p\">(<\/span><span class=\"nv\">$arr<\/span><span class=\"p\">);<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">echo<\/span> <span class=\"s2\">&#34;after sort: &#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">implode<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;, &#39;<\/span><span class=\"p\">,<\/span> <span class=\"nv\">$sortArr<\/span><span class=\"p\">),<\/span> <span class=\"s2\">&#34;<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><span class=\"line\"><span class=\"cl\">\n<\/span><\/span><span class=\"line\"><span class=\"cl\"><span class=\"k\">echo<\/span> <span class=\"s2\">&#34;use time: &#34;<\/span><span class=\"p\">,<\/span> <span class=\"nx\">microtime<\/span><span class=\"p\">(<\/span><span class=\"mi\">1<\/span><span class=\"p\">)<\/span> <span class=\"o\">-<\/span> <span class=\"nv\">$startTime<\/span><span class=\"p\">,<\/span> <span class=\"s2\">&#34;s<\/span><span class=\"se\">\\n<\/span><span class=\"s2\">&#34;<\/span><span class=\"p\">;<\/span>\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><p>\u6d4b\u8bd5\u7ed3\u679c:<\/p>\n<div class=\"highlight\"><div class=\"chroma\">\n<table class=\"lntable\"><tr><td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code><span class=\"lnt\">1\n<\/span><span class=\"lnt\">2\n<\/span><span class=\"lnt\">3\n<\/span><\/code><\/pre><\/td>\n<td class=\"lntd\">\n<pre tabindex=\"0\" class=\"chroma\"><code class=\"language-fallback\" data-lang=\"fallback\"><span class=\"line\"><span class=\"cl\">before sort: 1, 7, 10, 9, 6, 3, 2, 5, 4, 8\n<\/span><\/span><span class=\"line\"><span class=\"cl\">after sort: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10\n<\/span><\/span><span class=\"line\"><span class=\"cl\">use time: 0.0009009838104248s\n<\/span><\/span><\/code><\/pre><\/td><\/tr><\/table>\n<\/div>\n<\/div><h2 id=\"\u65f6\u95f4\u590d\u6742\u5ea6\">\u65f6\u95f4\u590d\u6742\u5ea6<\/h2>\n<p>\u5feb\u901f\u6392\u5e8f\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u5728\u6700\u574f\u60c5\u51b5\u4e0b\u662f<code>O(N2)<\/code>\uff0c\u5e73\u5747\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662f<code>O(N*lgN)<\/code>\u3002<\/p>\n<p>\u8fd9\u53e5\u8bdd\u5f88\u597d\u7406\u89e3\uff1a\u5047\u8bbe\u88ab\u6392\u5e8f\u7684\u6570\u5217\u4e2d\u6709N\u4e2a\u6570\u3002\u904d\u5386\u4e00\u6b21\u7684\u65f6\u95f4\u590d\u6742\u5ea6\u662fO(N)\uff0c\u9700\u8981\u904d\u5386\u591a\u5c11\u6b21\u5462\uff1f\u81f3\u5c11<code>lg(N+1)<\/code>\u6b21\uff0c\u6700\u591aN\u6b21\u3002<\/p>\n<ol>\n<li>\n<p>\u4e3a\u4ec0\u4e48\u6700\u5c11\u662f<code>lg(N+1)<\/code>\u6b21\uff1f\u5feb\u901f\u6392\u5e8f\u662f\u91c7\u7528\u7684\u5206\u6cbb\u6cd5\u8fdb\u884c\u904d\u5386\u7684\uff0c\u6211\u4eec\u5c06\u5b83\u770b\u4f5c\u4e00\u68f5\u4e8c\u53c9\u6811\uff0c\u5b83\u9700\u8981\u904d\u5386\u7684\u6b21\u6570\u5c31\u662f\u4e8c\u53c9\u6811\u7684\u6df1\u5ea6\uff0c\u800c\u6839\u636e\u5b8c\u5168\u4e8c\u53c9\u6811\u7684\u5b9a\u4e49\uff0c\u5b83\u7684\u6df1\u5ea6\u81f3\u5c11\u662f<code>lg(N+1)<\/code>\u3002\u56e0\u6b64\uff0c\u5feb\u901f\u6392\u5e8f\u7684\u904d\u5386\u6b21\u6570\u6700\u5c11\u662f<code>lg(N+1)<\/code>\u6b21\u3002<\/p>\n<\/li>\n<li>\n<p>\u4e3a\u4ec0\u4e48\u6700\u591a\u662fN\u6b21\uff1f\u8fd9\u4e2a\u5e94\u8be5\u975e\u5e38\u7b80\u5355\uff0c\u8fd8\u662f\u5c06\u5feb\u901f\u6392\u5e8f\u770b\u4f5c\u4e00\u68f5\u4e8c\u53c9\u6811\uff0c\u5b83\u7684\u6df1\u5ea6\u6700\u5927\u662fN\u3002\u56e0\u6b64\uff0c\u5feb\u8bfb\u6392\u5e8f\u7684\u904d\u5386\u6b21\u6570\u6700\u591a\u662fN\u6b21\u3002<\/p>\n<\/li>\n<\/ol>\n<h2 id=\"\u53c2\u8003\u8d44\u6599\">\u53c2\u8003\u8d44\u6599<\/h2>\n<ul>\n<li><a href=\"http:\/\/www.cnblogs.com\/skywang12345\/p\/3596746.html\">\u5feb\u901f\u6392\u5e8f<\/a><\/li>\n<li><a href=\"https:\/\/mp.weixin.qq.com\/s\/vn3KiV-ez79FmbZ36SX9lg\">\u5341\u5927\u7ecf\u5178\u6392\u5e8f\u7b97\u6cd5\u52a8\u753b\u4e0e\u89e3\u6790<\/a><\/li>\n<\/ul>"}]}}