{"id":9350,"date":"2024-07-01T03:14:34","date_gmt":"2024-06-30T19:14:34","guid":{"rendered":"\/?p=9350"},"modified":"2024-07-01T03:14:34","modified_gmt":"2024-06-30T19:14:34","slug":"golang%e7%9a%84%e5%ad%97%e7%ac%a6%e4%b8%b2","status":"publish","type":"post","link":"\/?p=9350","title":{"rendered":"golang\u7684\u5b57\u7b26\u4e32"},"content":{"rendered":"<h2>\u5b57\u7b26\u4e32<\/h2>\n<p>golang\u4e2d\u5b57\u7b26\u4e32\u662f\u4e00\u79cd\u57fa\u672c\u7c7b\u578b\uff08string\uff09\uff0c\u662f\u4e00\u4e2a<strong>\u4e0d\u53ef\u6539\u53d8\u7684UTF-8<\/strong>\u5b57\u7b26\u5e8f\u5217\uff1a<\/p>\n<ul>\n<li>\u4e00\u4e2aASCII\u7801\u5360\u75281\u4e2a\u5b57\u8282\uff1b<\/li>\n<li>\u5176\u5b83\u5b57\u7b26\u6839\u636e\u9700\u8981\u5360\u75282-4\u4e2a\u5b57\u8282\uff1b<\/li>\n<\/ul>\n<p>\u5b57\u7b26\u4e32\u521b\u5efa\u540e\uff0c\u5c31\u4e0d\u53ef\u6539\u53d8\uff1b\u5373\u4e0d\u5141\u8bb8\u4fee\u6539\u3002<\/p>\n<h3>\u58f0\u660e\u4e0e\u521d\u59cb\u5316<\/h3>\n<p>golang\u652f\u6301\u4e24\u79cd\u7c7b\u578b\u7684\u5b57\u7b26\u4e32\u5b57\u9762\u91cf\uff1a<\/p>\n<ul>\n<li>\u89e3\u91ca\u578b\u5b57\u7b26\u4e32\uff1a\u53cc\u5f15\u53f7\u62ec\u8d77\u6765\u7684\u5b57\u7b26\u4e32(\u201c\u201d)\uff0c\u8f6c\u4e49\u5b57\u7b26\uff08\u5982<code>\\n\\r<\/code>\u7b49\uff09\u4f1a\u88ab\u66ff\u6362\u6389\uff1b<\/li>\n<li>\u975e\u89e3\u91ca\u578b\u5b57\u7b26\u4e32\uff1a\u7528\u53cd\u5f15\u53f7(\u952e\u76d8\u5de6\u4e0a\u89d2\u4e0a\u7684)\u62ec\u8d77\u6765\u7684\u5b57\u7b26\u4e32\uff0c\u8f6c\u4e49\u5b57\u7b26\u4e0d\u4f1a\u88ab\u89e3\u91ca\u4e14\u53ef\u8de8\u884c\uff08\u539f\u6837\u8f93\u51fa\uff09\uff1b<\/li>\n<\/ul>\n<pre><code class=\"language-go\">package main\n\nimport &quot;fmt&quot;\n\nfunc main() {\n    s1 := &quot;Hello, World!\\nThis is a new line.&quot;\n\n    s2 := `hello\\n\n world!\n line2`\n    fmt.Println(s1)\n    fmt.Println(s2)\n    fmt.Printf(&quot;%T&quot;, s2)\n}\n`\n>&gt;&gt;\nHello, World!\nThis is a new line.\nhello\\n\n world!\n line2\nstring\n\u8fdb\u7a0b \u5df2\u5b8c\u6210\uff0c\u9000\u51fa\u4ee3\u7801\u4e3a 0\n`<\/code><\/pre>\n<h3>\u957f\u5ea6<\/h3>\n<p>len()\u8fd4\u56de\u5b57\u7b26\u4e32\u4e2d\u7684<strong>\u5b57\u8282\u6570<\/strong>(\u975e\u5b57\u7b26\u6570\u76ee)\uff0c\u7d22\u5f15\u64cd\u4f5cs[i]\u8fd4\u56de\u5b57\u7b26\u4e32s\u4e2d\u7b2ci\u4e2a\u5b57\u8282\u7684\u503c\uff08\u975eAscii\u7801\u8fd4\u56de\u5bf9\u5e94\u5b57\u8282\u7684\u6570\u503c\uff09\u3002\u8981\u83b7\u53d6\u5bf9\u5e94\u5b57\u7b26\u6570\uff08\u5305\u542b\u975eASCII\u5b57\u7b26\u65f6\uff09\u9700\u8981\u4f7f\u7528<code>utf8.RuneCountInString<\/code><\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;fmt&quot;\n    &quot;unicode\/utf8&quot;\n)\n\nfunc main() {\n    s1 := &quot;W\u5b57\u7b26&quot;\n    fmt.Println(len(s1))                    \/\/ 7 (\u4e00\u4e2a\u6c49\u5b573\u4e2a\u5b57\u8282)\n    fmt.Println(utf8.RuneCountInString(s1)) \/\/ 3\n}<\/code><\/pre>\n<h3>\u6bd4\u8f83<\/h3>\n<p>\u5b57\u7b26\u4e32\u6bd4\u8f83\u7684\u65b9\u5f0f\u6709\u5982\u4e0b\u4e09\u79cd\uff1a<\/p>\n<ul>\n<li><code>==<\/code>\uff1a\u76f4\u63a5\u6bd4\u8f83\uff0c\u533a\u5206\u5927\u5c0f\u5199\uff08\u6548\u7387\u6700\u9ad8\uff09\uff1b<\/li>\n<li><code>strings.Compare(a,b)<\/code>\uff1a\u8fd4\u56de\u503c\u4e3a int, 0 \u8868\u793a\u4e24\u6570\u76f8\u7b49\uff0c1 \u8868\u793a a&gt;b, -1 \u8868\u793a a&lt;b\u3002\u533a\u5206\u5927\u5c0f\u5199\uff1b<\/li>\n<li><code>strings.EqualFold(a,b)<\/code>\uff1a\u76f4\u63a5\u8fd4\u56de\u662f\u5426\u76f8\u7b49\uff0c\u4e0d\u533a\u5206\u5927\u5c0f\u5199\u3002<\/li>\n<\/ul>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;fmt&quot;\n    &quot;strings&quot;\n)\n\nfunc main() {\n    a := &quot;apple&quot;\n    b := &quot;banana&quot;\n    c := &quot;applf&quot;\n    fmt.Println(strings.Compare(a, b)) \/\/ \u8f93\u51fa\u8d1f\u6570\uff0c\u56e0\u4e3a &quot;apple&quot; \u5728\u5b57\u5178\u5e8f\u4e0a\u5c0f\u4e8e &quot;banana&quot;\n    fmt.Println(strings.Compare(b, a)) \/\/ \u8f93\u51fa\u6b63\u6570\uff0c\u56e0\u4e3a &quot;banana&quot; \u5728\u5b57\u5178\u5e8f\u4e0a\u5927\u4e8e &quot;apple&quot;\n    fmt.Println(strings.Compare(a, c)) \/\/ \u8f93\u51fa\u8d1f\u6570\uff0c\u56e0\u4e3a &quot;apple&quot; \u5728\u5b57\u5178\u5e8f\u4e0a\u5c0f\u4e8e &quot;applf&quot;\uff08\u6ce8\u610f\u8fd9\u91cc\u4e0d\u662f0\uff09  \n}\n\n}<\/code><\/pre>\n<p><code>strings.Compare<\/code> \u51fd\u6570\u4f1a\u6bd4\u8f83\u4e24\u4e2a\u5b57\u7b26\u4e32\u7684\u5b57\u5178\u5e8f\uff08\u5373\u6309\u7167\u5b57\u7b26\u7684 ASCII \u7801\u503c\u987a\u5e8f\uff09\uff0c\u76f4\u5230\u627e\u5230\u4e0d\u540c\u7684\u5b57\u7b26\u6216\u8005\u5230\u8fbe\u4efb\u4e00\u5b57\u7b26\u4e32\u7684\u672b\u5c3e\u3002<\/p>\n<p>\u8ba9\u6211\u4eec\u8be6\u7ec6\u5206\u6790\u4e0b <code>strings.Compare(a, c)<\/code> \u7684\u60c5\u51b5\uff1a<\/p>\n<ul>\n<li>\u5b57\u7b26\u4e32 <code>a<\/code> \u662f <code>&quot;apple&quot;<\/code><\/li>\n<li>\u5b57\u7b26\u4e32 <code>c<\/code> \u662f <code>&quot;applf&quot;<\/code><\/li>\n<\/ul>\n<p>\u6bd4\u8f83\u8fd9\u4e24\u4e2a\u5b57\u7b26\u4e32\u65f6\uff1a<\/p>\n<ol>\n<li>\u6bd4\u8f83\u7b2c\u4e00\u4e2a\u5b57\u7b26\uff1a\u90fd\u662f <code>&#039;a&#039;<\/code>\uff0cASCII \u7801\u503c\u76f8\u540c\uff0c\u7ee7\u7eed\u6bd4\u8f83\u4e0b\u4e00\u4e2a\u5b57\u7b26\u3002<\/li>\n<li>\u6bd4\u8f83\u7b2c\u4e8c\u4e2a\u5b57\u7b26\uff1a\u90fd\u662f <code>&#039;p&#039;<\/code>\uff0cASCII \u7801\u503c\u76f8\u540c\uff0c\u7ee7\u7eed\u6bd4\u8f83\u4e0b\u4e00\u4e2a\u5b57\u7b26\u3002<\/li>\n<li>\u6bd4\u8f83\u7b2c\u4e09\u4e2a\u5b57\u7b26\uff1a\u90fd\u662f <code>&#039;p&#039;<\/code>\uff0cASCII \u7801\u503c\u76f8\u540c\uff0c\u7ee7\u7eed\u6bd4\u8f83\u4e0b\u4e00\u4e2a\u5b57\u7b26\u3002<\/li>\n<li>\u6bd4\u8f83\u7b2c\u56db\u4e2a\u5b57\u7b26\uff1a<code>a<\/code> \u662f <code>&#039;l&#039;<\/code>\uff0c<code>c<\/code> \u4e5f\u662f <code>&#039;l&#039;<\/code>\uff0cASCII \u7801\u503c\u76f8\u540c\uff0c\u7ee7\u7eed\u6bd4\u8f83\u4e0b\u4e00\u4e2a\u5b57\u7b26\u3002<\/li>\n<li>\u6bd4\u8f83\u7b2c\u4e94\u4e2a\u5b57\u7b26\uff1a<code>a<\/code> \u6ca1\u6709\u5b57\u7b26\uff08\u5230\u8fbe\u4e86\u5b57\u7b26\u4e32\u7684\u672b\u5c3e\uff09\uff0c\u800c <code>c<\/code> \u662f <code>&#039;f&#039;<\/code>\u3002\u56e0\u4e3a <code>&#039;f&#039;<\/code> \u7684 ASCII \u7801\u503c\u5927\u4e8e\u4efb\u4f55\u4e0d\u5b58\u5728\u7684\u5b57\u7b26\uff08\u53ef\u4ee5\u8ba4\u4e3a\u662f\u65e0\u7a77\u5927\uff09\uff0c\u6240\u4ee5 <code>strings.Compare(a, c)<\/code> \u4f1a\u8fd4\u56de\u4e00\u4e2a\u8d1f\u6570\u3002<\/li>\n<\/ol>\n<h3>\u62fc\u63a5<\/h3>\n<p>golang\u4e2d\u6709\u591a\u79cd\u5b57\u7b26\u4e32\u62fc\u63a5\u65b9\u6cd5\uff1a<\/p>\n<ul>\n<li>\u52a0\u53f7(<code>+<\/code>)\uff1a\u6700\u5e38\u7528\u3001\u65b9\u4fbf\u7684\uff0c\u4f46\u6bcf\u6b21\u62fc\u63a5\u90fd\u4f1a\u751f\u6210\u4e00\u4e2a\u65b0\u7684\u5b57\u7b26\u4e32\uff0c\u6548\u7387\u8f83\u4f4e\uff1b<\/li>\n<li>fmt.Sprintf()\uff1a\u901a\u8fc7\u683c\u5f0f\u5316\u5b57\u7b26\u4e32\u65b9\u5f0f\u62fc\u63a5\uff1b<\/li>\n<li>strings.Join()\uff1a\u53ef\u4ee5\u6307\u5b9a\u62fc\u63a5\u65f6\u7684\u95f4\u9694\u7b26\uff1b<\/li>\n<li>bytes.Buffer\uff1a\u53ef\u53d8\u5927\u5c0f\u7684\u5b57\u8282\u7f13\u51b2\u533a\uff0c\u63d0\u4f9b\u65b9\u4fbf\u5730\u8bfb\u5199\u64cd\u4f5c\uff1b<\/li>\n<li>strings.Builder\uff1a\u901a\u8fc7write\u65b9\u6cd5\u9ad8\u6548\u5730\u6784\u9020\u5b57\u7b26\u4e32\uff0c\u6700\u5c0f\u5316\u5185\u5b58\u62f7\u8d1d\uff1b<\/li>\n<\/ul>\n<p>\u4e00\u822c\u7b80\u5355\u62fc\u63a5\u76f4\u63a5\u4f7f\u7528+\uff0c\u5b57\u7b26\u4e32\u6570\u7ec4\/\u5207\u7247\u62fc\u63a5\u4e3a\u5b57\u7b26\u4e32\u65f6\u7528Join\uff0c\u591a\u6761\u4e0d\u76f8\u5173\u5b57\u7b26\u4e32\u62fc\u63a5\u65f6\u7528Builder\u3002<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;bytes&quot;\n    &quot;fmt&quot;\n    &quot;strings&quot;\n)\n\nfunc main() {\n    var buff bytes.Buffer\n    buff.WriteString(&quot;hello&quot;)\n    buff.WriteRune(&#039;\u5b57&#039;)\n    buff.WriteString(&quot;\u7b26&quot;)\n    fmt.Println(buff.String()) \/\/ hello\u5b57\u7b26\n\n    var build strings.Builder\n    build.WriteString(&quot;hello&quot;)\n    build.WriteRune(&#039;\u5b57&#039;)\n    build.WriteString(&quot;\u7b26&quot;)\n    fmt.Println(build.String()) \/\/ hello\u5b57\u7b26\n\n}<\/code><\/pre>\n<h3>\u5b50\u4e32<\/h3>\n<p>go\u4e2d\u53ef\u901a\u8fc7\u5207\u7247\u65b9\u5f0f\u5feb\u901f\u83b7\u53d6\u5b50\u4e32<code>s=src[low:high]<\/code>\uff08\u6307\u5b9a\u7d22\u5f15\u8303\u56f4\uff0c\u2018\u5de6\u542b\u53f3\u4e0d\u542b\u2019\uff09\u3002\u7d22\u5f15\u4e0d\u80fd\u8d8a\u754c\uff0c\u5426\u5219\u4f1a\u5bfc\u81f4panic\u5f02\u5e38\u3002<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;fmt&quot;\n)\n\nfunc main() {\n    s1 := &quot;abcdef&quot;\n    fmt.Println(s1[1:4], s1[1:], s1[:1]) \/\/ bcd bcdef a\n    fmt.Printf(&quot;%T&quot;, s1[1:4]) \/\/ string\n}<\/code><\/pre>\n<p>\u5bf9\u4e8e\u5305\u542b\u4e2d\u6587\u7684\u5b57\u7b26\u4e32\uff0c\u9700\u8981<strong>\u8f6c\u6362\u4e3arune\u540e\u64cd\u4f5c<\/strong>\uff08\u5426\u5219\u4f1a\u51fa\u73b0\u4e71\u7801\uff09\uff1a<\/p>\n<ul>\n<li>\u5b57\u7b26\u4e32\u8f6c\u6362\u4e3arune\u5207\u7247\uff1a<\/li>\n<li>\u5207\u7247\u622a\u53d6\uff1b<\/li>\n<li>\u622a\u53d6\u7ed3\u679c\u8f6c\u6362\u56destring\uff1b<\/li>\n<\/ul>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;fmt&quot;\n    &quot;log&quot;\n)\n\nfunc main() {\n    name := &quot;test\u4e2d\u6587\u5b57\u7b26\u4e32\u6d4b\u8bd5&quot;\n    runeName := []rune(name)\n    fmt.Printf(&quot;%T\\n&quot;, runeName)\n    fmt.Println(runeName)\n    log.Printf(&quot;ori-len: %v, rune-len: %v&quot;, len(name), len(runeName))\n    for i := 2; i &lt;= len(runeName); i++ {\n        log.Printf(&quot;%v-len: %v&quot;, i, string(runeName[:i]))\n    }\n}\n`\n[]int32\n[116 101 115 116 20013 25991 23383 31526 20018 27979 35797]\n2024\/07\/01 02:32:03 ori-len: 25, rune-len: 11\n2024\/07\/01 02:32:03 2-len: te\n2024\/07\/01 02:32:03 3-len: tes\n2024\/07\/01 02:32:03 4-len: test\n2024\/07\/01 02:32:03 5-len: test\u4e2d\n2024\/07\/01 02:32:03 6-len: test\u4e2d\u6587\n2024\/07\/01 02:32:03 7-len: test\u4e2d\u6587\u5b57\n2024\/07\/01 02:32:03 8-len: test\u4e2d\u6587\u5b57\u7b26\n2024\/07\/01 02:32:03 9-len: test\u4e2d\u6587\u5b57\u7b26\u4e32\n2024\/07\/01 02:32:03 10-len: test\u4e2d\u6587\u5b57\u7b26\u4e32\u6d4b\n2024\/07\/01 02:32:03 11-len: test\u4e2d\u6587\u5b57\u7b26\u4e32\u6d4b\u8bd5\n`<\/code><\/pre>\n<p>\u5728 Go \u8bed\u8a00\u4e2d\uff0c<code>rune<\/code> \u662f <code>int32<\/code> \u7684\u522b\u540d\uff0c\u901a\u5e38\u7528\u4e8e\u8868\u793a\u4e00\u4e2a Unicode \u7801\u70b9\uff08Unicode code point\uff09\u3002\u5f53\u4f60\u6709\u4e00\u4e2a\u5305\u542b\u591a\u5b57\u8282\u5b57\u7b26\uff08\u5982 UTF-8 \u7f16\u7801\u7684\u5b57\u7b26\u4e32\uff09\u7684\u5b57\u7b26\u4e32\u65f6\uff0c\u4f60\u53ef\u80fd\u60f3\u8981\u4ee5 Unicode \u7801\u70b9\u7684\u5f62\u5f0f\u6765\u8bbf\u95ee\u6216\u5904\u7406\u8fd9\u4e9b\u5b57\u7b26\u3002<\/p>\n<p><code>[]rune(name)<\/code> \u662f\u4e00\u4e2a\u7c7b\u578b\u8f6c\u6362\u8868\u8fbe\u5f0f\uff0c\u5b83\u5c06\u4e00\u4e2a\u5b57\u7b26\u4e32 <code>name<\/code> \u8f6c\u6362\u4e3a\u4e00\u4e2a <code>rune<\/code> \u5207\u7247\u3002\u8fd9\u6837\uff0c\u4f60\u5c31\u53ef\u4ee5\u6309 Unicode \u7801\u70b9\u8fed\u4ee3\u5b57\u7b26\u4e32\u4e2d\u7684\u6bcf\u4e2a\u5b57\u7b26\uff0c\u800c\u4e0d\u4ec5\u4ec5\u662f\u6309\u5b57\u8282\u3002\u8fd9\u5728\u5904\u7406\u975e ASCII \u5b57\u7b26\uff08\u5982\u4e2d\u6587\u5b57\u7b26\u3001\u8868\u60c5\u7b26\u53f7\u7b49\uff09\u65f6\u7279\u522b\u6709\u7528\uff0c\u56e0\u4e3a\u8fd9\u4e9b\u5b57\u7b26\u5728 UTF-8 \u7f16\u7801\u4e2d\u53ef\u80fd\u5360\u7528\u591a\u4e2a\u5b57\u8282\u3002<\/p>\n<h3>\u904d\u5386<\/h3>\n<p>\u6709\u4e24\u79cd\u904d\u5386\u65b9\u5f0f\uff1a\u4e0b\u6807\u4e0erange\u3002\u4e0b\u6807\u65b9\u5f0f\u904d\u5386\u65f6\uff0c\u8f93\u51fa\u7684\u662f\u6bcf\u4e2a\u5b57\u8282\uff1b\u8981\u8f93\u51fa\u5bf9\u5e94\u7684Unicode\u5b57\u7b26\uff0c\u9700\u8981\u901a\u8fc7range\u65b9\u5f0f\u3002<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;fmt&quot;\n)\n\nfunc main() {\n    s1 := &quot;W\u5b57\u7b26&quot;\n    \/\/ \u8f93\u51fa7\u4e2a\u6570\u503c\uff08\u6bcf\u4e2a\u5b57\u8282\u5bf9\u5e94\u6570\u503c\uff09\n    for i := 0; i &lt; len(s1); i++ {\n        fmt.Println(s1[i])\n    }\n\n    \/\/ \u8f93\u51fa\u4e09\u4e2a\u5b57\u7b26\uff08\u5206\u522b\uff1aW \u5b57 \u7b26\uff09\n    for i, v := range s1 {\n        fmt.Println(i, string(v))\n    }\n\n}\n`\n87\n229\n173\n151\n231\n172\n166\n0 W\n1 \u5b57\n4 \u7b26\n`<\/code><\/pre>\n<h3>\u4fee\u6539<\/h3>\n<p>golang\u4e2d\u5b57\u7b26\u4e32\u5185\u5bb9\u9ed8\u8ba4\u4e0d\u80fd\u4fee\u6539\uff0c\u82e5\u8981\u4fee\u6539\u9700\u8981\u8f6c\u6362\u4e3a[]byte\u6216[]rune\u7c7b\u578b\u4fee\u6539\u540e\u518d\u8f6c\u56de\uff1a<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;fmt&quot;\n)\n\nfunc main() {\n    s1 := &quot;W\u5b57\u7b26&quot;\n    b1 := []byte(s1)\n    fmt.Println(len(b1)) \/\/ 7\n    b1[0] = &#039;M&#039;\n    fmt.Println(string(b1)) \/\/ M\u5b57\u7b26\n\n    r1 := []rune(s1)\n    \/\/r1 := []int32(s1)\n    fmt.Println(len(r1)) \/\/ 3\n    r1[1] = &#039;\u4e16&#039;\n    fmt.Println(string(r1)) \/\/W\u4e16\u7b26\n}\n`\n7\nM\u5b57\u7b26\n3\nW\u4e16\u7b26\n`<\/code><\/pre>\n<h2>strings\u5305<\/h2>\n<p>strings\u4e2d\u5305\u542b\u4e86\u4e00\u4e9b\u5e38\u7528\u7684\u5b57\u7b26\u4e32\u64cd\u4f5c\u51fd\u6570\uff0c\u5728\u6d89\u53ca\u5230\u5b57\u7b26\u4e32\u4fee\u6539\u65f6\uff0c\u8fd4\u56de\u65b0\u7684\u4e32\u3002<\/p>\n<ul>\n<li>\u524d\u540e\u7f00\uff1aHasPrefix\u3001HasSuffix\uff1b<\/li>\n<li>\u662f\u5426\u5305\u542b\uff1aContains\uff1b<\/li>\n<li>\u5927\u5c0f\u5199\u8f6c\u6362\uff1aToLower\u3001ToUpper\u3001Title\uff1b<\/li>\n<li>\u4fee\u526a\uff1aTrim\u3001Trimleft\u3001TrimRight\uff1b<strong>TrimSpace<\/strong>\u53bb\u9664\u7a7a\u767d<\/li>\n<li>\u62fc\u63a5\u62c6\u5206\uff1aJoin\u3001Split\u3001Fields\uff08\u6839\u636e\u7a7a\u767d\u5206\u5272\uff09\uff1b<\/li>\n<li>\u67e5\u627e\u4f4d\u7f6e\uff08-1\u8868\u793a\u8868\u793a\u672a\u627e\u5230\uff09\uff1aIndex\u3001LastIndex\u3001IndexRune\uff1b<\/li>\n<li>\u7edf\u8ba1\u6570\u91cf\uff1aCount\uff1b<\/li>\n<li>\u91cd\u53e0\u4e32\uff1aRepeat\uff0c\u91cd\u590dn\u6b21\u751f\u6210\u65b0\u7684\u4e32\uff1b<\/li>\n<li>\u66ff\u6362\uff1aReplace\uff0c\u53ef\u6307\u5b9a\u66ff\u6362\u6570\u91cf\uff0c\u8d1f\u6570\u8868\u793a\u5168\u90e8\u66ff\u6362\uff1b<\/li>\n<\/ul>\n<h3>Map<\/h3>\n<p><code>func Map(mapping func(rune) rune, s string) string<\/code>\uff0c\u6839\u636emapping\u51fd\u6570\u4fee\u6539s\u4e2d\u7684\u5b57\u7b26\uff0c\u5e76\u8fd4\u56de\u4fee\u6539\u540e\u65b0\u7684\u4e32\uff1b\u82e5mapping\u8fd4\u56de\u8d1f\u503c\uff0c\u5219\u5220\u9664\u5bf9\u5e94\u5b57\u7b26\u3002<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;fmt&quot;\n    &quot;strings&quot;\n)\n\nfunc main() {\n    rot13 := func(r rune) rune {\n        switch {\n        case r &gt;= &#039;A&#039; &amp;&amp; r &lt;= &#039;Z&#039;:\n            return &#039;A&#039; + (r-&#039;A&#039;+13)%26\n        case r &gt;= &#039;a&#039; &amp;&amp; r &lt;= &#039;z&#039;:\n            return &#039;a&#039; + (r-&#039;a&#039;+13)%26\n        }\n        return r\n    }\n    fmt.Println(strings.Map(rot13, &quot;Twas brillig and the slithy gopher...&quot;))\n}\n`\nGjnf oevyyvt naq gur fyvgul tbcure...\n`<\/code><\/pre>\n<h3>Reader<\/h3>\n<p>\u7528\u4e8e\u8bfb\u53d6\u5b57\u7b26\u4e32\uff0c\u5b9e\u73b0\u4e86io.Reader\u3001io.ReaderAt\u3001io.Seeker\u3001io.WriterTo\u3001io.ByteScanner\u3001io.RuneScanner\u3002<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;fmt&quot;\n    &quot;strings&quot;\n)\n\nfunc main() {\n    r := strings.NewReader(&quot;abcdefghijklmn&quot;)\n    fmt.Println(&quot;total len:&quot;, r.Len()) \/\/ 14\n    var buf []byte\n    buf = make([]byte, 5)\n    readLen, err := r.Read(buf)\n    fmt.Println(&quot;read len:&quot;, readLen) \/\/ 5\n    if err != nil {\n        fmt.Println(&quot;error:&quot;, err)\n    }\n    fmt.Println(string(buf))            \/\/ abcde\n    fmt.Println(&quot;remain len:&quot;, r.Len()) \/\/ 9   \u8bfb\u53d6\u5230\u4e865\u4e2a \u5269\u4f59\u672a\u8bfb\u662f14-5\n    fmt.Println(&quot;size:&quot;, r.Size())      \/\/ 14   \u5b57\u7b26\u4e32\u7684\u957f\u5ea6\n}\n`\ntotal len: 14\nread len: 5\nabcde\nremain len: 9\nsize: 14\n`<\/code><\/pre>\n<h3>Replacer<\/h3>\n<p>\u7528\u4e8e\u5b57\u7b26\u4e32\u66ff\u6362\uff1bplacer\u4e2d\u5305\u542b\u8981\u66ff\u6362\u5b57\u7b26\u4e32\u7684\u5217\u8868\uff0c\u4e14\u662f\u7ebf\u7a0b\u5b89\u5168\u7684\uff1a<\/p>\n<pre><code class=\"language-go\">package main\n\nimport (\n    &quot;fmt&quot;\n    &quot;strings&quot;\n)\n\nfunc main() {\n    r := strings.NewReplacer(&quot;&lt;&quot;, &quot;&gt;&quot;, &quot;&gt;&quot;, &quot;&lt;&quot;)\n    fmt.Println(r.Replace(&quot;This is &lt;b&gt;HTML&lt;\/b&gt;!&quot;)) \/\/ This is &gt;b&lt;HTML&gt;\/b&lt;!\n}<\/code><\/pre>\n<h2>strconv\u5305<\/h2>\n<p>strconv\u5305\u7528\u4e8e\u5b57\u7b26\u4e32\u4e0e\u5176\u5b83\u7c7b\u578b\u95f4\u7684\u8f6c\u6362\uff1a<\/p>\n<ul>\n<li>\u6574\u6570\u8f6c\u5b57\u7b26\u4e32\uff1astrconv.FormatInt\u3001strconv.FormatUint\u3001strconv.Itoa\uff08\u76f8\u5f53\u4e8e<code>FormatInt(i, 10)<\/code>\uff09\uff1b<\/li>\n<li>\u5e03\u5c14\u8f6c\u5b57\u7b26\u4e32\uff08\u201ctrue\u201d \u6216 \u201cfalse\u201d\uff09\uff1astrconv.FormatBool\uff1b<\/li>\n<li>\u6d6e\u70b9\u8f6c\u5b57\u7b26\u4e32\uff1astrconv.FormatFloat\uff1b<\/li>\n<li>\u5b57\u7b26\u4e32\u8f6c\u6574\u6570\uff1astrconv.ParseInt\u3001strconv.ParseUint\u3001strconv.Atoi\uff08\u76f8\u5f53\u4e8e<code>ParseInt(s, 10, 0)<\/code>\uff09\uff1b<\/li>\n<li>\u5b57\u7b26\u4e32\u8f6c\u5e03\u5c14\uff1astrconv.ParseBool\uff08<code>1\uff0ct\uff0cT\uff0cTRUE\uff0ctrue\uff0cTrue<\/code>\u4e3a\u771f\uff1b<code>0\uff0cf\uff0cF\uff0cFALSE\uff0cfalse\uff0cFalse<\/code>\u4e3a\u5047\uff09\uff1b<\/li>\n<li>\u5b57\u7b26\u4e32\u8f6c\u6d6e\u70b9\uff1astrconv.ParseFloat\uff1b<\/li>\n<li>appendXXX\uff1a\u5728[]byte\u540e\u8ffd\u52a0\u5bf9\u5e94\u7c7b\u578b\uff1b<\/li>\n<\/ul>\n<p>\u5728\u8f6c\u6362\u65f6\uff0c\u4f1a\u51fa\u73b0\u4e24\u79cd\u7c7b\u578b\u7684\u9519\u8bef\uff1a<\/p>\n<ul>\n<li>ErrRange\uff1a\u8868\u793a\u503c\u8d85\u8fc7\u4e86\u7c7b\u578b\u80fd\u8868\u793a\u7684\u6700\u5927\u8303\u56f4\u3002<\/li>\n<li>ErrSyntax\uff1a\u8868\u793a\u8bed\u6cd5\u9519\u8bef\u3002<\/li>\n<\/ul>\n<h3>\u5b57\u7b26\u4e32\u8f6c\u6574\u6570<\/h3>\n<pre><code>func ParseInt(s string, base int, bitSize int)(i int64, err error)<\/code><\/pre>\n<ul>\n<li>s\uff1a\u8981\u8f6c\u6362\u7684\u5b57\u7b26\u4e32<\/li>\n<li>base\uff1a\u8fdb\u4f4d\u5236\uff082~36 \u8fdb\u5236\uff09\uff0c0\u6839\u636e\u5b57\u7b26\u4e32\u5224\u65ad\u8fdb\u5236\uff080x:16\uff0c0:8\uff0c\u5176\u5b83:10\uff09\uff1b<\/li>\n<li>bitSize\uff1a\u6307\u5b9a\u6574\u6570\u7c7b\u578b\uff080:int\u30018:int8\u300116:int16\u300132:int32\u300164:int64\uff09<\/li>\n<\/ul>\n<p>\u5e38\u7528\u7684Atoi\uff0c\u662f\u4e00\u4e2a\u7b80\u6613\u7248\uff0c\u76f8\u5f53\u4e8e<code>ParseInt(s, 10, 0)<\/code>\u3002<\/p>\n<h3>\u6d6e\u70b9\u6570\u8f6c\u5b57\u7b26\u4e32<\/h3>\n<pre><code>func FormatFloat(f float64, fmt byte, prec, bitSize int) string<\/code><\/pre>\n<ul>\n<li>f\uff1a\u8981\u8f6c\u6362\u7684\u6d6e\u70b9\u6570<\/li>\n<li>fmt\uff1a\u683c\u5f0f\u6807\u8bb0\uff08b\u3001e\u3001E\u3001f\u3001g\u3001G\uff09<\/li>\n<li>prec\uff1a\u7cbe\u5ea6\uff08\u6570\u5b57\u90e8\u5206\u7684\u957f\u5ea6\uff0c\u4e0d\u5305\u62ec\u6307\u6570\u90e8\u5206\uff09<\/li>\n<li>bitSize\uff1a\u6307\u5b9a\u6d6e\u70b9\u7c7b\u578b\uff08<strong>32:float32\u300164:float64<\/strong>\uff09<\/li>\n<\/ul>\n<p>FormatFloat\u53c2\u6570\u53ea\u63a5\u653664\u4f4d\u6d6e\u70b9\uff0c\u8981\u8f6c\u636232\u4f4d\u6d6e\u70b9\u53ef\uff1a<\/p>\n<ul>\n<li>\u4f7f\u7528fmt.Sprintf\u5b9e\u73b0\uff1b<\/li>\n<li>\u4f7f\u7528FormatFloat\uff1a\u9700\u8f6c\u4e3afloat64\uff0c\u4f46<strong>bitSize\u4f7f\u752832<\/strong>\uff1b<\/li>\n<\/ul>\n<pre><code class=\"language-go\">var v32 float32 = 3.1415926535\nvar v64 float64 = 3.1415926535\ns32 := fmt.Sprintf(&quot;%.4f&quot;, v32)\ns32_1 := strconv.FormatFloat(float64(v32), &#039;f&#039;, 4, 32)\ns64 := strconv.FormatFloat(v64, &#039;f&#039;, 4, 64)<\/code><\/pre>\n<p>\u683c\u5f0f\u6807\u8bb0\uff1a<\/p>\n<ul>\n<li>\u2018b\u2019 (-ddddp\u00b1ddd\uff0c\u4e8c\u8fdb\u5236\u6307\u6570)<\/li>\n<li>\u2018e\u2019 (-d.dddde\u00b1dd\uff0c\u5341\u8fdb\u5236\u6307\u6570)<\/li>\n<li>\u2018E\u2019 (-d.ddddE\u00b1dd\uff0c\u5341\u8fdb\u5236\u6307\u6570)<\/li>\n<li>\u2018f\u2019 (-ddd.dddd\uff0c\u6ca1\u6709\u6307\u6570)<\/li>\n<li>\u2018g\u2019 (\u2018e\u2019:\u5927\u6307\u6570\uff0c\u2018f\u2019:\u5176\u5b83\u60c5\u51b5)<\/li>\n<li>\u2018G\u2019 (\u2018E\u2019:\u5927\u6307\u6570\uff0c\u2018f\u2019:\u5176\u5b83\u60c5\u51b5)<\/li>\n<\/ul>\n<pre><code class=\"language-go\">f := 100.123456789\nfmt.Println(strconv.FormatFloat(f, &#039;b&#039;, 5, 32)) \/\/ 13123382p-17\nfmt.Println(strconv.FormatFloat(f, &#039;e&#039;, 5, 32)) \/\/ 1.00123e+02\nfmt.Println(strconv.FormatFloat(f, &#039;E&#039;, 5, 32)) \/\/ 1.00123E+02\nfmt.Println(strconv.FormatFloat(f, &#039;f&#039;, 5, 32)) \/\/ 100.12346\nfmt.Println(strconv.FormatFloat(f, &#039;g&#039;, 5, 32)) \/\/ 100.12\nfmt.Println(strconv.FormatFloat(f, &#039;G&#039;, 5, 32)) \/\/ 100.12<\/code><\/pre>\n<h3>\u5b57\u7b26\u4e32\u8f6c\u6d6e\u70b9\u6570<\/h3>\n<p>\u901a\u8fc7<code>ParseFloat(s string, bitSize int) (float64, error)<\/code>\u53ef\u65b9\u4fbf\u5730\u628a\u5b57\u7b26\u4e32\u8f6c\u4e3afloat64\uff1b\u82e5\u8981\u8f6c\u6362\u4e3afloat32\uff0c\u9700\u8981bitSize\u4f2032\uff0c\u5e76\u628a\u7ed3\u679c\u76f4\u63a5\u8f6c\u6362\u4e3afloat32\u5373\u53ef\u3002<\/p>\n<pre><code class=\"language-go\">v := &quot;3.1415926535&quot;\nr64, _ := strconv.ParseFloat(v, 64)\nr, _ := strconv.ParseFloat(v, 32)\nr32 := float32(r)\nfmt.Println(r64, r32)<\/code><\/pre>\n<h2>\u683c\u5f0f\u5316\u7b26<\/h2>\n<p>\u5bf9\u4e8e\u590d\u6742\u7c7b\u578b\uff0c\u9ed8\u8ba4\u6309\u4ee5\u4e0b\u89c4\u5219\u6253\u5370\uff1a<\/p>\n<ul>\n<li><code>struct<\/code>: {field0 field1 \u2026}<\/li>\n<li><code>array, slice<\/code>: [elem0 elem1 \u2026]<\/li>\n<li><code>maps<\/code>: map[key1:value1 key2:value2 \u2026]<\/li>\n<li><code>pointer to above<\/code>: &amp;{}, &amp;[], &amp;map[]<\/li>\n<\/ul>\n<h3>\u901a\u7528<\/h3>\n<p>\u901a\u7528\u7684\u683c\u5f0f\u5316\u7b26\uff1a<\/p>\n<ul>\n<li><code>%v<\/code>\uff1a\u503c\u7684\u9ed8\u8ba4\u683c\u5f0f\uff0c\u53d8\u91cf\u7684\u81ea\u7136\u5f62\u5f0f\uff08natural format\uff09\uff1b<\/li>\n<li><code>%+v<\/code>\uff1a\u5f53\u6253\u5370\u7ed3\u6784\u4f53\u65f6\uff0c\u8f93\u51fa\u7ed3\u6784\u4f53\u6210\u5458\u540d\u4e0e\u503c;<\/li>\n<li><code>%#v<\/code>\uff1a\u5f53\u6253\u5370\u7ed3\u6784\u4f53\u65f6\uff0c\u8f93\u51fa\u7ed3\u6784\u4f53\u7c7b\u578b\u540d\u3001\u6210\u5458\u540d\u4e0e\u503c<\/li>\n<li><code>%T<\/code>\uff1a\u6253\u5370\u7c7b\u578b\uff08\u76f8\u5e94\u503c\u7684\u7c7b\u578b\uff09\uff1b<\/li>\n<li><code>%%<\/code>\uff1a\u6253\u5370\u767e\u5206\u53f7\uff1b<\/li>\n<\/ul>\n<pre><code class=\"language-go\">type ListNode struct {\n    Val int\n    Next *ListNode\n}\n\ntmp := ListNode{\n    Val:  -1,\n    Next: nil,\n}\nfmt.Printf(&quot; %v \\n %+v \\n %#v \\n %T \\n&quot;, tmp, tmp, tmp, tmp)\n\/\/ {-1 &lt;nil&gt;}\n\/\/ {Val:-1 Next:&lt;nil&gt;}\n\/\/ ListNode{Val:-1, Next:(*ListNode)(nil)}\n\/\/ ListNode<\/code><\/pre>\n<h3>\u6307\u9488<\/h3>\n<p>\u5730\u5740\u683c\u5f0f\u5316\u7b26\uff1a<\/p>\n<ul>\n<li><code>%p<\/code>\uff1a\u6253\u5370\u6307\u9488\u7684\u5730\u5740\uff08\u4ee50x\u5f00\u59cb\uff09\uff1b\u5bf9\u4e8e\u5207\u7247\u6253\u5370\u9996\u4e2a\u5143\u7d20\u7684\u5730\u5740\uff1b<\/li>\n<\/ul>\n<pre><code class=\"language-go\">sl := []int{1,2,3}\nfmt.Printf(&quot; %v \\n %+v \\n %#v \\n %p \\n&quot;, sl, sl, sl, sl)\n\/\/ [1 2 3]\n\/\/ [1 2 3]\n\/\/ []int{1, 2, 3}\n\/\/ 0xc00000c3a0<\/code><\/pre>\n<h3>\u6570\u503c<\/h3>\n<p>\u5e03\u5c14\u7c7b\u578b\uff1a<\/p>\n<ul>\n<li><code>%t<\/code>\uff1a\u6253\u5370true \u6216 false<\/li>\n<\/ul>\n<p>\u6574\u6570\uff1a<\/p>\n<ul>\n<li><code>%b<\/code>\uff1a\u4e8c\u8fdb\u5236\u8868\u793a<\/li>\n<li><code>%c<\/code>\uff1a\u76f8\u5e94Unicode\u7801\u70b9\u6240\u8868\u793a\u7684\u5b57\u7b26<\/li>\n<li><code>%d<\/code>\uff1a\u5341\u8fdb\u5236\u8868\u793a<\/li>\n<li><code>%o<\/code>\uff1a\u516b\u8fdb\u5236\u8868\u793a<\/li>\n<li><code>%q<\/code>\uff1a\u5355\u5f15\u53f7\u56f4\u7ed5\u7684\u5b57\u7b26\u5b57\u9762\u503c<\/li>\n<li><code>%x<\/code>\uff1a\u5341\u516d\u8fdb\u5236\u8868\u793a\uff0c\u5b57\u6bcd\u5f62\u5f0f\u4e3a\u5c0f\u5199 a-f<\/li>\n<li><code>%X<\/code>\uff1a\u5341\u516d\u8fdb\u5236\u8868\u793a\uff0c\u5b57\u6bcd\u5f62\u5f0f\u4e3a\u5927\u5199 A-F<\/li>\n<li><code>%U<\/code>\uff1aUnicode\u683c\u5f0f\uff1aU+1234\uff0c\u7b49\u540c\u4e8e \u201cU+%04X\u201d<\/li>\n<\/ul>\n<p><code>%q<\/code>\u683c\u5f0f\u5316\u7b26\uff1a<\/p>\n<pre><code class=\"language-go\">n := 65\nch := &#039;\u5b57&#039;\ns := &quot;\u5b57\u7b26&quot;\nfmt.Printf(&quot;%q, %q, %q\\n&quot;, n, ch, s)\n\/\/ &#039;A&#039;, &#039;\u5b57&#039;, &quot;\u5b57\u7b26&quot;<\/code><\/pre>\n<p>\u6d6e\u70b9\u4e0e\u590d\u6570\uff1a<\/p>\n<ul>\n<li><code>%b<\/code>\uff1a\u6307\u6570\u4e3a2\u7684\u5e42\u7684\u79d1\u5b66\u8ba1\u6570\u6cd5\uff0c\u4e0e strconv.FormatFloat\u4e2d\u7684 \u2018b\u2019 \u8f6c\u6362\u683c\u5f0f\u4e00\u81f4\u3002\u4f8b\u5982 -123456p-78<\/li>\n<li><code>%e<\/code>\uff1a\u79d1\u5b66\u8ba1\u6570\u6cd5\uff0c\u4f8b\u5982 -1234.456e+78<\/li>\n<li><code>%E<\/code>\uff1a\u79d1\u5b66\u8ba1\u6570\u6cd5\uff0c\u4f8b\u5982 -1234.456E+78<\/li>\n<li><code>%f<\/code>\uff1a\u6709\u5c0f\u6570\u70b9\u800c\u65e0\u6307\u6570\uff0c\u4f8b\u5982 123.456<\/li>\n<li><code>%g<\/code>\uff1a\u6839\u636e\u60c5\u51b5\u9009\u62e9 %e \u6216 %f \u4ee5\u4ea7\u751f\u66f4\u7d27\u51d1\u7684\uff08\u65e0\u672b\u5c3e\u76840\uff09\u8f93\u51fa<\/li>\n<li><code>%G<\/code>\uff1a\u6839\u636e\u60c5\u51b5\u9009\u62e9 %E \u6216 %f \u4ee5\u4ea7\u751f\u66f4\u7d27\u51d1\u7684\uff08\u65e0\u672b\u5c3e\u76840\uff09\u8f93\u51fa<\/li>\n<\/ul>\n<h3>\u5b57\u7b26\u4e32\u4e0e\u5b57\u8282\u5e8f\u5217<\/h3>\n<p>\u5b57\u7b26\u4e32\u4e0ebyte\u5207\u7247\uff1a<\/p>\n<ul>\n<li><code>%s<\/code>\uff1a\u5b57\u7b26\u4e32\u6216\u5207\u7247\u7684\u65e0\u89e3\u8bd1\u5b57\u8282\uff1b<\/li>\n<li><code>%q<\/code>\uff1a\u53cc\u5f15\u53f7\u56f4\u7ed5\u7684\u5b57\u7b26\u4e32\uff1b<\/li>\n<li><code>%x<\/code>\uff1a\u5341\u516d\u8fdb\u5236\uff0c\u5c0f\u5199\u5b57\u6bcd\uff0c\u6bcf\u5b57\u8282\u4e24\u4e2a\u5b57\u7b26\uff1b<\/li>\n<li><code>%X<\/code>\uff1a\u5341\u516d\u8fdb\u5236\uff0c\u5927\u5199\u5b57\u6bcd\uff0c\u6bcf\u5b57\u8282\u4e24\u4e2a\u5b57\u7b26\uff1b<\/li>\n<\/ul>\n<pre><code class=\"language-go\">s := &quot;\u5b57\u7b26&quot;\nfmt.Printf(&quot;%v, %q, %s, %x, % x\\n&quot;, s, s, s, s, s)\nsl := []byte{65, 74, 77}\nfmt.Printf(&quot;%v, %q, %s, %X, % X\\n&quot;, sl, sl, sl, sl, sl)\n\/\/ \u5b57\u7b26, &quot;\u5b57\u7b26&quot;, \u5b57\u7b26, e5ad97e7aca6, e5 ad 97 e7 ac a6\n\/\/ [65 74 77], &quot;AJM&quot;, AJM, 414A4D, 41 4A 4D<\/code><\/pre>\n<h3>\u5bbd\u5ea6\u4e0e\u7cbe\u5ea6<\/h3>\n<ul>\n<li>\u5bbd\u5ea6\uff1a\u901a\u8fc7\u767e\u5206\u53f7\u540e\u9762\u7684\u5341\u8fdb\u5236\u6570\u6307\u5b9a\uff1b\u82e5\u672a\u6307\u5b9a\u5bbd\u5ea6\uff0c\u8868\u793a\u9664\u5fc5\u9700\u4e4b\u5916\u4e0d\u4f5c\u586b\u5145\uff1b<\/li>\n<li>\u7cbe\u5ea6\uff08\u53ef\u80fd\u6709\uff09\uff1a\u5bbd\u5ea6\u540e\u8ddf\u70b9\u53f7\u540e\u8ddf\u7684\u5341\u8fdb\u5236\u6570\u6307\u5b9a\uff1b\u82e5\u672a\u6307\u5b9a\u7cbe\u5ea6\uff0c\u5219\u4f7f\u7528\u9ed8\u8ba4\u7cbe\u5ea6\uff1b\u5982\u679c\u70b9\u53f7\u540e\u6ca1\u6709\u8ddf\u6570\u5b57\uff0c\u8868\u793a\u7cbe\u5ea6\u4e3a0\u3002<\/li>\n<\/ul>\n<pre><code>%f     default width, default precision\n%9f    width 9, default precision\n%.2f   default width, precision 2\n%9.2f  width 9, precision 2\n%9.f   width 9, precision 0<\/code><\/pre>\n<h3>\u6807\u8bc6\u7b26<\/h3>\n<p>\u6807\u8bc6\u7b26\u4e0e\u586b\u5145\u7b26\u53f7\uff1a<\/p>\n<ul>\n<li><code>+<\/code>\uff1a \u603b\u662f\u8f93\u51fa\u6570\u503c\u7684\u6b63\u8d1f\u53f7\uff1b\u5bf9%q\uff08%+q\uff09\u4f1a\u751f\u6210\u5168\u90e8\u662fASCII\u5b57\u7b26\u7684\u8f93\u51fa\uff08\u901a\u8fc7\u8f6c\u4e49\uff09\uff1b<\/li>\n<li><code>-<\/code>\uff1a \u5728\u8f93\u51fa\u53f3\u8fb9\u586b\u5145\u7a7a\u767d\u800c\u4e0d\u662f\u9ed8\u8ba4\u7684\u5de6\u8fb9\uff08\u5373\u4ece\u9ed8\u8ba4\u7684\u53f3\u5bf9\u9f50\u5207\u6362\u4e3a\u5de6\u5bf9\u9f50\uff09\uff1b<\/li>\n<li><code>#<\/code>\uff1a \u5207\u6362\u683c\u5f0f\uff1b<br \/>\n\u516b\u8fdb\u5236\u6570\u524d\u52a00\uff08%#o\uff09\uff0c\u5341\u516d\u8fdb\u5236\u6570\u524d\u52a00x\uff08%#x\uff09\u62160X\uff08%#X\uff09\uff0c\u6307\u9488\u53bb\u6389\u524d\u9762\u76840x\uff08%#p\uff09\uff1b<br \/>\n\u5bf9%q\uff08%#q\uff09\uff0c\u5982\u679cstrconv.CanBackquote\u8fd4\u56de\u771f\u4f1a\u8f93\u51fa\u53cd\u5f15\u53f7\u62ec\u8d77\u6765\u7684\u672a\u8f6c\u4e49\u5b57\u7b26\u4e32\uff1b<br \/>\n\u5bf9%U\uff08%#U\uff09\uff0c\u5982\u679c\u5b57\u7b26\u662f\u53ef\u6253\u5370\u7684\uff0c\u4f1a\u5728\u8f93\u51faUnicode\u683c\u5f0f\u3001\u7a7a\u683c\u3001\u5355\u5f15\u53f7\u62ec\u8d77\u6765\u7684go\u5b57\u9762\u503c\uff1b<\/li>\n<li><code>(\u7a7a\u683c)<\/code>\uff1a \u5bf9\u4e8e\u6570\u503c\uff0c\u6b63\u6570\u524d\u52a0\u7a7a\u683c\u800c\u8d1f\u6570\u524d\u52a0\u8d1f\u53f7\uff1b\u5bf9\u4e8e\u5b57\u7b26\u4e32\u91c7\u7528%x\u6216%X\u65f6\uff08% x\u6216% X\uff09\u4f1a\u7ed9\u5404\u6253\u5370\u7684\u5b57\u8282\u4e4b\u95f4\u52a0\u7a7a\u683c\uff1b<\/li>\n<li><code>0<\/code>\uff1a \u4f7f\u75280\u800c\u4e0d\u662f\u7a7a\u683c\u586b\u5145\uff0c\u5bf9\u4e8e\u6570\u503c\u7c7b\u578b\u4f1a\u628a\u586b\u5145\u76840\u653e\u5728\u6b63\u8d1f\u53f7\u540e\u9762\uff1b<\/li>\n<\/ul>\n<pre><code class=\"language-go\">ch := &#039;\u5b57&#039;\nfmt.Printf(&quot;%q, %+q\\n&quot;, ch, ch)\ns := &quot;\u5b57\u7b26&quot;\nfmt.Printf(&quot;%q, %+q\\n&quot;, s, s)\n\/\/ &#039;\u5b57&#039;, &#039;\\u5b57&#039;\n\/\/ &quot;\u5b57\u7b26&quot;, &quot;\\u5b57\\u7b26&quot;<\/code><\/pre>\n<h3>\u5360\u4f4d\u7b26<\/h3>\n<p>go\u652f\u6301\u663e\u793a\u53c2\u6570\u5360\u4f4d\u7b26\uff0c\u901a\u8fc7\u5728\u8f93\u51fa\u683c\u5f0f\u4e2d\u6307\u5b9a\u5176\u8f93\u51fa\u7684\u987a\u5e8f\u5373\u53ef\uff1b\u53c2\u6570<em>\u4ece1\u5f00\u59cb<\/em>\uff0c\u4f7f\u7528\u4e2d\u62ec\u53f7\u62ec\u8d77\u6765\u3002<br \/>\n\u5bbd\u5ea6\u4e0e\u7cbe\u5ea6\u4e2d\u7684<code>*<\/code>\u53ef\u901a\u8fc7\u540e\u9762\u53c2\u6570\u66ff\u6362\u3002<\/p>\n<pre><code class=\"language-go\">fmt.Printf(&quot;%[2]d, %[1]d\\n&quot;, 11, 22)  \/\/22, 11\n\nfmt.Sprintf(&quot;%[3]*.[2]*[1]f&quot;, 12.0, 2, 6)\n\/\/ \u7b49\u4ef7\u4e8e\uff1afmt.Sprintf(&quot;%6.2f&quot;, 12.0)<\/code><\/pre>\n<h3>\u683c\u5f0f\u5316\u9519\u8bef<\/h3>\n<p>\u6240\u6709\u683c\u5f0f\u5316\u9519\u8bef\uff08\u5982\u5c06\u4e00\u4e2a\u5b57\u7b26\u4e32\u63d0\u4f9b\u7ed9\uff05d\uff09\uff0c\u90fd\u4f1a\u8f93\u51fa\u4e00\u4e2a\u4ee5\u201c%!\u201d\u5f00\u59cb\u7684\u9519\u8bef\u4fe1\u606f\uff0c\u540e\u8ddf\u9519\u8bef\u5185\u5bb9\u3002<\/p>\n<pre><code class=\"language-go\">var i int = 1\nfmt.Printf(&quot;%s\\n&quot;, i)  \/\/%!s(int=1)<\/code><\/pre>\n<h2>GoStringer &amp; Stringer<\/h2>\n<p>Stringer\u63a5\u53e3\u5305\u542bString()\u65b9\u6cd5\uff1b\u4efb\u4f55\u7c7b\u578b\u53ea\u8981\u5b9a\u4e49\u4e86String()\u65b9\u6cd5\uff0c\u5c31\u76f8\u5f53\u4e8e\u5b9a\u5236\u4e86\u8f93\u51fa\uff08\u7c7b\u4f3cC#\u7b49\u4e2d\u7684toString\uff09\uff1b\u901a\u8fc7print\u76f4\u63a5\u8f93\u51fa\u6216<code>%v<\/code>\u8f93\u51fa\u65f6\uff0c\u5c31\u8c03\u7528\u6b64\u5b9a\u5236\u8f93\u51fa\uff1a<\/p>\n<pre><code class=\"language-go\">type Stringer interface {\n    String() string\n}<\/code><\/pre>\n<p>\u800cGoStringer\u63a5\u53e3\u5305\u542b\u4e86GoString()\u65b9\u6cd5\uff0c\u7528\u4e8e\u5b9a\u5236<code>%#v<\/code>\u7684\u683c\u5f0f\u5316\u8f93\u51fa\uff1a<\/p>\n<pre><code class=\"language-go\">type GoStringer interface {\n    GoString() string\n}<\/code><\/pre>\n<p>\u4ee5\u5b9a\u5236struct\u7684\u8f93\u51fa\u4e3a\u4f8b\uff1a<\/p>\n<pre><code class=\"language-go\">type Animal struct {\n    Name string\n    Age  uint\n}\n\n\/\/ Stringer interface: \u201cnative\u201d format for that value\nfunc (a Animal) String() string {\n    return fmt.Sprintf(&quot;Stringer: %v (%d)&quot;, a.Name, a.Age)\n}\n\n\/\/ GoStringer interface: Go syntax for that value (%#v format)\nfunc (a Animal) GoString() string {\n    return fmt.Sprintf(&quot;GoStringer: %v (%d)&quot;, a.Name, a.Age)\n}\n\nfunc TestFormat()  {\n    a := Animal{\n        Name: &quot;Gopher&quot;,\n        Age:  2,\n    }\n\n    fmt.Printf(&quot;%v, %#v\\n&quot;, a, a) \/\/ Stringer: Gopher (2), GoStringer: Gopher (2)\n    fmt.Println(a) \/\/ Stringer: Gopher (2)\n\n\/\/ \u82e5\u4e0d\u5b9a\u5236\uff08\u5373\u4e0d\u5b9e\u73b0String\u4e0eGoString\uff09\uff0c\u5219\u8f93\u51fa\u4f1a\u5982\u4e0b\n\/\/ {Gopher 2}, format.Animal{Name:&quot;Gopher&quot;, Age:0x2}\n\/\/ {Gopher 2}\n}<\/code><\/pre>\n<h2>Scanning<\/h2>\n<p>\u4e00\u7ec4\u8bfb\u53d6\u683c\u5f0f\u5316\u6587\u672c\u83b7\u53d6\u503c\u7684\u51fd\u6570\uff1a<\/p>\n<ul>\n<li>Scan\u3001Scanf\u548cScanln\u4ece\u6807\u51c6\u8f93\u5165os.Stdin\u4e2d\u8bfb\u53d6\uff1b<\/li>\n<li>Fscan\u3001Fscanf\u548cFscanln\u4ece\u6307\u5b9a\u7684io.Reader\u4e2d\u8bfb\u53d6\uff1b<\/li>\n<li>Sscan\u3001Sscanf\u548cSscanln\u4ece\u5b57\u7b26\u4e32\u4e2d\u8bfb\u53d6\u3002<\/li>\n<\/ul>\n<p>Scanln\u3001Fscanln\u548cSscanln\u5728\u8bfb\u53d6\u5230\u6362\u884c\u65f6\u505c\u6b62\uff0c\u5e76\u8981\u6c42\u4e00\u6b21\u63d0\u4f9b\u4e00\u884c\u6240\u6709\u6761\u76ee\uff1bScanf\u3001Fscanf\u548cSscanf\u53ea\u6709\u5728\u683c\u5f0f\u5316\u6587\u672c\u672b\u7aef\u6709\u6362\u884c\u65f6\u4f1a\u8bfb\u53d6\u5230\u6362\u884c\u4e3a\u6b62\uff0c\u5176\u5b83\u51fd\u6570\u5219\u5c06\u6362\u884c\u7b26\u89c6\u4e3a\u7a7a\u683c\uff1bScanf\u3001Fscanf\u3001Sscanf\u4f1a\u6839\u636e\u683c\u5f0f\u5b57\u7b26\u4e32\u89e3\u6790\u53c2\u6570\uff0c\u7c7b\u4f3cPrintf\u3002<\/p>\n<p>\u8981\u5b9a\u5236\u81ea\u5b9a\u4e49\u683c\u5f0f\u5316\u8f93\u5165\u7684\u7c7b\u578b\u9700\u8981\u5b9e\u73b0Scanner\u63a5\u53e3\uff1a<\/p>\n<pre><code class=\"language-go\">\/\/ Scanner \u7531\u81ea\u5b9a\u4e49\u7c7b\u578b\u5b9e\u73b0\uff0c\u7528\u4e8e\u5b9e\u73b0\u8be5\u7c7b\u578b\u7684\u81ea\u5b9a\u4e49\u626b\u63cf\u8fc7\u7a0b\u3002\n\/\/ \u5f53\u626b\u63cf\u5668\u9700\u8981\u89e3\u6790\u8be5\u7c7b\u578b\u7684\u6570\u636e\u65f6\uff0c\u4f1a\u8c03\u7528\u5176 Scan \u65b9\u6cd5\u3002\ntype Scanner interface {\n    \/\/ state \u7528\u4e8e\u83b7\u53d6\u5360\u4f4d\u7b26\u4e2d\u7684\u5bbd\u5ea6\u4fe1\u606f\uff0c\u4e5f\u7528\u4e8e\u4ece\u626b\u63cf\u5668\u4e2d\u8bfb\u53d6\u6570\u636e\u8fdb\u884c\u89e3\u6790\u3002\n    \/\/ verb \u662f\u5360\u4f4d\u7b26\u4e2d\u7684\u52a8\u8bcd\n    Scan(state ScanState, verb rune) error\n}\n\n\/\/ \u7531\u626b\u63cf\u5668\uff08Scan \u4e4b\u7c7b\u7684\u51fd\u6570\uff09\u5b9e\u73b0\uff0c\u7528\u4e8e\u7ed9\u81ea\u5b9a\u4e49\u626b\u63cf\u8fc7\u7a0b\u63d0\u4f9b\u6570\u636e\u548c\u4fe1\u606f\u3002\ntype ScanState interface {\n    \/\/ ReadRune \u4ece\u626b\u63cf\u5668\u4e2d\u8bfb\u53d6\u4e00\u4e2a\u5b57\u7b26\uff0c\u5982\u679c\u7528\u5728 Scanln \u7c7b\u7684\u626b\u63cf\u5668\u4e2d\uff0c\n    \/\/ \u5219\u8be5\u65b9\u6cd5\u4f1a\u5728\u8bfb\u5230\u7b2c\u4e00\u4e2a\u6362\u884c\u7b26\u4e4b\u540e\u6216\u8bfb\u5230\u6307\u5b9a\u5bbd\u5ea6\u4e4b\u540e\u8fd4\u56de EOF\u3002\n    \/\/ \u8fd4\u56de\u201c\u8bfb\u53d6\u7684\u5b57\u7b26\u201d\u548c\u201c\u5b57\u7b26\u7f16\u7801\u6240\u5360\u7528\u7684\u5b57\u8282\u6570\u201d\n    ReadRune() (r rune, size int, err error)\n    \/\/ UnreadRune \u64a4\u6d88\u6700\u540e\u4e00\u6b21\u7684 ReadRune \u64cd\u4f5c\uff0c\n    \/\/ \u4f7f\u4e0b\u6b21\u7684 ReadRune \u64cd\u4f5c\u5f97\u5230\u4e0e\u524d\u4e00\u6b21 ReadRune \u76f8\u540c\u7684\u7ed3\u679c\u3002\n    UnreadRune() error\n    \/\/ SkipSpace \u4e3a Scan \u65b9\u6cd5\u63d0\u4f9b\u8df3\u8fc7\u5f00\u5934\u7a7a\u767d\u7684\u80fd\u529b\u3002\n    \/\/ \u6839\u636e\u626b\u63cf\u5668\u7684\u4e0d\u540c\uff08Scan \u6216 Scanln\uff09\u51b3\u5b9a\u662f\u5426\u8df3\u8fc7\u6362\u884c\u7b26\u3002\n    SkipSpace()\n    \/\/ Token \u7528\u4e8e\u4ece\u626b\u63cf\u5668\u4e2d\u8bfb\u53d6\u7b26\u5408\u8981\u6c42\u7684\u5b57\u7b26\u4e32\uff0c\n    \/\/ Token \u4ece\u626b\u63cf\u5668\u4e2d\u8bfb\u53d6\u8fde\u7eed\u7684\u7b26\u5408 f(c) \u7684\u5b57\u7b26 c\uff0c\u51c6\u5907\u89e3\u6790\u3002\n    \/\/ \u5982\u679c f \u4e3a nil\uff0c\u5219\u4f7f\u7528 !unicode.IsSpace(c) \u4ee3\u66ff f(c)\u3002\n    \/\/ skipSpace\uff1a\u662f\u5426\u8df3\u8fc7\u5f00\u5934\u7684\u8fde\u7eed\u7a7a\u767d\u3002\u8fd4\u56de\u8bfb\u53d6\u5230\u7684\u6570\u636e\u3002\n    \/\/ \u6ce8\u610f\uff1atoken \u6307\u5411\u5171\u4eab\u7684\u6570\u636e\uff0c\u4e0b\u6b21\u7684 Token \u64cd\u4f5c\u53ef\u80fd\u4f1a\u8986\u76d6\u672c\u6b21\u7684\u7ed3\u679c\u3002\n    Token(skipSpace bool, f func(rune) bool) (token []byte, err error)\n    \/\/ Width \u8fd4\u56de\u5360\u4f4d\u7b26\u4e2d\u7684\u5bbd\u5ea6\u503c\u4ee5\u53ca\u5bbd\u5ea6\u503c\u662f\u5426\u88ab\u8bbe\u7f6e\n    Width() (wid int, ok bool)\n    \/\/ \u56e0\u4e3a\u4e0a\u9762\u5b9e\u73b0\u4e86 ReadRune \u65b9\u6cd5\uff0c\u6240\u4ee5 Read \u65b9\u6cd5\u6c38\u8fdc\u4e0d\u5e94\u8be5\u88ab\u8c03\u7528\u3002\n    \/\/ \u4e00\u4e2a\u597d\u7684 ScanState \u5e94\u8be5\u8ba9 Read \u76f4\u63a5\u8fd4\u56de\u76f8\u5e94\u7684\u9519\u8bef\u4fe1\u606f\u3002\n    Read(buf []byte) (n int, err error)\n}<\/code><\/pre>\n<h2>Printing<\/h2>\n<p>\u4e00\u7ec4\u683c\u5f0f\u5316\u8f93\u51fa\u7684\u51fd\u6570\uff1a<\/p>\n<ul>\n<li>Print\u3001Println\u548cPrintf\uff1a\u5c06\u5404\u53c2\u6570\u683c\u5f0f\u5316\u5230\u6807\u51c6\u8f93\u51faos.Stdout\uff1b<\/li>\n<li>Fprint\u3001Fprintln\u548cFprintf\uff1a\u5c06\u5404\u53c2\u6570\u683c\u5f0f\u5316\u5230io.Writere\u4e2d\uff1b<\/li>\n<li>Sprint\u3001Sprintln\u548cSprintf\uff1a\u5c06\u5404\u53c2\u6570\u683c\u5f0f\u5316\u5230\u5b57\u7b26\u4e32\uff1b<\/li>\n<\/ul>\n<p>\u8981\u5b9a\u5236\u81ea\u5b9a\u4e49\u683c\u5f0f\u5316\u8f93\u51fa\u7684\u7c7b\u578b\u9700\u8981\u5b9e\u73b0Formatter\u63a5\u53e3\uff1a<\/p>\n<pre><code class=\"language-go\">\/\/ Formatter \u7531\u81ea\u5b9a\u4e49\u7c7b\u578b\u5b9e\u73b0\uff0c\u7528\u4e8e\u5b9e\u73b0\u8be5\u7c7b\u578b\u7684\u81ea\u5b9a\u4e49\u683c\u5f0f\u5316\u8fc7\u7a0b\u3002\n\/\/ \u5f53\u683c\u5f0f\u5316\u5668\u9700\u8981\u683c\u5f0f\u5316\u8be5\u7c7b\u578b\u7684\u53d8\u91cf\u65f6\uff0c\u4f1a\u8c03\u7528\u5176 Format \u65b9\u6cd5\u3002\ntype Formatter interface {\n    \/\/ f \u7528\u4e8e\u83b7\u53d6\u5360\u4f4d\u7b26\u7684\u65d7\u6807\u3001\u5bbd\u5ea6\u3001\u7cbe\u5ea6\u7b49\u4fe1\u606f\uff0c\u4e5f\u7528\u4e8e\u8f93\u51fa\u683c\u5f0f\u5316\u7684\u7ed3\u679c\n    \/\/ c \u662f\u5360\u4f4d\u7b26\u4e2d\u7684\u52a8\u8bcd\n    Format(f State, c rune)\n}\n\n\/\/ \u7531\u683c\u5f0f\u5316\u5668\uff08Print \u4e4b\u7c7b\u7684\u51fd\u6570\uff09\u5b9e\u73b0\uff0c\u7528\u4e8e\u7ed9\u81ea\u5b9a\u4e49\u683c\u5f0f\u5316\u8fc7\u7a0b\u63d0\u4f9b\u4fe1\u606f\ntype State interface {\n    \/\/ Formatter \u901a\u8fc7 Write \u65b9\u6cd5\u5c06\u683c\u5f0f\u5316\u7ed3\u679c\u5199\u5165\u683c\u5f0f\u5316\u5668\u4e2d\uff0c\u4ee5\u4fbf\u8f93\u51fa\u3002\n    Write(b []byte) (ret int, err error)\n    \/\/ Formatter \u901a\u8fc7 Width \u65b9\u6cd5\u83b7\u53d6\u5360\u4f4d\u7b26\u4e2d\u7684\u5bbd\u5ea6\u4fe1\u606f\u53ca\u5176\u662f\u5426\u88ab\u8bbe\u7f6e\u3002\n    Width() (wid int, ok bool)\n    \/\/ Formatter \u901a\u8fc7 Precision \u65b9\u6cd5\u83b7\u53d6\u5360\u4f4d\u7b26\u4e2d\u7684\u7cbe\u5ea6\u4fe1\u606f\u53ca\u5176\u662f\u5426\u88ab\u8bbe\u7f6e\u3002\n    Precision() (prec int, ok bool)\n    \/\/ Formatter \u901a\u8fc7 Flag \u65b9\u6cd5\u83b7\u53d6\u5360\u4f4d\u7b26\u4e2d\u7684\u65d7\u6807[+- 0#]\u662f\u5426\u88ab\u8bbe\u7f6e\u3002\n    Flag(c int) bool\n}<\/code><\/pre>\n<h2>Errorf<\/h2>\n<p>go\u4e2d\u7684\u8fd4\u56de\u9519\u8bef\u90fd\u901a\u8fc7error\u6765\u8868\u793a\uff0cerrors.New\u548cfmt.Errorf\u51fd\u6570\u7528\u4e8e\u521b\u5efa\u5b9e\u73b0error\u63a5\u53e3\u7684\u9519\u8bef\u5bf9\u8c61\uff1a<\/p>\n<pre><code class=\"language-go\">type error interface {\n    Error() string\n}<\/code><\/pre>\n<p>Errorf\u529f\u80fd\u4e0eSprintf\u7c7b\u4f3c\uff0c\u4f46\u5c06\u683c\u5f0f\u5316\u7ed3\u679c\u5b57\u7b26\u4e32\u5305\u88c5\u6210error\u8fd4\u56de\uff0c\u4ee5\u65b9\u4fbf\u751f\u6210\u6240\u9700\u7684error\u9519\u8bef\u7c7b\u578b\u3002<\/p>\n<pre><code class=\"language-go\">func Dived(i int, j int) (r int, err error) {\n    if j == 0 {\n        err = fmt.Errorf(&quot;param-2 can not %d&quot;, j)\n        return \n    }\n\n    return i \/ j, err \n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5b57\u7b26\u4e32 golang\u4e2d\u5b57\u7b26\u4e32\u662f\u4e00\u79cd\u57fa\u672c\u7c7b\u578b\uff08string\uff09\uff0c\u662f\u4e00\u4e2a\u4e0d\u53ef\u6539\u53d8\u7684UTF-8\u5b57\u7b26\u5e8f\u5217\uff1a \u4e00\u4e2aASCII\u7801\u5360\u75281\u4e2a\u5b57\u8282\uff1b \u5176\u5b83\u5b57   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[117],"tags":[113],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/9350"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9350"}],"version-history":[{"count":1,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/9350\/revisions"}],"predecessor-version":[{"id":9351,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/9350\/revisions\/9351"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9350"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9350"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9350"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}