From bf33adee393147c150e6e688f6d1164e998ca0d2 Mon Sep 17 00:00:00 2001 From: plutolove233 Date: Sun, 10 Nov 2024 12:19:30 +0000 Subject: [PATCH] deploy: plutolove233/plutolove233.github.io@3040573d23d8cede4161145cdbab6fe146b1aa34 --- categories/index.html | 2 +- categories/index.xml | 2 +- .../index.html" | 3 ++- .../index.xml" | 2 +- go-basic2/index.html | 4 ++-- go/index.html | 18 +++++++++++++++++ go/index.md | 19 ++++++++++++++++++ go/install.png | Bin 0 -> 141840 bytes go/ok.png | Bin 0 -> 101613 bytes go/tool.png | Bin 0 -> 25118 bytes go/tools2.png | Bin 0 -> 80039 bytes index.html | 6 +++--- index.json | 2 +- index.xml | 2 +- page/2/index.html | 6 +++--- page/3/index.html | 3 ++- posts/index.html | 3 ++- posts/index.xml | 2 +- sitemap.xml | 2 +- tags/extension/index.xml | 2 +- tags/golang/index.html | 3 ++- tags/golang/index.xml | 2 +- tags/index.html | 2 +- tags/index.xml | 2 +- tags/vscode/index.xml | 2 +- todotree/index.html | 8 ++++---- todotree/index.md | 12 ++++++++--- todotree/todo-plugin.png | Bin 0 -> 41580 bytes todotree/todo-setting.png | Bin 0 -> 114724 bytes 29 files changed, 78 insertions(+), 31 deletions(-) create mode 100644 go/index.html create mode 100644 go/index.md create mode 100644 go/install.png create mode 100644 go/ok.png create mode 100644 go/tool.png create mode 100644 go/tools2.png create mode 100644 todotree/todo-plugin.png create mode 100644 todotree/todo-setting.png diff --git a/categories/index.html b/categories/index.html index 7e2b9b5..7e592c5 100644 --- a/categories/index.html +++ b/categories/index.html @@ -8,5 +8,5 @@ Cancel文章标签分类 -
+
\ No newline at end of file diff --git a/categories/index.xml b/categories/index.xml index 4689a78..68fe12b 100644 --- a/categories/index.xml +++ b/categories/index.xml @@ -1 +1 @@ -Categories - Category - yizhigopher的博客http://plutolove233.github.io/categories/Categories - Category - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Fri, 08 Nov 2024 22:39:44 +0800golang之路http://plutolove233.github.io/categories/golang%E4%B9%8B%E8%B7%AF/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/categories/golang%E4%B9%8B%E8%B7%AF/Dockerhttp://plutolove233.github.io/categories/docker/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/categories/docker/vscode插件配置设置http://plutolove233.github.io/categories/vscode%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E8%AE%BE%E7%BD%AE/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/categories/vscode%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E8%AE%BE%E7%BD%AE/cudahttp://plutolove233.github.io/categories/cuda/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/categories/cuda/golang小技巧http://plutolove233.github.io/categories/golang%E5%B0%8F%E6%8A%80%E5%B7%A7/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/categories/golang%E5%B0%8F%E6%8A%80%E5%B7%A7/Hugohttp://plutolove233.github.io/categories/hugo/Sun, 12 Nov 2023 15:39:14 +0800yizhigopherhttp://plutolove233.github.io/categories/hugo/机器学习之路http://plutolove233.github.io/categories/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/Fri, 10 Nov 2023 20:48:46 +0800yizhigopherhttp://plutolove233.github.io/categories/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ \ No newline at end of file +Categories - Category - yizhigopher的博客http://plutolove233.github.io/categories/Categories - Category - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Sun, 10 Nov 2024 20:11:24 +0800vscode插件配置设置http://plutolove233.github.io/categories/vscode%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E8%AE%BE%E7%BD%AE/Sun, 10 Nov 2024 20:11:24 +0800yizhigopherhttp://plutolove233.github.io/categories/vscode%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E8%AE%BE%E7%BD%AE/golang之路http://plutolove233.github.io/categories/golang%E4%B9%8B%E8%B7%AF/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/categories/golang%E4%B9%8B%E8%B7%AF/Dockerhttp://plutolove233.github.io/categories/docker/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/categories/docker/cudahttp://plutolove233.github.io/categories/cuda/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/categories/cuda/golang小技巧http://plutolove233.github.io/categories/golang%E5%B0%8F%E6%8A%80%E5%B7%A7/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/categories/golang%E5%B0%8F%E6%8A%80%E5%B7%A7/Hugohttp://plutolove233.github.io/categories/hugo/Sun, 12 Nov 2023 15:39:14 +0800yizhigopherhttp://plutolove233.github.io/categories/hugo/机器学习之路http://plutolove233.github.io/categories/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/Fri, 10 Nov 2023 20:48:46 +0800yizhigopherhttp://plutolove233.github.io/categories/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/ \ No newline at end of file diff --git "a/categories/vscode\346\217\222\344\273\266\351\205\215\347\275\256\350\256\276\347\275\256/index.html" "b/categories/vscode\346\217\222\344\273\266\351\205\215\347\275\256\350\256\276\347\275\256/index.html" index 63bfc10..7aeab0b 100644 --- "a/categories/vscode\346\217\222\344\273\266\351\205\215\347\275\256\350\256\276\347\275\256/index.html" +++ "b/categories/vscode\346\217\222\344\273\266\351\205\215\347\275\256\350\256\276\347\275\256/index.html" @@ -8,6 +8,7 @@ Cancel文章标签分类 -

 vscode插件配置设置

2024

 vscode插件配置设置

2024

\ No newline at end of file diff --git "a/categories/vscode\346\217\222\344\273\266\351\205\215\347\275\256\350\256\276\347\275\256/index.xml" "b/categories/vscode\346\217\222\344\273\266\351\205\215\347\275\256\350\256\276\347\275\256/index.xml" index b7d12bf..cc684dd 100644 --- "a/categories/vscode\346\217\222\344\273\266\351\205\215\347\275\256\350\256\276\347\275\256/index.xml" +++ "b/categories/vscode\346\217\222\344\273\266\351\205\215\347\275\256\350\256\276\347\275\256/index.xml" @@ -1 +1 @@ -vscode插件配置设置 - Category - yizhigopher的博客http://plutolove233.github.io/categories/vscode%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E8%AE%BE%E7%BD%AE/vscode插件配置设置 - Category - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Mon, 22 Jan 2024 14:48:37 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 \ No newline at end of file +vscode插件配置设置 - Category - yizhigopher的博客http://plutolove233.github.io/categories/vscode%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E8%AE%BE%E7%BD%AE/vscode插件配置设置 - Category - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Sun, 10 Nov 2024 20:11:24 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/在插件中找到Todo Tree,点击设置按钮 找到在settings.json中编辑更多 将上述代码复制到settings.json中即可。 1 2 3vscode Go环境设置http://plutolove233.github.io/go/Sun, 10 Nov 2024 20:11:24 +0800yizhigopherhttp://plutolove233.github.io/go/首先你需要按照这个教程 安装好Go环境。 之后在vscode插件商城中,搜寻Go,选择第一个进行安装。 安装好插件后,按下Ctrl+Shift+P \ No newline at end of file diff --git a/go-basic2/index.html b/go-basic2/index.html index b0a6bfb..9554375 100644 --- a/go-basic2/index.html +++ b/go-basic2/index.html @@ -1,5 +1,5 @@ Go指针、函数、结构体、接口以及方法 - yizhigopher的博客 -
+
\ No newline at end of file diff --git a/go/index.html b/go/index.html new file mode 100644 index 0000000..b4d35df --- /dev/null +++ b/go/index.html @@ -0,0 +1,18 @@ +vscode Go环境设置 - yizhigopher的博客 +

Contents

vscode Go环境设置

Contents +

首先你需要按照这个教程 +安装好Go环境。

之后在vscode插件商城中,搜寻Go,选择第一个进行安装。

./install.png

安装好插件后,按下Ctrl+Shift+P快捷键,输入go tool,并安装所有工具。

./tool.png +./tools2.png

观察在${GOPATH}/bin目录下是否存在这些工具的可执行文件。

./ok.png

重启vscode,即可。

+
\ No newline at end of file diff --git a/go/index.md b/go/index.md new file mode 100644 index 0000000..97db2d9 --- /dev/null +++ b/go/index.md @@ -0,0 +1,19 @@ +# vscode Go环境设置 + + +首先你需要按照[这个教程](https://plutolove233.github.io/go-install)安装好Go环境。 + +之后在vscode插件商城中,搜寻`Go`,选择第一个进行安装。 + +![](./install.png) + +安装好插件后,按下`Ctrl+Shift+P`快捷键,输入go tool,并安装所有工具。 + +![](./tool.png) +![](./tools2.png) + +观察在`${GOPATH}/bin`目录下是否存在这些工具的可执行文件。 + +![](./ok.png) + +重启vscode,即可。 diff --git a/go/install.png b/go/install.png new file mode 100644 index 0000000000000000000000000000000000000000..07b1d13ca6b93a50ede16d8ec0d5e6b4b83a06c8 GIT binary patch literal 141840 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Ük=_nx^3S+sF_6<8UTR^g%a-cHNzGNJGuDzJ>j13 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
ktQG4yhf^wgepK)~B+9AX^T+$WMVXvV{qvJLNc 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

ncc%*tB<;B_fIVh#A*WmVzS9HWP;7`xV zsX`D4(P#eb+84Vq!(AI_8^78|(VaFm3p_a997A-4KNs6Tt;(&KN<(BVVKL}dx~$+f zU-n}!wi&Fa2P3U3zyP^ecuxEtk&V~XbpATIHcND{m%V^y98)tuFD|lSpq;z5K+OUu zwo>*CN@v?AHMo)jKV1=fq`l|mZuD~NeBp46_j6~hI)KZTxC(_k5wU>|xu!k^fh-Uo ztvjPH-0RDZKiYfw_!3Bm#>esETkkHn%VTYzlp4u2UHpdB0~iN`vN*=xF6Ind%g@_l zC49D;Aa)xbzC|hz4cA$}?PTeiy6WoB*Q~G~QHVk-jr4-~H{|#}d^ZxDf_#0SV)R=| z!+G`U)#d(}*x0}`0bl+uyJ;WBguDWu6)9cJo-^Li7r012+Tt|>(6E{;LzVKTOztIT z3f;C$GL{7Ob;#*AFa^}11u_ad1>%?hT*TYo-cg`D%YNC4RssHsY+%w3jEs*L+l`;+ zxs2SCLGgRPOVZMAz+(!-v8|OJ!;zuw(j0<8+FS)r@9Ph^f*B!H9-2Ap>ICOUJ z-P@1P2KM~79>s6{9*4Aon`RnEWZ6&>q66_fs3dT_Jh>eC=NjBJ!M%?J2YgIrMHC>f zs<3NhYgvvdwRLA;$?4k8VWq&QI!BYUtHAIu0|O$oU`ARd@dbtt4UGHu?wve;7qJ%b zu_dY~t^1<{H~)HYf1me2)!p&~GaI*@#H1B+i#=f@^X{FGCg%CcI5{=-hN-i$(Hv62=vPS> z(|e*DLbjc;C;|zxh_t!piaBv=*J(RcuejG{# zV$xNp7=rb5xO1|yo}IoCv=BD|uQZik;VRMmlZfL(<`5jybN9hj5w#w)bfCNMQLUWo zFPDdA&#Vn_YsE{5eP|CJ^xofYfm;66Sd+6@-0}XR^Dg_YKRi+9tIl>^%LO*)?lXlw zW_-Jdmiepwf&TtS6fgeByw8F|f@Ee0MhGSbTqH|_m!tl6-jaTvDy>gI6tNWpd$6~?N4Qfb)p5FEAM;$J7 ztA60n0jH}uh%NYTIYTV7bG zS$c+-2LG<+OJ*So9u17CdyZZ|)f+`~-wQ&lE#!DwxP{a2+<1TrHtpvKO544j+8QciRiR8JstMb;F1mFla|zF~VI9 z1xistfthM9kx4kO(K9$WxU4O%c&moWLmidd&70X{R@Rt+f>N^E^I=?lXP_+&Bd~s~ z(LYmATQnDy7qNMBK>)r$ZEZA>ZT{d&?yMEh)5a%drcr2Z-(5Q;Qp<(O?D&oxy<%Qq zlob_U-Zf6%IB#W@mD9)@++cU-&f!CcD9K1&lAhwId!hsbs#DZ-M18@M*Gc>R6w){? z@xkrb5IPK08h(xn3T>~Bou=UOVaKbI*7E0PIo@G!$?umqaPQa6tf;qjbvFkpgb_c4 zj}SBnV$cc>t%A>v4i2-u`SRQ}@Eb+n_&%J`EGd-uxTz z{(~jEAbL&IrKt3<05M+x+5+EUzwqH2dgJqZZd!_!VWNLunc+_&c+Z0kr{LTa?{0UbgfvJ}hT1#4eNQ4A~4 zh1=P{BZ=Ht7RZKpre(wsGvn;!WR`7D_ol9H`_3pVHK-kzm+d_W5eD`scLTZ^kH{TE z^^Q6bqcH&P&;+A2Tb`c>4H3T~F1+U)e#|~Umd1m7YxmL%(kfDwpwib`tYA;2mVfTa z2}v3%U|h9r(bPEZ_v}G*9b>*1j#h!V2R3eb{oKm~267fp%%FHMei3)x-2AxKs|X%F zQ!#Jepk3F=di&}E*uzp% z+hi|bvP%Iw4K9aHhQYGPv^koODhs9~1&m~1m%MC|mxeJw z*Cm4%Oya3u9I%qhNs$KV__ zd8e3JaS?k>mx2;|P3Zg$gpq1-=UT@qP<6bY6i$_kh6|R_Wflkvp;lTyAq*4&*D@{% zL;-YIY#|2Zs`3CrNv2_;`bHF$21=n~+Yz}uo!{sogy9gP?1ja8_SRRDZYivSgWNij zgtwThf}`SuB#h>-)I88WEX)m(pQw;LK`tXF_p0|h@!BU#fcGT~OndwKa&_`p#lo1ht3q=>xVcJpi z<^jfuAoa#cHeMx1hu&LslO8M3SD;d}D=v=#wnhnKRm4g^87whg-kwoovBMMtxtxDJZxlO@@h` z$74`?qSTc0UwQ%RQBS@kOBHrRbwc5z#KxqWZgnqev@7S&2SteTS~F2mo#SGULK9>7 zd-xzm>Nub8LO+GDsdNx6CODko;keY9?yV0Y1E4XgE9BUrBaV@taOnXN7lDy*3g)BV^2tHZ$EG-Zk_v~o zYK(=(a}MMMKgyAoKJg19_pc0;#U$QOz|f2aM23$Rb5By`hs@7?2o+T?>7>nlX+l0VoyH~3Av!DiC7lcT*D8VLHz5;NYb4Rfx+!81;%x|n{8O&ScR}v;*`4A zM~k5PWcM_JK9s^_sTj63T|0$3rf?sov+!ve-nJW6o{{T~%2%DBw9R`-GPhBx+8f*e z9?Qzgih!X2fA(m5WKgfI`Tt=!>Ap|c$pPBS8fqUKo1PDCHB$VjZH)dI^3bqS`XX+Y zJ+f)n!%r2?`4OuacfyctZ?9e3uRv1G@v*VtkF&6gH)sgMZSk0`(KJ6kc5oSxshEm! zo(}LFeO_($Fr@i_3GoCdtCkibH~VC~D|{a@Ud5e>vZ{k+7;G&(@Vw~tv^c2iGmp%D zE^JcYLy-#aFbok2aCmhcHeY zwq_>OpMC2~9%>mFz@+J@2t|FF1dK>_0aZYYhYJ`-RejGmifwe9LVj=C$kD44g*_-1 z7#>TXrf_@`o-wX-qQfKk@no0X%M&PxI_X~sns>0NwkLxGEC0d5oR!w)2BH*9uX*DZ zA2^Tza2g92WeKQiM~c{4LnfHE*5$3Od4tkVlS&b$yR-YM-K$N#_G$G*@ETYsUEuq( zZ})(&fHKuD$pIz-nWB_1odJ9AjApOLfX%zYg5+eW7%N=FQX1#7|dMJ;)#y>CO`H$JMk*{zU z0o4{?q^Eh23cKYTpA2m!S4!&Xv3>z-SX`roq>#qsm|ZLVCGlfD4CVU0qLR|m_B)a) zQh(f$^%K+~&;f7Hf?WvC7CIUUDv`_1JALb9Eh9O~3 zK8OLIHaH6(QA%Jm73`jXqGONeQ=&jcw;73-AC#JP2>hHH;_fh zXl2GdQh0BFUE{XhGUNbxS8KiSmK^bz9jul}NZb`y zNSC`LFw1F_S|KWalRxvdx~pq>_lclMFZSrCd!t|o-q8nC6Xp;0PX`dag!VE%;`*KO zH#+t~0Rbwis^UnqpJb}B$NNGw`PguL>GF_}*u)aET`^Sm!7<$lMl>e(C=-2^(q*~> z_*qoXJOq!XKB5#AxGtT@ALY*ga0J`D1-#rS?Ul(#!sdUt9l6R5 zXt&<45vT6zY`=1@3D8eO!(`W^TE;Pbf{Uw`PDJR8chl$;PxYVH;r?;R@`!0bd8uP1 z>f|n|aF58ftO`nd>r$(NS>8P5Gt{*hcHNQRj+l{yQM3#UZ}X`QZe2PoFW<2BGk2>) z?0?yl~w~9ex=#Qljew0)_z^6)Xl!fIY!1lV33L%g6IwcUOJ8zVC~!HlE)Qv!aGx{tGE78 zr?anA9#RX4UjUEz-&6(Zcb%OYj?cMz1VndANO6MS42kx9IEkmTDhO!X>EAcdy^b+IPWd=*_Rz86a4;rCOBq}#B!&k`QVhM{@Y?Wx^CJi<5ao^$NhE5gO* zXUCUL7$o@tp1>*&Wt*IsKy!DVJYUQn2h$ILDg_Qx1{0vWLH6M}5SFErC+)axN3aaS z%x~Sfnw=!%w2dw(vo3@kpC5?-r#swf{6Q1Co?H`!w;fv&=mGGa{v2>`{?5iPA8_zM z9GOaWxk^G+6=Q1_T9QJGcnPZ)R{fk_fKU6e8XH5yEmp{ap>5d(Cv zF;H{BeH||;dhs@o>Tcz4E`Ku?zGjqDI49cqm-kb+H^L_E`|@Nb#w5#2OUUoz4Bzd~ zjwgjiRA@Z}(Jn`iKJB%wWjCv|rE}kqZbK^@#bWSVn zg9=ChQ^FT7pqjD(5936|ytJE}Sk5`O;kUc`SJBnz@c#gV6>&1EbMDI%?U1*45EV6T z2gbHG*Q()YG0brC11PTk4OA|XhGs9%6)L4%2CvKx;|= zJ;|kc4XgCEwY>>SDk{V{v5*M2vvASAgK|DK)fBzM@@;Y13$WIE-KX2ci4q7C5U|*5 zhrWL)?QApaLtHRq6)yXUxr(%5@U$e|zI}2`N$0v-${HI`*0f%Txy=+gZymm2miQ;6^w=l?kv} zS3;l*)YU!I-{CjM6{7IR{cw2chZC!Xc;5D^F^8%Z?m;-x5`SI@5a9%VsSkGW?lRA@l>t-hNrgd9xw%?u2)``~5DFrD6~J zF_{)`-TP`33J7dIp;v!{-Fgbl9R271W9aUi0q?@c31@((^iYNK(wF{ze?Pw9Kaz=H%t=?i&Dd43BEWg9$r)rzLi9pViHd{;BfnOA+pVQ|A510v2+?A&6$_=zQJR zpod2~6XRE+${F6VZfD)W*99l|#4L0Iq`(1kv7?jyPhbOpRyQRV1tOmv2=8I$FWN{9 zd|%_3wxQ>Z{8c`<(X!s~0oNt+vG?rZ&-^xz*P3@=0>>2mY%n7!)t|-9rLC=vA;=Xv zK;S*}7XYvO?fjw@oYk(33AU{*Uruip7&{{)p!A?zcXk$Tp)kttjrdjT6Zd;N4Qth15UBrplKd=H6fD zDsk`OZ?2NcG;m{0DXZVO)3>NOIHI6Z?P+=;{{FNz}s`XLQn=H?TCYXu%tCJ zQ(z_-RWs7l$LtE-VTKDIBLj$9P^Dmtp0e!b1}UF6683U^eSHX~o2LSyp_NjN)d0H` z&c?eQ>g1d5l_H@1Ic@rZgNNrPP|g=GUe3Bc-CjhK8b41I^Z9{Y4JHU+9~kzgT+HkJ zek>^p9tOn3w=4$1m`Z>txXQ3_0|NrwppJqQB~ZMN%_m*n=p=o6`MxZ1SGwj?&S++j zXR)!>Se+7^3&BF8`%l}AeHh$aEiPNg6l0tNc#pD)%D)bT6M#L>$J)VcT`C=q>vZwW z%$&x29IT7QG>HvGI|=XFAH)790_clwetJ2CzDhb_o(P%d7$mI$Mv`8tj!sTZ9hN;t zdi4)m?&KA;oaiYhwv78I43LO3NxcTIIS`xBB_yb$Uz1`FOGlIt3s_1OacW`l@oIWM z&8tG#vDj0uDbe5f5asqoveUAS8hsgr<}SESpQ^xkBR!^+f%cEKqB1NIBsKj|6O}E6 zOrT$QJ!;Q{SZMs4-oG!n{R~F(sBHFL5_t3M?A^~!MdU4|g0Z$=pkBgv9XMvx1k%Yz z3SSu%m1HbPTjSemGcybYiUoR0Z1~IOCETBgVJzWz;j z>{UHV`6mO!5g#!L`L7+HfLUS+z{ABA)_ARKREQuAvIee!hX({6q920t_74D${%O7i z2wYcBkAK}TQ6>G==p55;4A5DE9Hh>Yps;f}sOET)A!FO4Vd&!NLX zWGj&A{kf9!P8GmsOUlc4l9GbW_Ds~#8l*l{2F!#H_-?Q)*r)8N9vqONDh!vUN*0ty zuoaG?!$P;7!^W|&@Dg+&J9nD=s{?5aI|jM%1pML?&Y_CN-UsOi5mRmA!cqkHA5DgE zf5Iy93HDQRem5bc?Lx%l`v)9Lq;j^F0l zc9E0!0ar&2j=Ow9J_0_f!V=e!kpBZMGu6Mu=}Ej*%wp zX%9h3g&K)3n?tprjGy??mx=N`qiCnN=n|~!RChn^{MD;0_ekNr7tkw&kRtrPXiEU| zMPK=7CFqK+0muO)OxUB;m7XMnVDTV=s6ZDvV&OSZ-GGZ8{7Kj@VdSu)>&9hKcxL(7 z*V)+?(0ui+ac4xW#AW>@MSyvkgRSjxUf$GW_OvwqM4uK!ky;*AIP^oKOI*h0>ojv% z2KJ7Jl=~~7TcrN8)S9kY7xnpq7<}?aCa62($`kDXh$B&u*@-_UH zsH$$4ig9sGTU#`5Bkr`&n-t`Mvw0`Qf&B|nCdOEW_D&Ki&47UsFtXl8= z(^XpBG@uo|=&}Hu4!%%-`4Vv?jaAqG<;$(JEQ+BRG=h7GLsNffZ{$}bUZJb0zghg& zcmeMUhMkDJx^>_ma50YUVmhS5hzgd7c@e7Z2@VN!H55B?zeqQboerkH@Jh z5TipF7#SlPuW{2f_4Yn(9pCa%3Bl!#2{}gL{&jEM``HxFKRqR@><+pVstr`*0DSO? zfE$AYRXTwXlL5VL z&&=wv`Kx-Xugw`t0y$*ij~}0`Dk1e}1;gLy)YEO7+lZrs>;qQP1Q{bqtXFwl!+;&(B`(ld+LMFZTO_w5MD!CAf(coMli7;TL-yyxsT z_h)w@d@t1hzK<9xg3uvYDtO&;bZkH(luOg4fc=6o;`_>rQI^u~_k%GS zdf=kxhON9K<;JgrDMm_-06*Bb_PCqS?(vF`A3QzGBeGA2J0i!u8#PDaD&9zRuFoc3 zUpr;1-q_am7>ffyKIpdtbtJe+jcOiZHjb3nmoHCNrt5j7{zeUf5mB@&e%`EpOpOt! zg;1Kcww}N_4-)NqwtuGy#$--7hv7TuDSbgh!{ln=D_f&3##xOEX+6HE z{?A(a^DdFJ9-@(r2E8A<8}miM7*(z-5t3qFHAYcpez2L|ocER>`nF<~!*d0@4s1)b zd$_-1!E87x?24PF2#m|jSTzpxkhZqAKp)Y6;36bZ{vV-&)07Ui`NKTpNrvcM8F~MV zY5#cvMyx>L|M}xT|G&9$^7!^Yo%z52_N&C+|NATcf0_p?hzzKVNB?i3MEwrZe@K7- z{ul#h@tyzkJd*pFqyOixBoo{IUjQt$bnFHzg;FGEHA1iS95upG%ge(MvT0^+6cmbd*!y>K!8Ng~HS z@1+9KKgJtu~cn8NnZ{50tLg?G$ui1;VG1U|_-4piV zrVTHMya{;}EXkrYZpKk7bl^x_ymZ-@z#5SAfS6zP`PFsh`DDe2HT8p?ztB5K{8%^X zZ2kW2+wxC(n}A|Ns-}F0wZB@a!M;!B?DkB20hBvIT?o1e=mr*IK_#}9jKOJhQAUe)8nw$QUH>vD5fpE-C_#57Y%5XzfI)1d8e+Fe_G9QMIE*lyKid zL4krjs5cKiACw9eu~AVINGz|o3mQTqhsWc{NNo&#qQ)B#$cDk-$W0K^P~=lchiIft zUE=*v#?Jq7K=Z`=`;q7bT=jM--~wFNE`7mCtrmr!vv>n-k~zZ_ z7Rh(Rr!+9I8Td>?zuXD6@3Y(EL@?Y5+`AXw561GURS|IvoNI%Q8VbI?E7@8wM=35W z!fB(Je31zZYWFP|P0+=^9~&Rvzi$s=j~o(?!1`X`9Xhs4HgpJp9VBW?Y{g591nKt9 z)OOLQDj2`wsK?9l`f0@j*h_{rBr@%W@x{;tK~SV|Ix>?PgWxv8q0sU1$U+R>g?2ahCxg7#Kfdy{EI}0lbi}nmYNPdQ`1y^_S2ggmyv~ZJbE4PB)5K4 zY%C9fEHOW%3XhxltJJk(of&f=fF_uWe5zJ+}k_#(tQO*ay~x#XcTEPw2u<7-}J0rpv)larh& zlv~gSHx( zfU}riYdoK>IZ%2Rz{R1B&aOIHZT_ci0_}A@t*z??TjfXO>o=&;lOk}}Q(nyriU2H| zj90I+3YL3gMS%k~_l?JvJJ4xIBVy*>m4TA}?i83Nqg~((|BIyQKC`hBeWh4YyT9`= zI3`d{cvj{6)(s!|dl#Orw4uQS(Gj7=$?E zb2c*kli$C~^q=13+j}+QO)mEGmt8sKo$p0E5I;Otz{!rizTeM}#OR(rgSZtsozW3r zOpFHK9%K8s@T31Pxc|+{$ilJm;X}R=D$2H=_JQslBpe^EO+~R#s%h~1o~7n{$Fw*& zJT2CCt8nU!0!aZh&O<3Ga~x!+WC#nuR>^4#2dHe>}i9a4#7dAvlPJ=0ITMH2`Y+f`UM$ z>k-?+9n*IDX=L%*v)=rf!wirbUB8~<$BYp#;!oea@$~u$*zArmt5iE^;M!+*b9TRX zNI2H$l5doimAyAMzx1d8l^>9~N~0W|{65?DES>pC8~wed}|g9OM0a&U^Dlem6<(vnd+% zR5u8_@Tt+9jgNPjq$D|cISY0M@J6lwMiiD+4GiFaBMm_ti)}2;6fg_|kqv?3B(GZs z-2oPZgEVvVrWm7|Ea3*sByN4Z&tkWGEQvb~^CHY+_2{eO5q!p6_m<3_K&5yAXWL>P z9|^&~4u#n#^rPP14Wv15_LyLZ2U8oQ7~tBBT2@5CE8ZT7F@Jy6ou;nl8LVZ2wJ^5h z)VsHlcpiO!?Nq^4bMwn^t0s_Ivcy6y3O!Rs@u7ew+}5&vVZl6-7uqDq4sikfe}ugUIF{`nKYS?-qO9zYgskip z*)uW{8BwxTvLa!q=N?xUI@ zPI$_aoV;oyfH)qn^2p53KP<$!jeG-A?JE2sJ~!5T{rWY`1+UG(DkEWYcVLWhn zD2qrExPlf`I&Evp#TeR3|4Wj5e;70X{xj`ll$MmF(Y1%KV|B3;!h=cSFJAjs@8KhE z8*Xu(lw0icAx@k*H8?yT{vFzhK$z@}>6;)X@nl`!bK>QYhmXSC2NUr}>fE%8n(uS9)(*q&2vZ5lqu33;YNG6DY>@7iCPoz99HsM~?VXptS_fVbwt__|V3AZEF zqrh z@(u%36va-U&Lkuz5Tv^WVxZSW@Y2A%>%GrzoF^hIoOy42RC#`mP1?yqU~y^b`nBL+ z3(II?NjwR8xS@hWM+9ZxGsBKE7{-eY3ZTJ80wrHw^zXWkL#F4Y4H*(^dJ65sflFJr z*tO zPZzuq*M1FU-P81kPega`zRYnv^31Glk}MDtZL)aalUePr?8ND#qfkTPna$KVBAM!# zggBv&o60&cR%vNL?2MF*%y|Ciabs&!2W?4~UAr=8)b)a2o%s9r@9Dm06S)O1q9SjB z;-{CN)i9`@V}iz3{^Ms)hvj7S9Z#MVlQZ<9d>%=*+Ri7>yIJELq(*7!BcJcxy0vpB z2W%MF~%9@g+Jb(Wk;Ic zxLH+4ToH2~4XYnay%nJ~MnUaIq=ep=nQ{;14Q{W5aKhGBM}P5My4Px_}r{B0O5=CQ?Ac|#Vmjscjd|kzetc&;mw5kUS7}7njK0Cfs^;qgaCWO zXmD<&EgeqHyTZaE0tRo%AoWIX)EdG!U?OdXHU>201ds}Z3=FJ&-C@wW!hx40Sj1#jNorPJ->?tZfHScXMje7veqyD|}g2nZbsY9;b=Y8$oG&F=F8Ez>A=%7z=X=I{lP2m&6ToVY7)6>^%DY`v(c>tox_+qesOG0J#(aV6$W>8xZhB z&%tq6hIi|?!APaeK}QA6MD+AxbTVz$TGnXDUk#nJUR-DyP25Q!3N%^KXFGvmK4~&H zpSS;b<&9uCrZ_gQ@QaZGGv1DT*ox~{z0mANqyT;W9!d|pkM4r%{7y|BnhWLSDz9F> z9kXx3Dd4bJgeipEz*&2Hji~Q929e3;ee`JB$wX!~OqtsQ_Fh&|K~Tvl(fBqoF+a~M z@P@DscoD`WefE=`(->5?D*KgEd@G;{=b`p2?;X)95O~|7#TL%Ezw1&tI)QzC(guDJ z=9k)N8FbpB;`YJ3+h%RCyK-!e`cx{?lJ{J#AJov&issQ-o;{7NX8+nZrsCzxpyvcG zjqJ%WS;TOr{XnO{PMs)$E52)0^M;$5^pDyPNzlD}HWxIec898~KI%*n+q8+OXiaxGM)?{w zV*Tgm@Xs|&XU?F#_&!z3;^x_>p%9T3GgLaYaib%E;$blPb$9o@=C8-hEhc-O->Vtw z0`mwx-Rf#W;ww@#_PKY%AKfi9L8`*^)(z3At+eV07X9ql;1AFCU;FbZ3I|M?R$*GoU@IdMmJ1kS}iN6UTYv!o3| z+q}?0V&;5&-@a}1bmV<~@hmKuDc{jWk33!1a3uR?M(w+y-vuw00UDvV_F0=+!vX~) z4oM)V|KC(S-X%=O|1G7OPF>qB)p`G9+CGxMOcsaAsi`jnp;l7^3Y2HzBWSchBBmyM zef?bGdFjaA0nHHS;GAS<;Y|m4fZ+rnRxO%0L&cJWa$&fLnTSo-r&Di6c%-Gz_xi{* zN&#e*7I)kj1f_<1Z<3RWkqJ1RN=0`S6s2xCH?=#)>mhmQC&h)+r%$WylFpjQ;rZQ=0^$N~bBA}a!GbyfaTy!GEpt0N=)BORZLPZS;#d-`W}4Ek-d-z)Zus6isM$|B--YkTTz$auN3o(y+~fimPGxok_EFJc z+kyxI?LHsh7Q%M8Wk-@!ZbXX=hk^=cr^y3JipU#ST=)yPe!K8)B$;j|z#s6-ZH(s0 zG1sJo2eQ%q_b|=9H89N^e1ThETOxZnj@7yS<4525_q&L#6cjkcPR`1()6hIYUA=8v zINV@eOO#NFZCqI)evNnAC_!uRiG_}?5Xsm67v~{#i9EQ-f1!~v@2w^_=>oW6Qab&5 zY>uh4y(lyMO8_7rfaJvCTo@zP_=w{iw$_MQS_nvvKRHsa)tWz1}qj~A@vT+J4bnoCD z^z_j8^301Dy6YhO^ovnhSmb--yy-%zLEF2oaCmi65c26Alas_ek13r`kBM@7}0 z;l%hK6YD#6XaG$$#vqs?&LP!rQlV9trj>G^3Ju*;=7uex432jdBzHyC90|5R`P8*r zME?63$gsuZ9~Y+C>haQ3hG<3|fMfyM7t0Wn8RaEoNP^`x`mECT>+6w` zhk?q(ak{tt$~uK1+nDag#_I4yVelpFwhO5a?94=sKp^Huh!(xt(2K#uoNIUM;pq{6 zLRL<$xkKk(jVB^aoDeV+8N3hnLB}6CSJu|%O}y{U053D zNZ^M~r}a`)lGPmh5z$5|u|0sgQsyuK z)-26p*;j*th&-NGpe?=&qa>JFS;e^%;1qclM5d$XTbi5CxVdc!D+CV^j_Soei`j4O z3Q5xhNtrDz37y@a1!HwBEiCU?D2anojZ4|`eY48+3>lMoHwXHCVpg&eFkkPL!7lD!X-8l z@Ee-VlH0U-lXDm^4$y~{?}Z*%84@XdbFSlKQKhF-=Pk|67e=E$JB9?~UQv>72vxUz z+XcIxuhD2zO8YNGbKMC0?O_)M3&+BfgLN>Fan;;(YW=3g9|VChGADb(1%D zHa5Py`I$Q5g-I4ms(zH6(aDp5JQUzy2IE^aG^!L8Q9&elvIs-%5zfvDXhJ{xaGWaK5HVs0Kmnwl4r6Cv2b+UX4pe!H z=>t9R8aT{Dcl_`n(2oU$_<#NR(^_JYO}9#&5W`N! zgO~mq7X8)%fAo^-mB`2)1ay1-mF^oi(c|Q825tnfOOsn4Os~bxT;j{n#F>*P+vI46 zS&yJuAD20eLS)y-6!;$P=qwTZ#mUID@nzUhBXvkTmt^?k^!H$40+b(nrXGI~aCpW0 z1DFyrcW>{ZG7{9yj3O^O+Cmm3-nW(U!t43DIoie3hOHaJMEpXE-PNM>Wz@|#Y|e6)xk+75G^`snx?lY9!N z4<~Vai2fehwLgi-N*xNqcZt-xpHY1^1*+Q67fBhZ-Fx#9w6RHO#Jfav6D%pud@fBtQ^9e! zM}@P)ke^ZY+mpN8q#{zDTmCwtCnHIFh{vMDwsh*_Wd?czdAxRtSq#aT7sEIAu3tvl>ou5bagEEe|y3(0h%3Tq3cSgda6hu+5*1sIAq5VT6d zP8lWwKtH_{o7NE-44}2=*n`mx!X*XFo0da7Q9$oJ9a|8*jF|4V#g1f{Lj9DjVH8|{ zuoiq&^Gt2Z&XFm)ikMeOwgnCCuG*?3D?0*TRBsbm*{#I;#bqvBVyKKM32+Nwj_j`J-lkMxFtCV8QszQwPtG8|q&au$;~I6f@1v&9)~DCz4GywUo#-#*B)i}=8`JEhtt)sQ)A z6M6`;pysb}eHyz5Cy!fHW1dG!!gxmK*U;G9+|eq|OaA*Jv@;l8!GOJ$`flo}ZHBXk z{pp1V(TG9ak`IN%oPEj+zi1J)gX-mgJds!MJf~)CTkuICBt*lH1a;`eZr9o&0(Oq(j z)@3`3)&t(T%4VjfE}_tgZ!mxPUg}Ki9>~5RzAAC)eAJ?}^z-lZAcIEiy?bmqZMXix zf(77vHT2uw&MiJJrWkB6HDTxQ=+{>^!4k0r%Mq1RqnArUWVEZ8BxiI9%b{x}i2m zZ$K67Cy96b&d~ZLl1ZYbSbX?B?7~0=`kZDl053<(&G)f0m%-7ex>~8b*q6FH`H>O7 z)$6+8bD|)<+70*4J*-SPU(dnfpO5<|ESy)B*IZwp{p^`(p7HLsjIuIc0N!t_Lg0`n z|D;17SrTVf({4BNW$z#HKCme$t4@<6l8KSgA1U*WV3;BV|Q8g&l^tHA5;iGcY zta^HJyk)YNg`OTK#clWbN$AwQKWnM010fxI^a$HA&fMgFoCT|$_iQ#0*K69S1s0$S zVtP~GL90*vYP-&v_VI1G=MU!5ep31yu9!oS(%*3#slCTca@YvHWzyCQ7({~NY=32F z;XHnj%_bA)&G~cZm|0kIa&s-?;}9~Qq)=RG|9 zR==oJT}K^fc(VbKdCMC&cn!-rTzHW%tHbNA?=+&(xbJW+v?iEUkX-9sT%1}0f{zJl z1}qD0+a|xuU%)?U0kG1Bt7HsAAh3^Ch_64naIO**-nYAR418Uuz7BP6BhN$Ih$nLF z!bg(Ot?=9igJuGNi$n;8HrjcN=wM|8&vN3N?0q>+N42_C{xMWp3_2T>Z@1kp&OzAm zWpOefC9t+CINE}!)}#X$@1Aw8n~&AW1eu>8_Pb5}{p$5=R?kg1z8F9N| zmyqdNZO;h)+3hd}1y{zz=EFKV(7lC)hBmx^&v7K@_PBozITJ3pNhi3WdnjOS1KoKwgjOEUxA?s0qpZ_l;bL&%+uy&#KQmKSS<|oIzrRiUT2M1nX~OJpu}_PGMaHd{2+D=WP)|iCEE`Xs7Lt&l7oJ>LTxfIU zAVd`u^q6dJhDE@OakMQ|*vHdz=GU(iPmf)rq;8EkEs~$_M>3sUo}90iSrvo#(9F#5 z<>i%TYY$%l^wHO@Z6+Op^d5R2_QDkaw<*KoLBQN2WiCt*@LFILZ@BygXZyR07Eex) z?eb8HJ=k&yPBc4q$$$9#Id_gW%Wd}X%$C=B%rJxCxea)H`wnWL6P`Xk=vLvaSqXNo z2eXc@-Uq5iRt}DX7k^MCSOXgxuQ;(m8IHH1x?un!F;{Ri*imQ~7J5snO|Hz6OPNj@ z)`IK6)Q1#rr@JAwk4I^@5?uJ==1$AX(mW`AHzA=yboZhA4*y$JEvt9bJC88A!a@khK?k3C(H*S3ousP9qrM4)iBOkX zkMdrz_|slqu-?o)D!?YaG|kV8oZL-2Hv~~9t{@E;wo=IbRzskPtUEU{br%Zlj~FdB zU6Iq>p4%jta69;&39MmJa=us|%dHOhr4kTuu!`ipU+q8qzzZ=8fFUq3Tl@J%B~;yG z8QXk)q$|hDP^y|`=^60f5n^O(+>WH%wZ&Ik5|$uXa7^~sG`rv4STQ%=VpC>#{Ag`1 z0(ABVUU=kF?jSi^*>nZ0><1;r9ZKOJ7eLIB+=5cGO2o zmh`$GzGiyQeX6UfRwP;ux?VDs(s*{d&&ApPsF8L4?Z&x9{)H{%3QIqW96oGC^>F9> zeK2k&CnL`1AA6dX`odZu7DRA3wY0Wst=2Z~zuItAi&qzzrq;y+gphfKiJ&P7xRn*< zq6=;H_N9uy2~HFsd&B@ZmnB(S!~WjK!{hhNjOY3DhpYWankED|JbQM2G-|K=Hb#Y4 zsC_`#x9B{l5{JwB_Oa*H)BwlpkT0*Z{Z zi!)Te=H1S^d^>6eE<{bbcuDle*xdCL0Reb1 zg}03@W&#Y5M}hDZrxX}~#6kK{`IFiKe*5@>VdTNeDi1t$X{yS=h+$)pEn!ITf2Cu7 znG&?YSMn!+aR{s8BB!X~o>|Jx8<_)_J2)Y3C$*wwF3EblYJ0Qb)!;q!3v%I^N4ZcV zRV#X^&zE49fQX+wQ zuB$zUUCLcG$4)dJj}O1=mmxE2v077%$|$#NG2*Oy&}lGx5so}>zlta*^!7j8xve_? ztgr7!@Z(BsR$O`yDmko{Xzq6iL#_|ZNnmVvWR+W#P>!-QFlYf-Xe9!N^kVSe|NKc( z-<`^*0oVzK0x&7a%pCgo@fiF(G@<}#b+y~r8ISgO4r7D?r_Wf*kYq?${g+7F+Io>t zbg~GJohcVRnc3KuaJ+U#J{ndC{FQRHe`Kh*7>-v6Gjk333nswu_wUD^9Aji;G>)g* zRCF4Y_I1~PoP8*5y>2;fJJg6dF_bba34fuKxfmbsb<}EeGz%@q3)>-GePLfjE`l#b ze90>vkoHQN%{9BA(7#+J+czecC7P*Cj|1KI>7`2lfcfVG@o@de*m?0UxH?B-HkDYc zG@4n%BQgK%Suo18P9+mxparcQb0J!V)bc2hnNCeDRdos=Z8?p>c9DCz-T5$>LuuG_ z^GeNEz2v=LtNF8R=&x{{ew+sa-W^eTK*C9rYt%nTKycfQn3|!*#L7C^(J6N%k<@K8 z2E5Y_Jnv0B=SJVzRjpSJMcH)Qe{pV&Zh#e7{ODK(~W< zJje;!V$*-7LF0xtTf$@u>q$`4&n*2xk}1TT@Ij!{wLf#b4^cliEA8atj59)YGeNzF zo{$a^&6yr!6%?4iV`x!S1d|h(iDkuI_g|i_M@H-h0&5=P4jdf&V&1h!MZs{FIOpLZ z@BSN9wJ9F?^qtQC&}KGEbU3Ylo%43r(bM&7_g~->&nbS9`szl{WkY_3Q1y}WHn3A5 zL74tX%?i8&pdO*Dr+0ID6+9V?Ni59Gch9Q>54oW5HlzJ+muXnq$Wk_H=6;uE4Etg3 zRci~^l=er#%3OvyCL}}Oessh>-ri6@Yq|Y2#-oDKiQ$Qqy9S#yj6kbn(BW31bY){h z!&24W1h)@Z@j!n$^2jj@cAvSA9${G*Z#cGYkj+6nHZQ7!pFhTz9UX%tn%f|ot!^3x zhODu=@LOh}EU}LExDP`~1fbXiV1i06>`Q~2-u zYl^miM7kY3I>wQ4-+GuM0p02GM*O?{{{1yGZ{ngrY0p4ZJxi>1Oh&mpIbkK3Ra%u7 z60)i5Kfj3v?x;LEKw0?uXxCr8iAuxBILAw%+8xCxNZmJ&r^P>V0=rqO{)YFq;Uhd0 z%4DL<1Orh;O-0Ec1oK;P;S6SXx=J zGcgSh4xW0Eq>5M2)V!vf3EdtIB5Heez;{P%3v#UCI-BA>0{jfd?AXJXXh zPY#~4MP`;vZ>-~YOt8cag&vf;49b5ExySi5Q zDTj(Je4A%Dw`&;Th=v0eDBKWUL?6)6CoxUGFkFnfeLIE41xZh^hppJ@3L7n4a0bfS z;P(ZlxgGGzTUx^AWD~gJ%@}_4`0+f*RI1-WC=S;yUp637ASy(C2j1-i>$6nr-J~65 zX^D*RhkNsf{{Bf2%f`pI5m+1Ccl2gw+Vzf-NB}Oe?`~Q@0aFb%mMy&-S(FQv($$?1i<>6trc+1MpUI}O))+NV;o)s2CxNM-S3nZ)iU*mo-0b#BO zHagxDkTnoS!C}1E8v#Kcc$H}rFrFn5JtrXVX-mHYBYBi|Wy4w^qhq+ehq~hVbC`JI z@0iekJpBxVr_xd%IN*=En)z|o^L-!)m;+;yhU(+V6O!rDx^X`&^T6nX>HT|5QuWqLRY+v& z48k>~bfWNaskd$GP|$(vBLUf2>j872yMWHoSKhhM~^GWE{JASDOiV)&hMs$WO+83QHG{f=rSNbk;J%8-NP8MW2Fa<;4dX`!y>O znbk)aeBKmHz^5-TFCv-u!vauDObibW{e&fy%h?;h8Qr*Na~lsP*7I(7+_a8nvvvhqaWd0 z0`>{~FBcs#*K=>)4pQTpO}9qB*Fb(16qOK5Mb2*|xsE2Y2uC zGElZDVQPLeoQwX98+lk-zID~7&d!ikXH1{fB_Zh>(FZLYwkkK1rT6SPW9&FN{@Fp(b@l)nsWPo{?R?4D8-j! z{CK0~^2%AEK-2aLkBrQAv%#AJRT30)_;iCz4SW{nkoqQ)uo2{EmJk!8_1}f>CW2n; zWks;4&Pi%SkEqdJUEaMW{NlamgI10Lbpv9=eX?Yxh|QTM@}e|Pf?k!G!|rwS#MXg< zwdotY*t_BHL>7c8gHQtLgxoB#6Yf1AUBRj|Bt!#MO>#1V$?`B;fI^g=UBPd5#I>Nx z0hF@Rsfmdy_+T6Bq4VCbaU;wGko;mVZtm?}g1i|(h>|VI2?=3I4VNxm!up2&C~6WQ z@`q{EK|(^srmHLdp%jm6dsyf`gcG!?)LM*+7QacC(I?S=TjfY@Q!yJr>p;bWdLJTZ zY*m;wW9W@({v=!`S$#r!(A2`=zii#%zo`kvHj@26F~4+p^exW z1lv?WxjrXr1mWEF|$vj4ds=*TdPBwp6m+QSWY7R0FS zdJkLB{h+A37Lg`;7nf_k|6+@w$Ro&d9JY*fM3L0Hp|2A(wX`(2X`6&#JN2cFv*`bq zSRS|U-$EcR&=(wwmk!!+-+|J~MZ~BVa{s+vr+drp z1pI>E1MsYZtylQ@`ENuoZ7Ytg1_%`jCpfAy!E6dCpRu~w2ko^b;YkC6 zrAk33m5G@8(W9LtrZ^XfT_A;9Xkp%iBA<^H_WdSE86-eyAX(r_oWpGzUR_xtSHTXA zT_+*neJFU#u)cz1cpHI>aa#I$cD7cjIcVUN70@yHBdKUK_9OZ=(k@a_VZlS!339Qf z=3yH%@A%e{cZdTBTss(53d;D%kPq71zsS5o2MskXiO*Bz_Q*H~n*$|*ju^`mx6v=L zxk>O3X9P$B5aX~;;1EU4(0Rj>?|35vB*->Uvva&Y<{huI zTY#;#G^w&N>t4!A6obd0#4XEFJCUzV|ND-U@$|e)@${FqWr?#-(y}aEYh)QT4vVy_ zi`)aNKGT>55_VmId$1K99lg^ygvAckarE8KI#J;Mfm4V7!k^W3sIU7syWu3u*fYNM z3U2Soq8BIdT)7FR z^^luP(_GGjm$bJeO3KKj--7VRd36@f5=}{p&v83SOU*!sUhReEK4x)pV&XwejAXu( zF&qssW+lK;x-^!P%^R?H7WxfC`KBwIwiPEa-4nJnH8#GY`k;QNepcb;_k+`|_eD`k z%E>KYk>Zp9^R4*l**^K^kErWPAb$gSwA^YnZf{U%L_R=HBZk_q=Rmtf0heVanUj~N zG2GPBVt`oor4$I#Ze6hjdFqZ(+C3KET2Y*5PQ@^HIo($g+cM0?q{90t!0K#onF>uX zwqJmVUu&-O&3=NaK`pJ}?c1#ncH43TjPCB9&&f_&#Eb|AzStP}%$mPXqZJHMO+}5Y z9__@TggLkK7Oz#VMTqUd%+R1^hpYVvKOL8yxOqUpi~gdW3=F+h7numm%)tJJTL2dW zCCT_1d~O`vdLLBxN=n8=*r}*;5X>z9SodQb97dv`L-Rp-rWFkI3XKjp2P=xS1sf)G zZ#C7><2tdEfcfs)pVI2%)d9OGPQgSF8xzTx6+5pxOr^GL+47HdKStFG`}aro!+Bu| zK?D<|85pU`L&sXo+uGK4nf=R^t5-q0(=0X0F95g zb0We3K$r8dG;mb^r9X<8fNTFnM$OV7=bExk+uk=j?Y$1{_{cZsDrR_bCT3As9 zw+yFGH#-#JHDF=b7yl(Ka=i$;smep=UTy^|L02{u3GZy5VifO?PrkCT3M|9C2lEcJLQu`ut=xMOUFZA zz1Ue$H<8g3KQgi*2>l0CRoM0Z@%BgMLGtzoL2#cwe9b}lp$g@dmdn>88qDab8l@&joarNfmTcRk_l$O8lAXyf5p_N&L5Rv=og`y>N^x`2A6+=KTP$-b5tTcI&?~kmf-24jcgmE z)JK(p+}HiFx;6m|_Qlt^w(1x86z6$A!r^Nm_{$jr70mFUeIs3#kq1!OBG-jG?{(Ve zFlDa4NM}U>47Z~|A_yVazwc_TWeld1N|mn|{XQ6>!V*Qp1gg$oq!Yn{LBHB|z3*H8 zJUBMC2b z9cb?@Es-^#y_@f@?nLbjtP`BUX03A^ky{85(4Exi(dLnmC&xd(ekn)Nqk%_ZlkhYb zZNbAUSNBCm!C}g3o3h&9g@u)GOx3LkJDo0Hxk7dV1-;iinqU;Ez`bvN4%FjBQwN1t z5@a~j#7Voos0Vk_(x$RK!!ZsgJ`E$_gf-WwHQ!4}6fpC`UL0KpTGNgX{abZ2e`EV4 zzMxHguCXsEC{fwS0>zmpF>iKbw#G+eS}2(GS)*FDXEB~r8P1$^Ffdn1lgp4 zCOJ9Do9*EcIJmcMe`9;DLUtp{8=O~gS=2zy3RVzWH(T3paHfS84j^Q}OyU6X^0Qm@ ztqqy2`}3_t)^I-QL;)$ju(mP}D>-mw!E{*bzc>Z=J=n0&h4Zej;<&B5Tpqd7L!NZ0mw}!@%GfzYVZk2jIeLtpm>8nD2hVlOo%c=9LrgHox~ZW-SZJU z;U2k7|3n2q4MIX*VC0_=lbLC+to*V)^AI(Knj}K@d^aE5=n?A!FiumO z^FkkUJE|mL#cwc&%%R+txk#c-S0_66amGDtmsom)_Tj@x4_yFq{b)%}M#!wC<#T9+ z@}AZY&tw|!Bi_{412Rbr_=K6FNp=@@>@@lJgV{J^Lu0k2f$gGv$cCIo!V^~O*CvJG zn+CV7e-Z)k8Ar~;Ts*|K85NuD_xGX4N?c;QM3pzGHEl9BlUjL1TcM(cYv$#mhX)?# zBpJv%o1h>TU^%qtl+?DVJ_@Ux~N`xH#pyGOK!~WwH89Tdxq6B^O0>%Gq z-S4p8RSr~>Wc>gc;0CHF^oG&;VHAf(Ls>_#vOrwud1e^l+@AF`+iOqV0v)^M!ES5 z5nyhN3@=ZV4rngkzzho$T^*9c5J8a6TuzR4P!p_IM!QF>@T_O@3ewub8XFcrI(QhMrQYQ)`{q9E@ z5t`3|R=F1hkpW+!r zqq%3k0mh8}D|6lOa#B=Wi8ZrkVP{vrON+IT6{7>2q;~moEKgDl0E~9kH`${jk~#e` zNS)q~(mBlR$IF+*%F#3nC0rK37TsqqfT4=@1FM}1p4+K(4#-bZ6|n#!Z1E=_<`hmp z&T9LRqTaTWKNOG_U)w$?H=_S6F735 zYsqPung7u2hTqhjCKlJ;Hy1?)Xi#6QvIz* z{)qvY_$2lH-xz>|iV?8+m6m#1B$G4v%;0ImA68gg3~v~xggkTo8q(QQx20o?Fjrfc1E_ZY}%;&zw&FFjLD1?h&Qbd+9Ys<4f#e+h`n z(6l?F*%ZqIqUoC98Tc}S#HnYHcc+bl79!Vv|#sdD*G>U;)73}^;5y6;r(7yt9|2#b8@g%$d^xpqk`~#AOV~4tN zBg#3$8@F(|^MwTo-wPMe!jt~K&hUqCggdO*=`^PG{=)@8L5*qaB9m#J>7EWR%;59J z3l>C(CkX#&b~}mU@X%eM>DgIHH|aDmA5@*K_Z*87HJ4POeImpt2&3)s+h91VtCRaF ztMJF_#_*<_oku~W$_7mmLmT-S%+;J(-)$i1ei^dyBnVlRJpqM>hwe;I;a)kp3y^x@ zY@~mbglVQLHUgSAB;!bQvJkrMw<;5rm1Q<-S--h;>Oeh!d*&JPgYy8$wWN5*_UnKR zsn-4f-*`JXI;MY^OiAH_|34n*Xp;YbiD`Qhm(OIcN~8{OOLX$+Wj)F(pFe+&W*s0V zDlH&9yz<}mIcMp4RcP>0Q~3h05#ft{J3u3t=dcz;ECU&43)`&=<4pC@vVfox7ZO}5sUc54lN%a8QA+@Sq1e9 z6lD_9%9h@GSh8+77E?k{zr46_UI=8xF^)wRtojva=62X7<{MzcgO70-x7e&I&Q54r z_8)sfY|3cWtH1HTQh+TB-vB6&>w8ini;qDc(I7@|9$V`N_rn{Z2%z`i)S+y8l7sfO zPpzFd1LksVrWcm6C!&so*Wrf`CcM!soSfB2sDwFW+_zw4i~WVa+lxP+T**~nzp&f6 zqqY{en&eL_eQKF+eeYho3$8F}!+Y2VE%4Yu3Rra_V_7X$e`MvF)gj;lHQL~(A#>drx+i_`_}sjHNE+Q-%fNtEQHU-S=-CZ*4B^qYkZ}nJ=uQdg(S!abuXWV{ryKYfa686f zj0E^%w`nSMnT>6;%eutJVrLW%Z0)>=D3a`p$cjWZGl^1}Wu=awbY9*xhCB#`Y@VN| zK6)S6SsZLv;U#xVJprE-Ege}9wu+FD+TdkZz02rJ`zsgTgwo@AM`a1CN&|TDErx(V z9GfaiA8dMIUs&3Aj|DJ@yezp-4grLySPA?Q?^t)MQX-O8h{7Q^X(Nw)1?}VN>OjCUq%!jvJ zo`}=++t!Pw1*`s0rg5xp=92PFb$W0g%v8Qi`#L!Q$;E40BL^Tv^>UU7T3_(15-O+? z9MY-pXuq+2dUK0<94$j`;|bC2V1VpANWW_r(!Jqt2O+J6r6ryhFPp;`!_#K;I0r4B zEi5g~EL^&*oH8GNkt$BSLNA!70jxp&llg$q$|qpI?HtRiV$evglEUnWv<^w12McCY zGrn&d8`V62V3hVfOZ{r49AKN)FDx=wplU|>2bn8+N;C~0+uELD4+s&6i%Lw#IPM0%Clkbpw`DHxvNu)0!z*9^QTXk_QZ&E zkklfu?d&LgJZXi%HjsCLO9dd$rbFqlLc=vjPK0As=bM-$8J%*?G;{HiU1 z_;0U6!uTn#5)M1gaRk-)L;zt33r<3BT$M&4yuxfS%`YT$|C>qh_6<9*y?rJW2XZ^d z_-rFid>awpgyAtt4Q$AG_^@W!CXfuE9owP7&kz7)nYexb{>@4{$GdNp@sty+w08UStL{AOR-!Av&^Dr&v5@@8ixh~*Q(Awq1t5` zWP1a6xwE}~Y11u?z9D-8d@Y;TMFWTg)JmvumHmt0Fo_3VeE=@<$1E*f1=J;><>S_g zs`)zNcX)JlWZX7smfiEeaR9J%PnP%Al~DM3b;rS0%EFSuLgZ*-QluucRe0n?L?$K z#74WP9YW{kTln}68kMnreOV~;^ zAx{U=y$>;>c2!N^agKL~G&^W%YJwLO1DxR6HADryWO%JdL$1PQU{HJP)AEXxBHKAtTR{!Ca)%2TS8T z{IC52K{mmrL`kr3*E$lXrNjpi4ZTT1`dvoTexRr@z;lgQ!WO^d;9r6uEpsW?uHurC zDkS9*PmtBz9Hodo7+=7&65esHjN`Y?0VwELBK3benV39f??)=F9xGyd_)Uh;dus|e zR=A3+(U6FnW@cLmc!o>9s6eLF;K+z9ER|7W0D1H)PfB};9KzzflE>`>0~kDFE(3fA zGjqog=g+_uF)nPs`0)92w%Rz5TcyDbkTH8L)MDmm@NIN7wEZUvhKGA|K#y8{+S$6u zc3jMBtWRP)@>$D0?EU;ItVF6wk%GI2@k=B}#WMr4d&K;`;#Ca|5z~g8F8DW^>UHHG zcjfnkuUQpxFME1e6vf&HYV}^&#*L<H4jyNBmmSEuz06KjDZNKZyI59 z%00~gP^Kh=oW@)jEh!j~**&W$+hFW92Bq-d!AM~J7^nPzPlJhx*YEE-F{l2JjMM6$KTlZePitjvzv4AHcHbD)&EI; zk^bT)?X>Rrsd{QYQC6}IG2g#eD*X+D*`uu}`+G&t$#Qd)u(0gHr3UW1mslocq<{tm zae;1!7d)JC@u&%mxVCThqgCCS8h8+K$&QqFu7!kPS7FVAToL8m+ckgb#0QCqheXc7 zbf*MmFb3Y4#uw(sj(T{)6ez6RjEunJ()2wX(=a@3Su8(53IT`%hsSpHje54uh>_{> zhGcGaMro~Mu^x!ge#}}UBA&Uv`wCz%$~XmkIqnLH`9nbgI1mRP01~~-s{kK6y1@+e zcr`KG#99QX5<$@o_nR&9q%luKQX9-Np^>>si)t$3W_Ucu^9T`3*ejBXbG*nkpD7{z zVTx#pm;?Z$z#)K>jf#Q-NII%y z)QWo@D{tJ`s^vl#zleMbkix=i;Xt}Ayf*B{jbi`-u|k0lfRf-j&?u5|TF&#DV^I%D zjrnDCG{+Em<-9OMJe&>c)I6Upf(s5ODd=bpVS3yLFY;Tr9w-Gu4L~}|@iRzgDHbc1 z@w_iK^yGcH3cYS_krZ;}P~W3U8wD)21R&AjBs4^BflHPh%bic2JOM^^8g+qq{Lg>2 znbgT}9O&lopEau4i>hc1+8%-n@Fu=68*XBvCP=sfpi&I2Td20$p%Qqpwz_0zB9Yik zx&-TUm6A`Sn9aP>{%=s!RwX%Se-+Z@S%$Q%4^89RLh>3}5Wc|`m<*fDSp|>pkOk|* z5gd?kqeGF76(fNSI$&ko=Ckj6Qfla`1`Od~nI>8tRk$Y$yG%WmJLo@%(0Y`Y2RA%Y z`1IE`)k~yCbUI0%mQIYn- zk({LmKf$ZyRX(r&;7DPJGS@lXy(jADnHK{_Cnompz-_*{|LLjgxw)>`R&_Ixte!PW30MoGzYO|Q@A3wVTJxutA>b(~SMx00+GN~j6L@Jh(O&}y}6=x%eFau8TW$z(X#;I!8 zwNLc_`e^_3Sm5#?Ck}NuEY>j?d_5!V_#O>W(GDuA+c!etSOk0@Yx(n%XTud5 z)vf-KAAQT6XOsOg)kJ#=gB1A(5utH!>gr%9@#t+FK z97=MrnZK|KgH8^8M7*^DJ?pKkVmJl1cXVVwetuHY@w&I(Z2fEww8e0c4`tb2vlW(u zAn3O9_jC_T-@CWE<`EFF(JESm(vAUEqB0j&=-$|J z7I5|*24JqFGU6p)Zgm(@orkmF?lv)jd_Fug$!(N%*kxL) zc|%miL`AvoXk+^U{4-h8C#?mW>wyYyK}6!_f0fe&eHMxLcw`L?Z_im?zzTz;`&3a6 zLQ@Tz`gt+)6XxeX=kDI-B$;7-8fL>ryi>(@$kcIefYFK0zU#mmU1+e$<3oCS#Q}oP zQJJ4Ujku$61eN&c9^m9SKOr^?`kD*#n-u;>Krd`D!4*doL3Hq4rR8+{P!?xy_bO9LToiqW2(jb0DVx>FFL;%S083)Rk z;pD)6FQPk?o)1_UWRuWl+m}^BXn>_iy00Q4Ub!weQG~{IQigl_&CPLJIh~; z5N3ZT3D10hjsoIiX4Q+aMN#@NdG#`pyk7HkFLz4EXuz+loN#GFTm}O6M9U3`Ux;b3@g^!h>(XDo3Wp>{EuLa1G_E6t#ez-UC*}B# zf>GQ7|6p2rOKb?(2(M>68<9L$Zq>0!GGUUkcs)1`)KR+!p}J~Ox^?ySKpVot8`0Y} z^;4k+Az?(=$*l`;I!jspt~0(j(A=C?Rn>Qn0(|fZ*P@=E)6?#BVxc!~fCGZbz>|QH zsIO0Pb_>B#=Fy{eCrM1tw!b%(rrvI!fCY;+DJ=~efh6m#L3et_@FB2AQ7Dg(HxAF_ z*_{#X_Z_5;(*8Cy6pNLC#?dqvQ9W;enSce2N)2vU@*hQmu{ow*2VMCHZZ<}S{(=+c z0PA+{w9irAr{BS|EiTJhI&lJ3af-3GBrA1JXF^iaS;Y&;)&Tl~BRi z@T(>DqXSA46D_s1Z}fy!<4{Lx1?i>=goWzP{`oWJRe_m;pc{tPP-~;|Zrc6@(8<{3 zBrei3qXp}PEWAVhFm7)iBy<78Z%$eU-h{L$1b1pHQa^W+1Vh#ZL00MHj5#J2hK2-z zUAmM(c?3ny)D%#TXRFh~?)*-wMlpx8@ylIG5~xR>btvPHdB?JEDD1z#W7hx26*Bt&{`Br6vI<-N z^UA7ksi+V`^`GyJzpU~<-zXvKL^=!q`Chwg;e&~Bp~i(mjE$q8)&Kho3m>GbK)Apk zmc}PnCe_6wo!IPfijnF+KNifvj7!6yG3q7%R5v~CKFgPLr;e;n=HqHG%dCGwZWz_; zlR^V`RP4s9-i~gQ#MFX)fiv4U2Y2X!H+zbt+cyPEN%UfDA^zZ|PoX$~y>444G#clS~PjGH1#xv&12@b*^{s z{rj!|S?jE`&Ux2&?X`AacF+4f&wbyY&-J;6cgAgI(Y1>c7mq~=S3D>9E|k6XG8wUW zadYOJ9ZdL&@~3uWaKW_X>y(7enr%+SoyW%sMc+Bz09pAOA2(KMMsPKqZN{W^(Uhc?{}}&=ZJ|C zN{9Pmt_JrIW7zeHk;PSD=uC$gtn6((=GvrikFmjsrS|;F1Ah(LgZ#qT4<9&VURecq z)_8lp8ZK}y3&x0=%r%y3<|H(;feYA)8I)&nZJq^7Us1WPx*!*ycVOK?ybn$dav+=FQ z0$sFmkO?h*0_aK1RRV)D;d(-b^uB+&vxkyKxvGsF{%wm z(O&Sw>b&9e*e6T?VhqGgt;*|e+bsI3YX&*!duwYC5vbnHcFXZDjdPN_FAJuMxYXXD z^H^WO8HpxpLPyukK{UA==O(TcmSbh!>ki{|gU$jq6*x|@+2+?rwiqK|sw2K4VQT%t zsE773IkXy3Boa_tXXWJR>V!Rhf*(YsgvMcHfnQ9h61CJ&!J7jBpIc)lBPV}CrG!f0q|2+|r3 zf~Ap7Gf1QYtpFdm+HmQ9ypI`LkSrDb{-WdJ69ZyUd4RrulGX;{8iNUunW#m+{<=-r zA0&&_k*qI{(}wid@0@iVIf(Gd!_JE3Y`(u5o6s9x%$F5MQ6s!HMli6p(!7)eNO8V-dTg z&l;<;_g5tvYI}O{?-Z-6HEEs$!iwNPuOh@(nbRPz|Ht}js^o3%qeqSKmdafn5KH~i zwJ?aHtBVRL_p~7Zo3#+HdWN%2sfmrMgBUiO`l1DPFxwYvHN)gIuUxsnk|yPH4>ZjlR7W{5!g%R&s> z(trF)Z*0W>vRhlbb;~0|tWKOecRnXn#q;~dhvBRIuR5n#h;}9gsSaf2P9K;z>Xsx< z9!MWqM81Pka7afXW7)VypKQ(`5%sN=km!m=-2{sjU`jx_P;2YB(IsVLCfqkYBJT|` zZw0%hAc9R^r5|KrxglaXpl-lN6-4muHn)FM+3&t`W2zGU;x+=y!-oMfG3W)C8*DE^ z6YDJTT~=MaFE%Wtyft7KDlUeDX6%+|X3i&BY?ovF)ns=<2k#wf^)K7GWo!pSC;})1e?}ZmvbUAy)lm zat9&W{M{MO_e%`BR5bJz_n!*8U>EdF_wB`aKl4CBgYWdCtC=IRAx@nIQIGaiR*6mh zQ;KZ8sva40`!On@RQRE?k_|YXtSt2M+4J*tQ~Jf)n?rYY@YVf@&Rdjvb{cmDMWl** za;}vX){;h0W@V;qt~wHw$vi!Yte?s)lsQp0C4EIj8!Pi}WF$bGu|bFxh)7ALHO-jv z=$Ph)$m~$~A1;6$Mhku8F*IH)^C}#B4TZ=37g&-H?VSBIZ*G+g)W@PX1;gHo<+`;m z)S7^?hQ+541iM)C^4Zp#!9m9#A1{?OKKb}jwA7+hGzEZUSw+POnqU+82+8$(hY{$h zYyT~Fs{-b(pjIs|(ihheLzPU-yGwqI!*6`>x-8lcsqV(Fucn%)wl(zi?Pn-3eAP); zw-qm|41BbNmIn$rX!fmd+!(eNMsCj545be$AFGA3xw$#z=4K)qskM)%qZ#ftyI!3i z9gWEdL>Z4Z?6diX=RkkI%rOov{#+v(72x!Fu}TE6OrY{x)l`!(+oD`KdK!egQ#K<= z6~-K0)q@p-{t1v)J!r;&4V-43~M#_ue%Q85!9RpflY zDC)T|E%^TMckD8^3U-)rK*-!Sa6T}CZEQLy+;43pX!$taT3Dl7HjqtNh@NoS_!QxO za_eQ|+m_Dvb$#yovSj zzzGqrVVJ40fDB_20uBr1SlQz=n50bJ>z&4x1>EEKZ%0uXyx{VMW~xr5ZVY(EZ6{|z zH@j>=azt1D2FNr?r8bWSjbgqMX)LCM2%{&K;8>d*z%3IBsBK5ghx0*VS1PP1#`HUi z2sdR}0HZ+|(Dh2aCZY6eVg=>Tp7kin`le*$?y)-%~JUKmWprQ9>VBqnPB}DD@ zBQoek;t~@#9_fCkL{q>Se)zQBx#ih6Zzfq;k11688U0-Bd;4hWP5*6l2#X`nw)rB( zB3%CPZByAe?UNiijEl!>rv|JAb6+2~e5`&P3Gn9zlsy`rTh_tXYYksxh$ z!C(1Ts&F{_#RsaQPP zszB)&QU#9Cso_g0UzI@zR8h7Ks7#uXbu9u3k?%rAw)c2#-Q&l1t1eBC^~7 z#hL&mMEEn1Oh8^xH$PXsgPDx?mKed$FTk8fN7(G^^SZh}K-_owf;CVu_%zHy>ra8M z^x#=ZA0VMP`_1ohVACmOX122%@%~cnqK5Pt>2v3{QwtnLZwGGB#o&;dFOvW|(;Onh z9mh&4ctFk)Svbnq-EBro`=&bU^6}Wc03}*5LG3svU&rS`d66V0!-3E+)NO}%09*)6 zFQ3Id+M{Xix)FRZK=cOaK+u3($pa1J%89z)G_y!h5i5wFeYf1s8UaB9r>d2Yni{33 zAsQpw#Qe;sB?CCZjz#g$%GzS4j}+R98xw1dq=%oxc0#|j&~4=)WhKlAj^MYod8r>O zb*0)T>3HcB9Ci>0kp>b!H)CI4j&8i9uC4HpecNt-jSg}FAq^c3huKyN0t`_xV|@TR zp8}iMkBWMBc1}#_N2j*QKmarVYkAk#j-<&HF`|KpR1MZf@d~dSFPtSFD2wkb->)%tw(_G)}X*#$j zwMs+q{MJY+$7-0Dm*?~CjU(aP12stja%yakE>qsWv1Btj_#sLvb6>6Bny5bn2h4Bj z=i#x^+MO(C_w!>DWk_&v0y}DBm=Kmyy}Ll{h6cfecKf#B$zorw7_|@NbdkXG3#$Pp z>Ek)&7Sex*R8 zcytNOCbesBaMPW6V=DFo8*Zw&wgi?jKx%haS8b)I6)tHBSFT)B)VOf6Sdyjr+16P> zQBw}*sk4JBEv>E5yfWv#w!HQw`BHdH2|v7_#Sd{wh4iJnz!xiW+O&H z2H$6dEa5Qt>0EqVc9^M4N7Oj3b_sQXySPOZHX;$YE5iI`PSiCIi<~ zLL&_f+YDR{7OeBiHR`xR}4*pQ*oF zhY7a8WhW+T9z8O=c{9>enus#m3=XSyRCG*ZBU6)8ExPY17V3 zm@B4`yV^1EEdSnI-9q-}n?2u{+ZG=SSq7I=Wt3&+PtWyeSdt6ZP*=Nf2UbnG8 zq9Fz)T@{(9t$0>qXGkHXFRWcl>U)$Rsxs&{QV92CFu{T!KcBXwGHq;Et zyR5P*7e-A_wmOvrp*d@9l_Ruwbl`n}D6Z@e7ZmBPo^>Z4)L4AguM3n%6X>X^X?i(! zhTZkNmjuDd<#tq;&v|Ho%|pba*K)G6b<_gNT++1Pgg4G5)-H|rD%(%n_RGvKK6I!M zPvyaTHxYAQihNL+U&{N1o;Cz(`O)9)yv7w{S_t1jjqB_l{g1gaipl1C>s`J+)Z;CDnlDU|^l|mq zr>ES6`?^JsFuLG-MphYx@U^;DAVn)TsDy;Ii&1aJ| zC?PX5TXOAVMh6!c&NSoWDv&_}fLkeeh-i2PHKi@J!Or&!}7 z8xN0Nr;AIcq3rAHvz>xPdFj;;Dev6vDqsn|8qbEeb%|I z@*BUJ5+P=8=<1RY_UzdsXLO`4Fwp9+oBQ;L@V<+(uz}m)7FTIWYm2_r&@zwGHGTo;~zn;(#8qL*)a|6gD>Pr(aNm z5S@6&`Y&D8O@_gx!wLMwis7TJD#_W*RAmU|&RFQ$x4BxVx*17=q_g_n*j*Q7k`J8I}y^M0Huc`dfBACC2KUsGDn#lXcRIjrzZ@JX6&qR%5j?h>{npq#L%j zDRPHqG5oQ)TDZLdgiNVl-_AQYWAW*OYYAMtg^VtA`0u-wUipB)ZEvx6I{p2#WjceO zd~otwiTzi75X>+lzA;tOa*b1*h=!>&)%K`r6!D931SEEDBgh&H5O$w@Kl-;e?ff9d zAX?d~na4kYMf!f=CI*Xgy|AiMVxuCWUUGDFx_k}Fj;mwL;YMP&rcL#wD?18wNI!(! z?vxA)4=NUPBOT@U2B=U ztb56;u50hc#3}w#QV{##@49Rk?PDGSZqifpcR4&Ir~O|IS(Ux}x=V!!=)1jo{an~W zW&3tQCjEW_(nJzIha`b&P~-SvpUNdPlyX=00iwo%c%)%Kk5ksi;4t-3xDW{D#`;mB zZ-ZO5REFk0@%yNpnyJ-*3`H4$i4H>}>!*2fd+}7B#5EqmhC&>e4sj1E|p@9hMeqqUz~UV?csd`iLGzvMQ8wo{NVF00ZJ2Zywe zR7m$!<*iwN`+9b=EUG;Oa3wg{*;O`zY(IoP3X(gosY;PFnr0;k@leJu0c0)s;8odX z=q^JYy|kC`_p8*OrsEHP)l6?aD|#gTYqGkAjZ=h6G%+Y)Kl(2z@71BdZnG5r=WZ32 zI<9#gJ|99nk&L1Ge4ndHc>8jWF-t1)7l%HrSW1_};eWuKis!4k)#OZ14u1z?o&yL zqO_=vg+N7375a%$TQKbFtDr#kl5hqUbDh+{Z)?ji;WC*{js1nFJL$nMXCG3BWNOe{ z7*K|+go13BF4!NZ_(aOVMJ_23^!RR^eNO`VmcdC1!os|Jk6f2(02M9meDk{mp`#!| z;Om0QfQLii2SCGa36543L{owzt{5eOliml_>N>V{ix>UVS?b5bStQ2$rzFwir8mk{ z=}q;IDLx)jHfCH&)%hg`!@zn`&jddm^X`W#s_EPBNE`C*qo<+*-2*U8c7Ac^>~{!i z3Jq$&u#b<9ewmW`!(Ad*^$GQu7(>r0+u50m=rz=Uq&CYy6I$Xn`iQ&UG&X*W!OZIC3J{h@ZJiAa()4q7&|8*M~r zsPI3ZlRX`7mKMDNpNoZ>adCah} zdAA^W5@z$!3%BPJVn31+vTyjDH<_L1(aj!V`Dd#|NXgInZ${DV)nG0TdeDR9aV*O6 zT}_1>Lsuwg{FjZZh-f4N$cE~DCJ_?m!r|4=o`t{G(}NSY*FJ$WFB`qiiQTyp7dQNh zV*GYq*Dvo~|9N;G`ZY1FuxC%n#I^>UZ}r|@7afHNmDN?(s&*{EC~K{C!DaZsZaGei zPlpa$<&1|ya{Z71g%{1~V zsw-@@9Xx-l$HxJdpp)uV$_`RLjvzT^q!;*CRaX8O)vRizg|>GqfC91{76ul{+n-*8 z&k4(`4w}gm@q87r=I7|mE@H-|kqhOCWiibYc}4#gl#`&iCqJ7#yuWXJ z{HgkJC$ZFpodOH@mp4312bJ-nMlSGRnt+Bc?8~vIL)HTu*mOXz6-l`j&+rKX062P` zVGie^elT@9e2JQ$K0SM75=2#dS8p7x-trtAeeb7v~ zi)Bd&<-8?2ap-r;a>qfV!1#rvrmpboSECJy7TNP`^Plz${Z8xfJ;BS%Au&a?jI8yO zJ$glnU6CFN&$3#ExPu2xORHYRkBPh9X)(^SFnxc$erjr1L_px^{@uhS`tt7BQ`+)x zD=U!j{YFIfcA{cih(`FRm%v3uZNDt?BRMa`2N`00T;i`R{`&QMvd+V~toBjRWe%aF z{@cI94|SP90+YgiF~Q1R?cteX;nNQi&yGHCQ)-RH%-?RRWNu>RgWccVA(bbIJ+7~lYz@pENKmS! zNO-`p3xfuRu)hAqRk_k%=$Wf4E5Uz3+T>sbtKtblq@mGMHsYG=-e0Tl1D^n>urWZH|hr0=?F=ED3Hv4D3d>_0?`{m5WtjdwVVQz<7!<8{8(SL(Yzb~Ldb>zbbt zY?me1OmdK7GA`D}9wE2qJ$GDi*EGY%O}eiTKiXPZZS&1+mc6(&gZdQ)Rh2iZ!2BW6 z3~7G$^;KgN)mX@@Ib@;)hrf@e3CS zZ{h!>GuA*0&8NY(NcFLZlLI*A#tQd;gZv0~0P#BX}ew^|Le%ZT_+u zG-cq};cH4c`7mXel;FfM_y%GzqUpVm(BOi2o4U32Q|*(y@M^bnbaa`nHVdi!+HPD7 zst!4;Y$yc012iqOD=M5$WDlQy+k3{wH5`AI7^O^|ZO$jOekx-yllRi*``q^tV5Nb= zW|ZKtHmqwO=5u20yE+K};v9In@Se=4NJ!U8d`}0&kDnz)B&cSL(Em<(ga?w&$fmweB0H zaO@p?a-VW=l2h5Ey)qe2FxU8~b@em^=XM`rT3=~yCP{2J!8K%?5wpPCQwmML^ac)3 zXDDdpB}VoWsfY&Vt{ zR=wTM>Z2yTZfB=*dlmD#fL)}GcZ8|W~I_uzb0Re_GmMhD!rOLuMk0W}cpU zf}(T5j?>jyS^hsrh`9usnnGfN4j>3(M$R;=w{2QNRiU|iG9damXoT;(`ou+RlWsL} zyt;)aG!IS9_4P0Qfq|Ixe!MM4CCqi=gf1M_I|RXv0>iLecvJ>Y!#ueD$(5%IEp%PO zY&(6+hqcnx>FMY!O!_+SI|{0#=;)nG9~|_h#xY2XKwww;#xe zqdTch6k=*=apdRy9#iwFb{u&Ic^+hsz?Tn6dB1U*MHh(Yc)P3&+B2ekPQn~yt%qOy zl_UU;Th#nQ1bo}8h-PzmZwO>ULTHDr%(|gV__sYD9j!bro~)?x$cm_zdtcn&9f39u z6DAB0B-83$rX??4oxqXRd-iw!SPtrg_U_Fqd0K$YlK17_>|7msep)ch>!slh9WfS# zl3P+c2oY_0xw)6P;=(8>_%=Vv2W*^yBN*F55O&O7nWj-H0Uh+vWgq44N;uowut@!|)wbj;>{F`gi_#6EHaZ9M@%xXT0H32b8}{62p^K1QOQ7bQaBi+w@AK<6Z|h0Es;jA~qw@=^^t0#YElRcC z`1yJGl|+yzQ6LyXYHOnx%+u+yv1^wvH^vM3q?5wDcYI>=kGn8a|$2T~gyhtg}r`i7FDOFE8YYkVeTn)C9_>!cbtOt6M(b4rX>p2^=)Eyked^>%<=o5jb8}J29tWbL0vPt9n+4?^y$hQ49UN72p!eZE|I2yr zay9zvODJ8$K=ALUk^1sK0*J}^`ljv>!@;>9T!Eh_IRn}W)L_ez*1ReIYC%l8>+bA= z&?!=Z4KZxmkk=%36P=^Shw`Kc36V9nV@=FE4F{Ctby9^bFya4x>lXIhrY~vNrysBe zvL`*nMEB?pnI43>iTNbei4|7LW;xq zX|dyxXn4r06ozCIVfY;(FSo8vKkG7-qpp{PZs(=c<{-& zNgVY*Tln-{|F~f@`PrA=6u3_SKd5UimO1?D)#4VVr0Z;i51U!jeGEna{O0pUKPG5xjiAm>GKb{>)Mf+4h;7b4HV~mG$G743#bH5 z_J@-Tng6+eXW6#<0z>DK`@vTT`3F;7(UT|ly8;M=0DIHpLML85f9_YCy)+d`B&dr; zUH|Quu8|A=(l*0~J1QRS0Z#=J&1Z0o@K~3Vm)i%I6geB-uC5e^*2wWBMsq>ci{_S} zQZN$k3ExL_@+gS?N_qN!wBCkZaXaH`t6Zc23NJ?hp#TCoWIr4EFEG# zgQ>1Oivk-}mEH~Qb$RZ%Xyv?b_jk9MP{ZFI^JrRvZwmmB(k=fS)rZ10Fdq7i!HLE5 zsc-QGx>e7f4PChcw^!RkS(t`{mLn!0rw&Q1aT|Cn7@M2U1Rp%1laxH?uu*0+Vr*=D z((C=<+MmZpZ!V`j#EuOz89^H$m6N=|k^Q0Jp)i{&IsB!`QnFZE4_o&2>ng`)kEW-? z-xHH($oqe+tcd%3d4qZG?JHOCetsFqVj!a%r%zAbqq;lkV=A-owps}p>XNUc^Woeg z$ps^e6qJ>)O9ct!Hw1u|H*RpumZ7Lh`xZ19^*>wyP{M#&ay+-M^asE|DY>c6Mg>kV z3O_Iy1z$&c7Rt3PPo>WDz(nqiv~!KBXWs>xVmeO96Is%lh>_HzWamap{te5a>657)?eFp zEt>secI|g7PXjrY=%(f0_m}ui`255!gsr#MVXhN!4>j+t4@CIDj_+)B z#AS5-y1Ds$PMVkbFC9QV)6?L{ZEbGCg4E)94?mF;mvS*(ot$EyQloXUq1P0nM2ttVES9K-@5Fu_s?{VbOn`*9%ya4o;kj4*j6CdWLyfeZ2O}nq?&eA zvD0$}GXm>iW;QL>Mp=TZ&)WQ6UqcSjZ2bMIfmfCW_oUkkc=;qhq=lO;e8+nIlGEJQt_^N; z$5RLB+;y#_`8WZNrv~ckZ(q)UaNB-xZ**4)@_I8aDZnwe#<>7S7KyWC{;#^by1F_# ziorKm$~wKgoKR(R&DQyx=O&&wMMeX#hcurx2EyhNwwXN_U|B zA8L76D6eVJsO=z&KyvrPgoGmpVv4?fgIOmWpcY9BKv*dMJn?{sXx6K*shI)p1|yT> z1D?|5=)||`*-(~ga>oIF(a61=(SL^JH0b#t&ERM8ETfg2mg3U=fdXBgeZiT?!1fMiZ^5ZD*tG$_ z=26={nQ##((}AuTL&=0EvVb#GbI|dZFVn)b8*bjPVKXO90$T(KTUT(90C%43pc6Qu zDhL$Y=9^sO0aeRbUl-;iAUSAg3Xvj1q~vzR^F<+#2Jy(EQ&mkGC|FO5BSiO&eaT z8$-O&eC8wLzgI)NBXol=&$j>Xb+{KXQzWU=T)0Fd(a~5?jBjo$!c=Pbzkk<{hBGw6>Bp6F1}PLw z1u5q8cY!8!LcD7NhAKN}|0T%#olA#)d2nz=<}~qda}Z3*#%{#=clI)O9EkqZ$;~%~ zEg_>~Q~F$eVd4KD)%?mcuAXZp(s=li4=HL54&7RcEA6HgUxnAqODqOyVZYSFc@7KtJl@bh~na5~MAo|G}gqJ=`#Ob+C znhS@{x)vca1cNv9(9TLbvS&t%O`v}T_miD{PNr-d@fm30E(Z`MD(h5p9B&oR3U*Ab zem;eHGtr+ud*tr=G*VySYbMX4Th)TcK_L2~B4J9^(}l^U4E~W&YuZldV`$Oqy#{ZT zj;V}A$>fE5)ZN0HyAC@Dt2~G&dNsp<2>!Lo_N<_gAB$>lj7L~EL$=PxRrlP>N~$f; zNBLtb$s2OEGbkKMlk@^Rr4j^QsH(XFn~?K2xZpHwa1feeMn-F|Luh>ymE|tI1`g`H zG-`A;?>-hJ$asV!hn4;b9ND>Rmz=CD!54Ia4%0PneWIqI7M$~i6z%^w=Od+dW9Hu8 zf0*oFY$IU0jke!Oi)m>!P-;^qqyOys8^`|!8QjF4CcOxSKw)77{14ztBPR!+@N3mk z>{LPUn;Dy&gs%z;PYASOWW{{=u)VWc@MHKN;*mng0;vxWuZ+i!X-{hNBfyi3X&6W8 z__z`aI7(-ZA8-Hl3;yTt2jGiF%xCHRObvG^xGi?>#jgSO#6Qs{B0B;W;P`-46Yp`= zZ|v2r8Z80=S!C+!kNPc;M`KB*YjZoGZR$M*cwEc!^c*0UW5Z= z$h+nd!ApR;!QRGZhc7B!#7&R>4ktVsvL?z3M;5m=jEuOzE+T&Txl2TPpbDfvw{8*r zU(rAPt9ui7xq++;o|!6acz~<9u7V;CHk06WZ^-(KwY$uTIW?$T3he!uhiESFXcryf zK|T8T@i7jLd5nSR7m=UQ8MzpJWzbI~|_AyDLb z1U9I2(k!@CLfa3=)0>J&r%*rs2BzldHv4~dcXtE#Hxb)_P83T9L3aR2VOYsuJ=(Y6 z#HpHscEddWJ|>b1;MIXT_6fsU9jj41CHSzMVx-tOg&XPKC!5g^)?g$OfYKhmGhrgO zZw{}XWoEvI*-F>J2eQW)7#Z;bV(vT+f_UsLX2NK_PdyAVvMi8x0mfR+8wJ?jCJI@A z=tD>#eqk?o>Hups4}$9;h(7q(+G1Ltv+DT)>CD;@%%_Bf5sarirpmg;a-A`3o;btG z*}Z#rf_@(x{EkKG(fxPtQel2$^6?Isk7NN0}kUNhN6td*VjSa zUMfSKu8wr%y#&lqz+}`ammd59Jxg0#+qMP-itt;$d_E0gdTlMy%9EM-tQqSeS-~?f zmnk4osjjI}WG(Q~zL+v_Ff2H@#6j#-9ze*mN21&z?(=xz!6+s!j+c^f1W5>@UjCqi zGYA(8{N_Ml65hIsiqle3(^D83aI<$Lp!Iye_;G287koBRIZ%#iS4<|lg^2-}w0xS>K&Ee-jPgModxkL9n@hHwo+kP>f&~$31VFISHDh z#sp|*ZL-R?x3+%W=ExnjJVQ?XPC#6_6>r;s2zDIBV>@vnm;j+}SIR2E<433o`WPtp zA!PoL^P&k(7q;wq#+^kW`h~qnrsL%;uN#NMlH%WKG+i?<{XsIN3IeMbIvK1xB49%F zqAPIHffT5KR3$r#%KmHr5cUliS``-yEGB0i?{vRV|K-aU9D7{JAKtQ@r+fn)j$$*+ znk~%D(W!yC4M%!3j8F=~Lfg2rE&?2%xbdCPH@`2caC#xIpa4%^IP#S`a9G*cupXd3 zk?>wT_%VJLsT%}@I>KvpdCVe>V$Yu9Kg)pz_(}m3Oh{sdQ^E7oCGax$FwoG~_r~=@ zq0I?d$W74;mvE;E(gRd;4x(-ia}Jmr!lVJ?j~4*v4~seNCi2tO)YRbVgTAEe;Si#3 zU|zA40BRh%Q?q!YX8oB6=A)RhX}iZ~7Q;a2FPQd4;HR^(H52*iT*2=gs@Mt?p`>py zcCEb2p~IuROXamjnB3FEkCA@nyLR|0K$L(O7QRa)h<-ebB7~pcuzLL4H-5!xSOpRNuoA_KMMXs|dLLpe0mpt618Dk% zMlNeQAG(eOR0jv(J@#l87_uq(pX+=^5CFCT*x)>d*-nC&W~wT*|Dr^Pd&t7ReEoX5 zX1uAYE%Gy(e8u5=5V4bi;rV_a76s9jdI4fkd;7!m^hJ_WN4dEH>OU;`u{6^Zhu0^6~_ z+X@C3SL3x}l(OVxsQu4fA_j6Kl1i;JNw+VX?3pA$LC5rGW95Y%=eq3b&uV4b7D77X#Q z&W&e^#P5K%1yvOMd8j7>i2G8a^d*`-)*z({dg&0^>UmlP$LQ2>CMpNYK=8en6|Xo< zh)jneT+%NwRfL>z-l$89b9<7>b(a>E)-tnYS0Mf2_VWyGvyd{*j=Epo9SP z9h?)>WV{#1Iu;RMm+W^>5;7reTNvF2Wboh+f>-Y{JO~Dad1&_9 zEi5DsO-`z)x?uY+SJuQ(3WCKl2N!E@je~}84 z6A}|cg5=U6S;xOnk5P#mwo*nL0BFNbr?5*N(Y9{!B*+|S!8_D-qu|MtkD&7q_A@hY zzK>DcOF}e<#P-h(BcO$WthIRcps+Br@ah*Y&Mr4}3K&+0FT8C78XRS+%;5z4f{QHt zpr?yo5JI@Z*Q;GaPTU{#2N9-z7R8P`+xVmB-Hdt~1KM$j;i8+d(x*MdqG zer`pZpGHR$z^F#Wu}~R-$lYjc>q7($_yvd}v2 z*vKFnrI%QQem%rs^JQbjky>>`f}J=exf>>hsjA4`A`Uv8^GUc0n~aN>K9f6C>4BFD zki)9iTyPLpl4*Z8Er=eLF@O`$PBb(SHWC1X;M5W#7l#;FP_zRbAB_6(vwydy|Dt2V z{QiM~_t-bSYOuJ8CWt7BiSEj!_FhO#qtaPjUq7v<+VcdLchq0CAOQ+=d+!w{0<>Hk zi15Ul=KW_Sjj14`-xBkhQx-kU4)k!By(mMyoC`<>kn^p7$mo#2@x*jML67`b<68D? z=$2bvpGZVChin=Ucd@m0w|>QOCnIx5D{r#IEF^26tC<{NuN_@M4waK?zfZGeEzw~5rX`drVh1bUsEaA$HP-5G3eRC>aX*G z`xM!tVX#$)Q1C8Vg-)VLw&TxlM&|7?syP|QmGXxEd~vB~r8^Od0|>?ve^3om-V87y zq7B#R_V53OXq_Z4C5#td?P>~UQeK~W{xby*8fd_f;Kdc9pq(_claMe~VkHv^BI>VS z?gZ^>Co3eQsi{S*svTfp==iXLwoI{h2o(cnpGbvix_C2PeK&!)=~9xrd3YrAeBVvX ztjSCp#0wi8ZLB?Y?pRbL1G8;aELsT7c*1iwLBVBtu;wonHnijEj!6!B#45016bl#! zMcMExpDt#Ph-aA06BWIMN6#tk!QliARYK2=^MgO|%2_4Ne|KdPu`Mb|g^SeD2|VAJ zKVΝ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 literal 0 HcmV?d00001 diff --git a/go/tool.png b/go/tool.png new file mode 100644 index 0000000000000000000000000000000000000000..02ddd7f352e94c4c530975491290b1698ec41a1c GIT binary patch literal 25118 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 JQ?A|#|36{PRww`f literal 0 HcmV?d00001 diff --git a/index.html b/index.html index cbaaba8..7191e30 100644 --- a/index.html +++ b/index.html @@ -15,10 +15,10 @@

Hello Go!

在完成了上个章节的Go编译器安装后,本章节将介绍Go的基础语法,并通过几个例子进行展示。 Hello World 学习每个语言的第一步永远是学会如何在控制台打印😊
为了进行多个容器之间通讯的实验,首先我们需要创建两个服务,分别打包成不同的镜像,并通过docker-compose进行容器编排。本次实验的项
\ No newline at end of file diff --git a/index.json b/index.json index 2bca863..cb545e3 100644 --- a/index.json +++ b/index.json @@ -1 +1 @@ -[{"categories":["vscode插件配置设置"],"content":" \"todo-tree.regex.regex\": \"((%|#|//|\u003c!--|^\\\\s*\\\\*)\\\\s*($TAGS)|^\\\\s*- \\\\[ \\\\])\", \"todo-tree.regex.regexCaseSensitive\": false, \"todo-tree.general.tags\": [ \"BUG\", \"HACK\", \"FIXME\", \"TODO\", \"todo\", \"bug\", \"tag\", \"done\", \"mark\", \"test\", \"update\", \"[]\", \"[x]\" ], \"todo-tree.highlights.defaultHighlight\": { \"background\": \"#ff9100\", \"foreground\": \"#ffffff\", \"type\": \"text\", \"icon\": \"bug\" }, \"todo-tree.highlights.customHighlight\": { //todo 需要做的功能 \"todo\": { \"icon\": \"alert\", //标签样式 \"background\": \"#c9c552\", //背景色 \"rulerColour\": \"#c9c552\", //外框颜色 \"iconColour\": \"#c9c552\", //标签颜色 }, //bug 必须要修复的BUG \"bug\": { \"background\": \"#ff3737\", \"icon\": \"bug\", \"rulerColour\": \"#eb5c5c\", \"iconColour\": \"#eb5c5c\", }, //tag 标签 \"tag\": { \"background\": \"#38b2f4\", \"icon\": \"tag\", \"rulerColour\": \"#38b2f4\", \"iconColour\": \"#38b2f4\", \"rulerLane\": \"full\" }, //done 已完成 \"done\": { \"background\": \"#328050\", \"icon\": \"check\", \"rulerColour\": \"#5eec95\", \"iconColour\": \"#5eec95\", }, //mark 标记一下 \"mark\": { \"background\": \"#f90\", \"icon\": \"note\", \"rulerColour\": \"#f90\", \"iconColour\": \"#f90\", }, //test 测试代码 \"test\": { \"background\": \"#df7be6\", \"icon\": \"flame\", \"rulerColour\": \"#df7be6\", \"iconColour\": \"#df7be6\", }, //update 优化升级点 \"update\": { \"background\": \"#b14e75\", \"icon\": \"versions\", \"rulerColour\": \"#d65d8e\", \"iconColour\": \"#d65d8e\", }, }, 将上述代码复制到settings.json中即可。 ","date":"2024-01-22","objectID":"/todotree/:0:0","tags":["vscode","extension"],"title":"Todotree插件设置","uri":"/todotree/"},{"categories":["golang之路"],"content":"指针 和C语言一样,Go中也存在指针,一般采用如下方式来获取变量的地址: a := 12 var ptr *int = \u0026a 如果我们想要获取该指针变量指向地址对应的内容时,我们可采用如下方式: fmt.Println(*ptr) *操作符和\u0026操作符分别代表了取值操作和取地址操作。 对于引用类型的变量,在Go中需要注意不仅需要声明,而且需要为其分配内存空间,不然就是对一个空指针进行操作了,具体的例子如下: func main(){ var a *int *a = 100 } 为了修改上述代码,我们可以添加如下操作: func main() { var a *int a = new(int) *a = 100 } new(T)函数能够返回传入类型T的内存地址,并且内存中对应的值为类型的零值。 ","date":"2024-11-08","objectID":"/go-basic2/:1:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"函数 函数的定义方式如下: func 函数名(参数) (返回值) { 函数体 } 其中需要说明的是: 参数由参数变量和参数变量的类型组成,多个参数之间使用,分隔。 如果相邻的参数类型相同,例如a int, b int可以简写为a, b int 如果传入参数数量不确定,可用...T来表示可变参数。例如func (a string, x ...int) 固定参数和可变参数搭配时,可变参数得放在固定参数后面。 可变参数可以是为一个数组 返回值由返回值变量和其变量类型组成,也可以只写返回值的类型,多个返回值必须用()包裹,并用,分隔。 如果返回值部分是由返回值变量和变量类型组成的话,函数体内部可以直接使用这个返回值,并在最后仅使用return来表示返回函数结果 我们定义一个a+b的函数作为示例: func intSum(a int, b int) res int { res = a + b return } int main() { b := intSum(1, 2) // 调用函数 } ","date":"2024-11-08","objectID":"/go-basic2/:2:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"函数类型 在go中,函数作为一等公民,因此可以作为变量进行传输。例如: func add(x, y int) int { return x + y } func minus(x, y int) int { return x - y } func calc(x, y int, op func(int, int)int) int { return op(x, y) } func main() { res := calc(1, 2, add) println(res) } 但是在上述实现中,op的函数签名过长,实际应用中并不现实,而且不能突出这个变量的意义,因此我们可以为这个类型定义一个类型: type IntOperation func(int,int)int 可以理解成为func(int,int)int这个函数签名定义新的名字,当然,我们也可以为基本类型定义新名字: type MyInt int 通过上述方法,我们就可以简化代码为如下形式: type IntOperation func(int,int)int func add(x, y int) int { return x + y } func minus(x, y int) int { return x - y } func calc(x, y int, op IntOperation) int { return op(x, y) } func main() { res := calc(1, 2, add) println(res) } ","date":"2024-11-08","objectID":"/go-basic2/:2:1","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"匿名函数和闭包 函数同样可以作为返回值,在go中不能在函数内部定义函数,因此采用匿名函数来实现,例如: func main() { add := func(x, y int) int { fmt.Println(x+y) } add(1, 2) func (x, y int) int { fmt.Println(x+y) }(1, 2) } 当函数的返回值是一个函数,并且该函数还包含相关引用环境时,我们就称其为闭包,例如: func addr() func(int) int { x := 10 return func(y int) int { x += y return x } } func main() { f := addr() print(f(10)) // 20 print(f(20)) // 40 } ","date":"2024-11-08","objectID":"/go-basic2/:2:2","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"defer语句 defer语句会将其后面跟随的语句进行延迟处理,在defer归属的函数即将返回时,将延迟处理的语句按defer定义的逆序进行执行,也就是说,先被defer的语句最后被执行,最后被defer的语句,最先被执行,例如: func deferDemo() { println(\"Hello\") defer println(\"defer 1\") defer println(\"defer 2\") println(\"World\") } /* Hello World defer 2 defer 1 */ 其执行原理如下图所示: 由于defer语句的这一特性,我们可以在defer后面执行例如资源清理、错误处理、解锁等操作。 ","date":"2024-11-08","objectID":"/go-basic2/:2:3","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"结构体 go中结构体的定义方式如下: type StructName struct { a1 int b1 string ... } 其中: StructName结构体名在同一个包内仅能有一个,不能重复 a1,b1称为字段名,在每个结构体内唯一,不能重复 例如: type person struct { name string age int sex int } 当我们声明了一个结构体后,如何实例化: var p person 或 p := new(person) 或 p := \u0026person{} 后面两种得到的是结构体的指针,但是对于结构体而言,并不需要像C++中需要(*p).name=\"John\"来修改属性,只需要p.name=John就行。 既然变量有匿名变量,结构体也会有匿名结构体: var user = struct {name string, age int}{ \"yizhigopher\", 12, } 上面这段代码不仅展示了匿名结构体的用法,还展示了结构体初始化的一种方式,这种方式通过直接按着结构体属性的顺序赋值即可(需要注意的是,这种方法必须对所有属性都初始化)。 接下来展示其他初始化的方法: var p person p.name = \"yizhigopher\" // 或 p := person{ name: \"yizhigopher\", age: 22, } // 或 p := \u0026person{ name: \"yizhigopher\" } 在go中没有构造函数的说法,需要自己实现构造函数: func newPerson() *person { return \u0026peroson{ name: \"yizhigopher\", age: 12, } } Go中的结构体继承通过匿名结构体来实现,具体如下: //Animal 动物 type Animal struct { name string } //Dog 狗 type Dog struct { Feet int8 *Animal //通过嵌套匿名结构体实现继承 } 其中关于匿名结构体需要注意的几点有: 当访问结构体成员时,会先在结构体中查找该字段,找不到再去嵌套的匿名字段中查找。 嵌套结构体内部可能存在相同的字段名。在这种情况下为了避免歧义需要通过指定具体的内嵌结构体字段名。 除此之外,结构体还有一个究极大杀器,称为结构体标签(Tag)。Tag是结构体的元信息,可以在运行的时候通过反射的机制读取出来。 Tag在结构体字段的后方定义,由一对反引号包裹起来,具体的格式如下: `key1:\"value1\" key2:\"value2\"` 需要注意的是: 结构体tag由一个或多个键值对组成。键与值使用冒号分隔,值用双引号括起来。同一个结构体字段可以设置多个键值对tag,不同的键值对之间使用空格分隔。 为结构体编写Tag时,必须严格遵守键值对的规则=,一旦格式写错,编译和运行时都不会提示任何错误,通过反射也无法正确取值。例如不要在key和value之间添加空格。 我们举个例子来展示tag的能力: //Student 学生 type Student struct { ID int `json:\"id\"` //通过指定tag实现json序列化该字段时的key Gender string //json序列化是默认使用字段名作为key name string //私有不能被json包访问 } func main() { s1 := Student{ ID: 1, Gender: \"男\", name: \"yizhigopher\", } data, err := json.Marshal(s1) if err != nil { fmt.Println(\"json marshal failed!\") return } fmt.Printf(\"json str:%s\\n\", data) //json str:{\"id\":1,\"Gender\":\"男\"} } ","date":"2024-11-08","objectID":"/go-basic2/:3:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"方法 go语言中,方法与OOP中的成员方法类似,是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者self,具体定义的格式如下: func (接受者变量 接受者类型) 方法名(参数列表) (返回参数) { 函数体 } 可以发现,方法和函数之间在表达形式上的区别,就是在函数名前面增加了一段用于申明接受者类型的语句。需要注意的是: 接收者中的参数变量名在命名时,建议使用接收者类型名称首字母的小写,而不是self、this之类的命名。例如,Person类型的接收者变量应该命名为 p,Connector类型的接收者变量应该命名为c等。 接收者类型和参数类似,可以是指针类型和非指针类型。 非本地类型不能定义方法,也就是说我们不能给别的包的类型定义方法。 在Go语言中,接收者的类型可以是任何类型,不仅仅是结构体,任何类型都可以拥有方法。举个例子,我们基于内置的int类型使用type关键字可以定义新的自定义类型,然后为我们的自定义类型添加方法。 type MyInt int func (m MyInt) SayHello() { fmt.Println(\"Hello, 我是一个int。\") } 当接受者类型是指针等引用类型时,方法内对于接受者的修改是直接作用于接受者的。但是如果接受者类型是指类型,那么是作用于接受者copy后的对象。可以通过下属例子体现其中的区别: func (p *Person) SetAge(newAge int8) { p.age = newAge } func (p Person) SetAge2(newAge int8) { p.age = newAge } 我们应当在以下这些情况,使用指针类型接受者: 需要修改接收者中的值 接收者是拷贝代价比较大的大对象 保证一致性,如果有某个方法使用了指针接收者,那么其他的方法也应该使用指针接收者。 ","date":"2024-11-08","objectID":"/go-basic2/:4:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"推荐阅读: Go结构体的内存布局 通过八个demo搞明白Go语言defer的五大特性 Go Tag标签详解 ","date":"2024-11-08","objectID":"/go-basic2/:5:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"上一章节我们已经简单介绍了一个最简单的go程序以及关于变量以及常量的定义。本章节将会继续极少go的基础知识。 ","date":"2024-11-08","objectID":"/go-basic/:0:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"基本运算符 go的基础运算符包含 数值计算:加+,减-,乘*,除/,求余% 逻辑计算:与\u0026\u0026,或||,非! 位运算符号:\u0026,|,^,\u003e\u003e,\u003c\u003c 关系运算符:相等==,不等于!=,大于\u003e,大于等于\u003e=,小于\u003c,小于等于\u003c= ","date":"2024-11-08","objectID":"/go-basic/:1:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"流程控制 ","date":"2024-11-08","objectID":"/go-basic/:2:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"if-else分支结构 if-else分支判断结构如下所示: if 判断1 { 语句1 } else if 判断2{ 语句2 } else { 语句3 } 需要注意的是: 花括号不能换行,必须和if在同一行内 花括号是不可以省略的,即使语句1中只有1个语句 在go中if-else还有一种特殊且常用的写法: func ifDemo() { if score := 65; score \u003e= 90 { fmt.Println(\"A\") } else if score \u003e 75 { fmt.Println(\"B\") } else { fmt.Println(\"C\") } } 我们可以在if表达式之前添加一个执行语句,再根据变量值进行判断,并且这个变量的作用域仅在这段if-else语句中。 ","date":"2024-11-08","objectID":"/go-basic/:2:1","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"循环结构 go中所有的循环均适用for来实现,不会有while以及do-until结构。 for循环的基本结构如下 for 初始语句;终止语句;每步更新内容 { ... } 其中初始语句、终止语句以及每步更新内容都不是必填项。 例如: for i := 0; i\u003c 10; i++ { print(i) } // ----------------------- i := 0 for i \u003c 10 { print(i) i++ } // ----------------------- i := 0 for { if i \u003e= 10 { break } print(i) i += 1 } 以上三种写法均是等价的。 此外还有for-range遍历结构: for k,v := range variable { } 其中variable可以是map,string,slice,array等类型,k表示索引,v表示索引对应的值。 在go1.22版本中对循环结构增加了几个特性。 首先是增加了对整数range的新特性,上述代码也可以这么写: for i := range 10 { print(i) } 此外去除了for-range不在共享循环变量,在go1.16和go1.22两个版本中分别运行一下代码,执行结果会有所不同。 list := []int{1, 2, 3, 4, 5} for _, val := range list { go func() { print(val) }() } 旧版本中for循环迭代器的变量是一个单一变量,在每个循环迭代中仅是取值不同。这样做在性能上非常高效,但如果使用不当,会导致意想不到的行为,可能会造成共享循环变量的问题。而go1.22中,for循环的每次迭代都会创建新变量,每次循环自己迭代自己的变量,以避免意外共享错误。关于这方面的知识可以阅读这篇博客 。 ","date":"2024-11-08","objectID":"/go-basic/:2:2","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"数组与切片 ","date":"2024-11-08","objectID":"/go-basic/:3:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"数组(Array) 数组是同一种数据类型元素的集合。在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。示例如下: var a [3]int // {0, 0, 0} var cities [3]string{\"Shanghai\", \"Beijing\"} // {\"Shanghai\", \"Beijing\", \"\"} var deduce [...]int{1, 2, 3} // 数组大小就是3了 var matrix [2][3]int{ {1, 2, 3}, {4, 5, 6}, } 可以通过如下方式实现数组的遍历: for i := 0; i \u003c len(cities); i++ { print(cities[i]) } for _, val := range cities { print(val) } 需要注意的是,如果在函数中传入一个数组类型的变量,那么仅会copy值到另一个变量中,而不是传递一个引用。 func modifyArray(x [3]int) { x[0] = 100 } func modifyArray2(x [3][2]int) { x[2][0] = 100 } func main() { a := [3]int{10, 20, 30} modifyArray(a) //在modify中修改的是a的副本x fmt.Println(a) //[10 20 30] b := [3][2]int{ {1, 1}, {1, 1}, {1, 1}, } modifyArray2(b) //在modify中修改的是b的副本x fmt.Println(b) //[[1 1] [1 1] [1 1]] } [n]T表示指针数组,[n]T表示数组指针 。 ","date":"2024-11-08","objectID":"/go-basic/:3:1","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"切片(Array) 由于数组长度不可变,我们也希望go中能有个像vector的类型,能够支持可变长度。 切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。 切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。申明切片变量如下: var x []T var a []int{1, 2, 3} var slice = make([]int, 3, 10) // 定义了len==3,cap==10的切片 make函数仅用来初始化slice, map以及chan三种类型的变量 切片拥有自己的长度和容量,我们可以通过使用内置的len()函数求长度,使用内置的cap()函数求切片的容量。 我们也可以在数组上,创建一个切片 var x [5]int{1, 2, 3, 4, 5} b := x[3:5] // 左闭右开。 切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。因此判断切片是否为空,应当如下: if len(s) == 0 { } 而不是s==nil,如果这么比较的话,实际上是在判断指针是否为空。例如: var s1 []int //len(s1)=0;cap(s1)=0;s1==nil s2 := []int{} //len(s2)=0;cap(s2)=0;s2!=nil s3 := make([]int, 0) //len(s3)=0;cap(s3)=0;s3!=nil 由由于切片是指向底层数据的指针,因此如果copy,那么对copy后的变量进行修改,原先的变量也会发生改变,举个例子: package main import \"fmt\" func sliceFunc(s []int, val int) { s[0] = val } func main() { var list = [5]int{1, 2, 3, 4, 5} s1 := list[0:3] s2 := list[:] s3 := s2 sliceFunc(s1, 6) fmt.Println(list) //[6 2 3 4 5] for _, val := range s1 { print(val, \" \") } println() //6 2 3 for _, val := range s2 { print(val, \" \") } println() // 6 2 3 4 5 for _, val := range s3 { print(val, \" \") } println() // 6 2 3 4 5 } 因此,当我们使用切片时,最好遵循所有权的唯一性原则(这在Rust中被纳入语法范围中),即对于内存中的某个数据,同一时刻一个值只能有一个所有者。 既然切片的长度是可变的,那么该如何增加切片的元素呢: func main() { //append()添加元素和切片扩容 var numSlice []int for i := 0; i \u003c 10; i++ { numSlice = append(numSlice, i) fmt.Printf(\"%v len:%d cap:%d ptr:%p\\n\", numSlice, len(numSlice), cap(numSlice), numSlice) } } 使用内置的append函数即可。 需要注意的是,每个切片会指向一个底层数组,这个数组的容量够用就添加新增元素。当底层数组不能容纳新增的元素时,切片就会自动按照一定的策略进行“扩容”,此时该切片指向的底层数组就会更换。“扩容”操作往往发生在append()函数调用时,所以我们通常都需要用原变量接收append函数的返回值。 关于每次扩容对cap修改的策略,可以参考${GOROOT}/src/runtime/slice.go的源码,这里就不过多展开。 ","date":"2024-11-08","objectID":"/go-basic/:3:2","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"字典(map) map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。 var stuMap map[string]int stuMap = make(map[string]int) stuMap[\"Tom\"] = 24 exampleMap := map[string]string{ \"code\": \"23\", \"message\": \"Query success!\", } 思考下[]map[string]int和map[string][]int之间的区别 如何判断某个键是否存在: _, ok := m[key] if !ok{ println(\"key is not existed!\") } 可以通过如下方法删去map中的某个键: delete(m, key) ","date":"2024-11-08","objectID":"/go-basic/:4:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"思考 package main import \"fmt\" func main() { type Map map[string][]int m := make(Map) s := []int{1, 2} s = append(s, 3) fmt.Printf(\"%+v\\n\", s) m[\"q1mi\"] = s s = append(s[:1], s[2:]...) fmt.Printf(\"%+v\\n\", s) fmt.Printf(\"%+v\\n\", m[\"q1mi\"]) } 尝试写出上面这段代码的结果,从而深刻理解本章节所阐述的内容。 ","date":"2024-11-08","objectID":"/go-basic/:5:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"在完成了上个章节的Go编译器安装后,本章节将介绍Go的基础语法,并通过几个例子进行展示。 Hello World 学习每个语言的第一步永远是学会如何在控制台打印😊,现在让我们看一下go如何实现Hello World: // main.go package main import \"fmt\" func main(){ fmt.Println(\"Hello World!\") } 在本文件的目录下,在控制台中执行go build main.go \u0026\u0026 main或go run main.go观察控制台输出的结果。 我们逐行分析说明: 第1行使用package main申明这是一个主包,我们需要在主包下面定义func main()函数,用于声明程序入口。 第3行使用import来导入外部包\"fmt\",该包通常用于实现格式化的I/O操作,这个与C的\u003ccstdio\u003e相似。 第5行使用func main()来申明编译入口以及程序执行的开始位置。 第6行使用fmt.Println(\"Hello World!\")向控制台输出Hello World! 通过上述例子,我们介绍下go语言一个程序所需要的三个部分: 包名。每个go程序都需要申明该程序所属的包,在本章节中,我们所有代码的包名均为main,而对于go的包管理方式,我们将在后续的章节中进行介绍。 导入外部包。想要实现一段代码,不可避免需要调用已经封装好的程序,因此通过import来导入一些必要的外部包,例如本例子中的fmt,以及一些常用的bytes,net等,这些均是已经封装好的标准库。这些标准库的位置在${GOROOT}/src中 函数。go语言函数申明格式为func functionName(args)并用花括号包裹函数体。需要注意的是,不像C++可以将花括号换行,go语言中花括号的换行是不允许换行的,并使用tab进行代码缩进。 接下来我们将介绍go的基本语法 GO基本语法 ","date":"2024-10-30","objectID":"/go-hello/:0:0","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"变量和常量 ","date":"2024-10-30","objectID":"/go-hello/:1:0","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"变量 变量定义如下方式如下: var a int var a int = 10 var a = 10 a := 10 上述为4种不同表达形式的变量申明方式,其中a为变量名,int为变量类型,后两种方式中,go能够自动推理出各个变量的类型。 go的变量名可以用26个英文字母,_以及数字组合而成 数字不能作为变量的起始字符 此外go中存在一些关键字,其具备特殊含义,包含一下25个,这些单词不能作为变量名: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 此外还存在一些保留字,这些同样不建议作为变量名: Constants: true false iota nil Types: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error Functions: make len cap new append copy close delete complex real imag panic recover 如果需要定义多个变量可以如此声明: var ( a int = 19 b bool = true ) 或 var ( a = 10 b = false ) ","date":"2024-10-30","objectID":"/go-hello/:1:1","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"常量定义 与变量定义类似,可以如此定义 const a int = 10 const a = 10 // notice the type of a is 'untyped int' const ( a = 10 b string = \"12a\" ) 需要注意的是,常量的批量定义中,如果没有确定常量的类型,go并不会直接推到出常量的类型,而是untyped ...,关于这个问题可以查看官方文档 ,对于untyped常量会导致的问题,可以查看疑惑: Go const 导致程序结果错乱? ","date":"2024-10-30","objectID":"/go-hello/:1:2","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"多重赋值 这个特点有点像js中的多重赋值,我们可以这么做 x, y, z := 1, 2, 3 这时,x的值为1,y的值就为2,…… 你可以随处使用该方法来实现多重赋值,例如可以用在常量定义中 ","date":"2024-10-30","objectID":"/go-hello/:1:3","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"匿名变量 go中会使用_来表示一个仅用于接收,但不能使用的变量,常用于当我们想要忽略多重赋值中的某个值时。例如: x, _, z := 1, 2, 3 ","date":"2024-10-30","objectID":"/go-hello/:1:4","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"iota iota是go语言的常量计数器,只能在常量的表达式中使用。 iota在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次。使用iota能简化定义,在定义枚举时很有用。例如: const ( a = iota // a = 0 b // b = 1 c // c = 2 ) 或 const ( _ = iota KB = 1\u003c\u003c(10*iota) MB GB ) 可以发现,后续的常量推导,均是依据离这条语句最近的iota表达来推导的。 代码风格 在go的代码中,变量命名的风格通常具有一个约定俗成的规则,这里我将总结一下我遇到的一些规则 对于常量名,一般全部大写,并用_隔开,例如:MAX_CONNECTION。 对于变量名以及函数名,一般采用驼峰风格,例如isHashed。如果需要将这个函数或变量设为public,则将首字母也大写。 当然变量的定义最好能够直观表现其意义,最好别用拼音、无意义的一个字符串来定义一个变量。 ","date":"2024-10-30","objectID":"/go-hello/:1:5","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["Docker"],"content":"为了进行多个容器之间通讯的实验,首先我们需要创建两个服务,分别打包成不同的镜像,并通过docker-compose进行容器编排。本次实验的项目目录如下: ├── client │ ├── dockerfile │ ├── index.html │ └── nginx.conf ├── docker-compose.yml ├── microservice1 │ ├── dockerfile │ ├── main │ └── main.go └── microservice2 ├── dockerfile ├── main └── main.go microservice后端服务定义 我们定义了两个后端服务,其代码如下: // microservice1/main.go package main import ( \"encoding/json\" \"net/http\" ) type Resp struct { Code int Message string } func main() { http.HandleFunc(\"/say_hello\", func(w http.ResponseWriter, r *http.Request) { w.Header().Set(\"Access-Control-Allow-Origin\", \"*\") //允许访问所有域 w.Header().Add(\"Access-Control-Allow-Headers\", \"Content-Type\") //header的类型 w.Header().Set(\"content-type\", \"application/json\") var data Resp if r.Method != \"GET\" { data = Resp{ Code: 4000, Message: \"Only Allow GET Method!\", } } else { data = Resp{ Code: 2000, Message: \"Hello Microservice1\", } } resp, _ := json.Marshal(data) w.Write(resp) }) http.ListenAndServe(\":8080\", nil) } 编译上述代码: GOOS=linux GOARCH=amd64 go build main.go 另一个后端服务代码如下: // microservice2/main.go package main import ( \"encoding/json\" \"net/http\" ) func main() { http.HandleFunc(\"/who_am_i\", func(w http.ResponseWriter, r *http.Request) { w.Header().Set(\"Access-Control-Allow-Origin\", \"*\") //允许访问所有域 w.Header().Add(\"Access-Control-Allow-Headers\", \"Content-Type\") //header的类型 w.Header().Set(\"content-type\", \"application/json\") data := struct{ Code int Message string }{ Code: 2000, Message: \"I am yizhigopher!\", } resp, _ := json.Marshal(data) w.Write(resp) }) http.ListenAndServe(\":8080\", nil) } 使用上述命令编译代码。 并编写容器build脚本,每个后端服务的dockerfile一样: FROM golang:1.23-alpine WORKDIR /app COPY ./main /app/microservice EXPOSE 8080 ENTRYPOINT [\"/app/microservice\"] 前端界面定义 为了直观体现出不同容器之间通讯作用,我们编写了如下前端代码: \u003c!-- client/index.html --\u003e \u003c!DOCTYPE html\u003e \u003chtml lang=\"CH-ZN\"\u003e \u003chead\u003e \u003cmeta charset=\"UTF-8\"\u003e \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e \u003cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"\u003e \u003cscript src=\"https://code.jquery.com/jquery-3.7.1.min.js\"\u003e\u003c/script\u003e \u003c/head\u003e \u003cbody\u003e \u003cbutton onclick=\"say_hello()\" style=\"width:100px; height:20px\"\u003ecall say hello\u003c/button\u003e \u003cbr/\u003e \u003cbutton onclick=\"whoami()\" style=\"width:100px; height:20px\"\u003ecall who am i\u003c/button\u003e \u003c/body\u003e \u003c/html\u003e \u003cscript\u003e function say_hello() { $.ajax({ url: \"http://localhost/api/v1/say_hello\", type: \"GET\", dataType: \"json\", async: true, success: function(res) { console.log(res) }, error: function(param) { console.log(\"fail, error=\", param) } }) } function whoami() { $.ajax({ url: \"http://localhost/api/v2/who_am_i\", type: \"GET\", dataType: \"json\", async: true, success: function(res) { console.log(res) }, error: function(param) { console.log(\"fail, error=\", param) } }) } \u003c/script\u003e 需要注意的是,其中每个接口请求的url为:http://localhost/api/v1/say_hello和http://localhost/api/v2/who_am_i。并编写nginx.conf配置代理: user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] \"$request\" ' '$status $body_bytes_sent \"$http_referer\" ' '\"$http_user_agent\" \"$http_x_forwarded_for\"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; # Server block for handling requests server { listen 80; server_name localhost; # 处理静态文件的请求(如果有) location / { root /fontend; index index.html; } location ^~/api/v1/ { proxy_pass http://router_one:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~/api/v2/ { proxy_pass http://router_two:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } 我们注意到,代理的转发路径分别是http://router_one:8080/和http://router_two:8080/,其中不是IP地址,而是容器名。 容器编排以及通信测试 编写docker-compose.yml编排内容,配置如下: version: '3' services: font_end: image: fontend:v1 build: ./client contai","date":"2024-10-29","objectID":"/docker-connection/:0:0","tags":["docker","go"],"title":"如何实现多个个容器之间的通讯","uri":"/docker-connection/"},{"categories":["golang之路"],"content":"在本节中,我们将首先简单介绍下如何安装Go语言环境,以开启Go语言学习之路!我们将简单介绍在Windows环境,Linux环境以及Mac环境下如何安装,尽可能全面的覆盖不同读者所使用的操作系统。 Go语言下载地址 Windows安装 下载windows环境下的zip文件,解压到系统的某个目录中,在我的系统中,我将其解压到本地D盘目录D:\\Program Files\\Go\\go下。 之后在系统的环境变量中将该目录下的bin目录添加到环境变量中,如图所示: 保存后通过打开终端,输入go version即可判断是否添加到环境变量中 之后需申明GOROOT、GOPATH,并将GOPATH目录下的bin目录添加到环境变量中,便于后续调用go install指令安装的命令。 Linux安装 下载图1中的源码包,删除 /usr/local/go 文件夹(如果存在),删除之前安装的 Go,然后将刚刚下载的压缩包解压缩到/usr/local,在 /usr/local/go 中创建一个全新的 GOROOT rm -rf /usr/local/go \u0026\u0026 tar -C /usr/local -xzf go1.23.2.linux-amd64.tar.gz 在PATH环境变量中添加/usr/local/go/bin,在$HOME/.profile或/etc/profile(用于全系统安装)中添加以下一行即可: export GOROOT=/usr/local/go export GOPATH=/data/go export PATH=$GOPATH/bin:$GOROOT/bin:$PATH 之后使用命令source $HOME/.profile激活环境变量配置即可。 Mac安装 安装图1中的.pkg安装文件即可 执行以下命令: cd ~ vim .bash_profile 编辑用户环境变量: export GOPATH=/Users/XXX/go #本地创建的gopath绝对路径 export PATH=$PATH:$GOPATH/bin 激活配置文件source ~/.bash_profile即可。 额外的注意点: 需要注意的是,GOPATH目录下需要创建三个文件夹,分别是src、pkg以及bin,其中bin目录保存go install安装的指令,pkg保存第三方包的源码,src用于在GO111MODULE=off时,在该路径下编写包含第三方包的程序(现在基本不在src下写代码了) 之后我们需要覆写go的几个配置: go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct GO111MODULE是Go语言用于管理依赖关系的一种机制,它可以帮助开发者更好地管理项目的依赖包,并且可以确保项目在不同环境下的一致性 GOPROXY表示Go安装第三方包的代理(因为国内众所周知的原因),便于后续直接go get安装第三方包 至此,go的安装已经完成了 ","date":"2024-10-08","objectID":"/go-install/:0:0","tags":["golang","study"],"title":"Go语言环境安装","uri":"/go-install/"},{"categories":null,"content":"归一化流基本内容 什么是标准化流:基于一系列可逆变换,生成样本对应的分布 标准化流的基本原理: 变量替换:$p_x(x)=p_z(f_\\theta(x))|\\det J_{f_\\theta}(x)|$,我们可以理解为通过$z=f_\\theta(x)$,将原先复杂分布,变换成简单易懂的分布形式,其中我们要求$f_\\theta$必须是可逆变换。标准化流的目的就是求得该可逆变换。 在标准化流中,往往会使用多个这样的可逆变换,即$f_\\theta(x)=f_1(x)\\circ f_2(x)…\\circ f_K(x)$ 雅各比行列式求解: $$ \\det J_{f_\\theta}(x)=\\det \\prod_{i=1}^K J_{f_i}(x)=\\prod_{i=1}^K\\det J_{f_i}(x) $$ 利用对数函数,我们可以得到: $$ \\log p_x(x)=\\log p_z(f_{\\theta}(x))+\\sum_{i=1}^K\\log |det J_{f_i}(x)| $$ 我们需要最大化这个概率密度 ","date":"2024-01-06","objectID":"/nf-introduce/:0:1","tags":null,"title":"Normalizing Flow介绍","uri":"/nf-introduce/"},{"categories":null,"content":"论文《A deep generative model for probabilistic energy forecasting in power systems: normalizing flows》的应用: 在该论文中,作者采用标准化流的方式实现了负荷预测功能。作者利用$\\bm x$表示d-1天的负荷数据,用$\\bm c$表示天气信息,希望能够得到符合符合数据分布的分布$p_\\theta(\\bm x|\\bm c)$,从而可以利用该分布得到预测数据$^{\\bm x}$。 在利用归一化流方式对泰迪比赛数据进行负荷预测的尝试中,会进行如下操作: 提取时间数据和天气数据,重新整合原本数据格式,得到归一化流的模型输入格式 其中每一行为某个时刻的负荷数据y和影响负荷的因素(时间因素、天气因素)x。根据日期重新排列数据x,将每个时刻影响负荷的因素横向排列并组合。此时x重新排列为一个$day\\times 960$的矩阵,表现如下: ","date":"2024-01-06","objectID":"/nf-introduce/:0:2","tags":null,"title":"Normalizing Flow介绍","uri":"/nf-introduce/"},{"categories":["cuda"],"content":"创建实例 在阿里云平台上创建实例: 其中我们镜像选择为公共的Ubuntu20.04镜像,当然你也可以选择其他配置好的镜像从而简化之后的步骤。 我们之后会演示如何在一个空白的系统中,安装python、cuda以及pytorch的环境 配置好以上信息之后,我们就能获得一个实例,点击实例操作里的打开即可连接远程主机,之后我们会在这个实力上安装一些新的东西,配置我们需要的环境。 ","date":"2023-12-14","objectID":"/install/:0:1","tags":["cuda","安装教程"],"title":"阿里云PAI平台搭建pytorch-cuda11.4环境","uri":"/install/"},{"categories":["cuda"],"content":"安装基本环境 更新apt源 apt-get update 安装python 十分简单: apt-get install python3 apt-get install python3-venv apt-get install python3-pip 安装完成之后,可以执行 python3 --version 安装cuda所需环境 控制台敲入nvidia-smi获得GPU信息,可以我们所需cuda的版本是11.4 安装libxml2 apt-get install libxml2 配置好时区信息即可 安装gcc环境: apt-get install gcc-7 g++-7 配置gcc版本优先级,不然cuda无法识别到安装好的gcc update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/gcov gcov /usr/bin/gcov-7 update-alternatives --config gcc 敲入gcc --version出现如下信息即可: 安装wget和vim apt-get install wget apt-get install vim 安装cuda 到nvidia官网上找到对应cuda驱动下载信息:如图选择即可 在当前目录下创建一个cuda-installer目录,进入该目录,执行installer中的命令: wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run sh cuda_11.4.0_470.42.01_linux.run 敲入accpet同意协议,在之后的配置中选择如下配置: 安装即可,同时按照给出的提示: 修改/etc/profile文件,设置环境变量。使用vim /etc/profile在文末添加如下信息: export CUDA_HOME=/usr/local/cuda-11.4 export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda-11.4/bin:$PATH 重起实例,执行nvcc -V出现: 即可。 至此cuda安装完毕 安装Torch 去官网上,找到对应版本执行一下命令即可 pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu113 ","date":"2023-12-14","objectID":"/install/:0:2","tags":["cuda","安装教程"],"title":"阿里云PAI平台搭建pytorch-cuda11.4环境","uri":"/install/"},{"categories":["golang小技巧"],"content":"简介 我们能在go代码中添加一段注释,用来表示一种编译约束 //go:build [tags] 通过这个并且配合go build -tags=\"...\"的方式,就能实现带有约束的编译。 举个例子: 我们编写一下代码:主程序申明如下 //main.go package main var configArr []string func main(){ for _, v := range configArr { print(v, \" \") } } 同时,我们会编写另外两个用于初始化的代码,分别为dev和test //go:build dev package main func init() { configArr = append(configArr, \"dev\") } //go:build test package main func init() { configArr = append(configArr, \"test\") } 我们可以看到,在两个同一包下,我们定义了两个不同的初始化功能,分别为configArr添加相应的内容。 当我们采用不同方式编译代码时,会看到如下情况: 能够看到编译时携带的tag不同,结果也就不同。 我们可以很直观的想到可以通过这种方法,实现不同模式下的编译 ","date":"2023-12-04","objectID":"/tips-1/:0:1","tags":["golang","tips"],"title":"go语言小技巧--编译约束","uri":"/tips-1/"},{"categories":["golang小技巧"],"content":"环境设置 当然我们也可以通过添加//go:build linux的方式对本段代码进行编译环境的限制。 例如我们对上述代码的go:build注释进行修改,可以看到如下效果: //go:build linux package main func init() { configArr = append(configArr, \"dev\") } //go:build windows package main func init() { configArr = append(configArr, \"test\") } 这时,我们直接进行代码编译,能够看到如下效果: 可以看到,我们只将test部分的代码编译,而dev的代码并没有编译 ","date":"2023-12-04","objectID":"/tips-1/:0:2","tags":["golang","tips"],"title":"go语言小技巧--编译约束","uri":"/tips-1/"},{"categories":["golang小技巧"],"content":"格式 举个例子:// go:build linux \u0026\u0026 amd64 \u0026\u0026 !cgo || darwin,通过这个我们就能发现,可以通过逻辑运算符来表明编译约束。 ","date":"2023-12-04","objectID":"/tips-1/:0:3","tags":["golang","tips"],"title":"go语言小技巧--编译约束","uri":"/tips-1/"},{"categories":["Docker"],"content":"如何运行容器 在之前的几篇文章中,我们学习了如何使用docker的指令以及如何进行容器打包,接下来我们就需要了解,该如何运行容器。 最简单的方式: 使用docker run或docker start指令来运行镜像或容器 但是这种方式在面对需要进行容器的端口映射、镜像卷以及容器间的网络通信时,会比较麻烦,不易操作。 同时,如果某个容器额外需要依赖另一个容器的存在,即容器之间存在关联的关系时,容器的启动顺序就比较重要了。举个简单的例子,我们手头有个web服务容器,这个容器需要依赖另一个MySQL容器的存在,这时,我们就需要先在web服务容器运行前,先运行MySQL容器。也许你会认为这种情况下,容器的先后顺序并不会对你造成困扰,但是如果容器数量多了怎么办,容器运行的相关参数特别多怎么办。亦或者经过了较长时间,你忘记了这个依赖关系怎么办? 这时候我们就需要有一个工具来管理容器运行的相关参数以及依赖关系。 ","date":"2023-11-30","objectID":"/docker-run/:0:1","tags":null,"title":"容器运行方式","uri":"/docker-run/"},{"categories":["Docker"],"content":"docker-compose工具 如何安装 Windows环境下,因为docker-desktop自带docker-compose,所以不需要关注如何安装 Linux环境下,访问docker-compose的下载地址Releases · docker/compose (github.com) ,选择适合系统的以及相应架构的可运行程序。运行sudo chmod +x docker-compose赋予其可运行能力,让后将该可执行文件放入环境变量的目录下即可 编写docker-compose.yml文件 当我们已经将容器打包完成之后,我们可以编写docker-compose.yml文件,从而能够运行容器。 我们举个简单的例子:在这个例子中,我们只需要申明其镜像卷的挂载即可 verison: '3' services: cliffwalking: image: demo:v1 container_name: reinforce_learning volumes: - /home/yizhigopher/cliffwalk/ouput:/cliffwalking/output - /home/yizhigopher/cliffwalk/model:/cliffwalking/model 我们只需要在当前docker-compose.yml的目录下,运行docker-compose up就能够运行一个名为reinforce_learning的容器,并且将容器内部的output和model文件夹的内容和容器外部的对应的文件夹相关联. 当然,docker-compose能够识别的关键字不止以上这些内容,我们可以通过访问Docker Compose overview | Docker Docs 以及菜鸟教程Docker Compose | 菜鸟教程 (runoob.com) 获得相关的更多信息.以上只是一个简单的示例,希望能够通过这些能够让读者一窥docker-compose容器编排的高效以及优越性 ","date":"2023-11-30","objectID":"/docker-run/:0:2","tags":null,"title":"容器运行方式","uri":"/docker-run/"},{"categories":["Docker"],"content":"结语 至此,docker的相关知识基本分享完毕,事实上,仅仅通过短短的三个博文是不能说明白docker的,也不可能就仅仅读这些内容就能掌握docker.这三篇博文,仅仅能够让大家对docker有个基本的了解,以及基本操作的熟悉.想要熟练掌握docker,还需要经过自己大量的实践练习和操作才能真正熟悉. ","date":"2023-11-30","objectID":"/docker-run/:0:3","tags":null,"title":"容器运行方式","uri":"/docker-run/"},{"categories":["Docker"],"content":"基本操作 在上节,我们已经安装好docker,但是就如同写代码一样,我们安装好了相关环境,但是并没有代码能够让我们运行,我们又不会写代码(自己构建镜像),那该怎么办。我们可以到github上面寻找一个相关的代码,拉取到本地,然后运行即可。 所以我们现在首先要做的事应该是学会如何拉取镜像到本地。 docker pull 完整的docker pull命令应该是:docker pull ${IMAGE_NAME}:${IMAGE_TAG} 它会从docker的官方镜像仓库中拉取对应的镜像。其中${IMAGE_TAG}部分如果不写,会默认拉取最新的镜像信息。 例如,我们现在运行docker pull hello-world命令,我们看看会发生什么: 我们能够看到,使用了最新的版本(tag),镜像的sha256验证信息,以及从哪里拉取的镜像。所以之后,如果我们需要某种镜像,我们就可以直接pull以下就可以了。 可以通过访问docker hub 上,搜索你想要的基础镜像的信息即可(这一过程需要科学上网),或者使用docker search ${IMAGE_NAME},实在不行利用bing搜索相关信息也是不错的选择 那么我们拉取完了,我们怎么能够确定这个镜像就是在我的电脑上的呢? docker images 我们在控制台输入docker images看看会发生什么: 我们看到,在我们本地存储中,确确实实有一个来自hello-world,TAG是latest的仓库的镜像。 当然你也可以通过docker inspect ${IMAGE_NAME}查看镜像在本地的哪个位置,但是这么做完全没有必要。 我们已经能够确定确确实实有个镜像在本地,那么我们该如何运行这个镜像呢 docker run 完整的docker run指令如下:docker run [OPTIONS] ${IMAGE_NAME} [COMMAND] [ARG...],这样之后会生成一个容器container 其中options常用的是: -v:绑定容器卷,后面紧跟映射关系,具体而言就是将本地文件和容器内的文件相关联。需要注意的是,两处的文件路径用:隔开,前面是本地文件的绝对路径,后面是容器内的绝对路径。例如:docker run -v /home/yizhigopher/result:/project/result xxx:v1 -d:后台运行容器,使用这个option后,我们就不会看到容器运行的结果,而只能看到一个容器ID -p:端口映射。有些时候,我们需要访问容器内的一些服务,例如MySQL容器,我们需要在本地就能连接容器中的MySQL服务,我们可以这么写:docker run -d -p 8080:3306 mysql,这样我们就是将容器内的3306端口映射到本地的8080端口,我们在本地就可以通过访问8080端口获得MySQL服务。 -i:以交互模式运行容器,通常与 -t 同时使用 -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用 上述就是我们一般常用的OPTIONS信息,我们掌握了这些,基本可以应付大部分情况。如果需要其他的操作可以查阅官方文档,或者baidu。 举个例子:在终端执行docker run -it golang:alpine会发生什么: 需要注意的是我们这个命令相当于启动一个容器并进入容器内部。可以观察到,我们终端的位置发生了变化,从root@yizhigopher进入到了容器内部的/go目录下,由此也能看出docker的容器也可看成是一个小型的操作系统,在带有bash工具的容器内部,也可以执行一些简单的终端命令,例如ls、cd等等 既然我们已经学会了如何拉取镜像,如何启动一个容器,那么我们可以学学如何生成一个镜像。 ","date":"2023-11-14","objectID":"/docker-cmd/:0:1","tags":null,"title":"docker常用命令以及镜像打包","uri":"/docker-cmd/"},{"categories":["Docker"],"content":"dockerfile 要实现自己编制一个镜像,我们就得学会dockerfile文件的编写规则。 当然,由于篇幅,这里仅仅提供一些简单的dockerfile文件编写的介绍,学会了这些也就够了,更多详细的说明都可以查看官方文档。 FROM ${IMAGE_NAME} 每个dockerfile都得以FROM作为开始,我们自己构建镜像,需要在一个镜像的基础上加以创作。就如同我们平时编写代码一样,我们不可能从0101二进制串来编写代码,我们会借助编译器等基础环境来高效编写程序。 FROM ${IMAGE_NAME}的意义十分简单,你可以简答地理解为docker pull ${IMAGE_NAME},我们之后的一切操作都是在这个镜像内部执行的 WORKDIR ${FILE_NAME} 这个是自选的,WORKDIR相当于申明一个工作目录,当你的容器运行时,会默认在这个目录下运行。如果这个目录不存在,会自动帮你创建这个目录 COPY ${FILE_PATH} ${CONTAINER_FILE_PATH} 这个步骤会将本地主机下的${FILE_PATH}的内容拷贝到容器内部${CONTAINER_FILE_PATH}目录下。我们需要注意的是,如果你想拷贝一个文件,那么你需要指明这个文件在容器内部的名字,即:COPY ./requirement.txt /project/req.txt。如果你拷贝的是文件夹,那么你同样需要指明这个文件在容器内部的名称。 联系一下Linux系统下的mv指令,会有许多相同之处 需要注意的是,有一个ADD指令和COPY指令十分相似,执行的功能也大致相同,但是ADD会自动将压缩文件进行解压,而MOVE不行 RUN ${COMMAND} 这个命令会在搭建docker镜像时执行,它会执行${COMMAND}命令,通常我们用这条指令来为镜像内容进行修改。例如,我们为python代码进行打包时,会将python源代码COPY到镜像内部,然后会执行RUN pip install -r requirements.txt来安装相关包从而能够运行python代码 CMD ${COMMAND} 这个部分的命令会在容器启动时执行,需要注意的有几点 你可以写多个CMD,但是只有最后一个CMD会执行 CMD的指令会被docker run附带的运行指令覆盖 COMMND的书写格式应写成字符数组的形式,例如ls -a需写成[\"ls\", \"-a\"] ENTRYPOINT ${COMMAND} 这个指令和CMD指令十分相似,但是有一点不同,ENTRYPOINT不会被docker run后的运行指令覆盖,而是会将docker run后面的参数传递给ENTRYPOINT。具体的示例可看这个博文Docker从入门到精通——CMD与ENTRYPOINT区别 。这里就不再赘述。 ok我们大概介绍完了dockerfile需要了解的地方,现在我们来自己编写个dockerfile试试看吧。随便挑一个文件夹,将所需要的文件内容拷贝到这里,然后在这个文件夹下新建一个dockerfile文件(名字就是dockerfile),文件内容如下: 然后在这个文件夹下打开控制台,输入:docker buuild -t cliffwalk:v1 . docker build表示执行构建镜像 -t表示构建的镜像名和镜像tag为cliffwalk:v1 最后的 . 表示使用当前目录下的dockerfile 会出现: 当指令结束后,我们使用docker images就可以看到构建好的镜像信息 由于我们最后使用的是CMD来表示容器运行的指令,所以,我们可以通过docker run的方式来覆盖这条指令来进入容器内部,我们能够看到在/cliffwalking目录下,有我们COPY进去的文件内容: 至此,我们完成了docker的基本命令和镜像打包的学习,最后一章我们会介绍如何高效的启动运行容器镜像 ","date":"2023-11-14","objectID":"/docker-cmd/:0:2","tags":null,"title":"docker常用命令以及镜像打包","uri":"/docker-cmd/"},{"categories":["Docker"],"content":"什么是docker docker可以说是一门技术、一种软件,它能够帮助我们将程序进行打包,从而方便后续的项目部署以及维护。 ","date":"2023-11-14","objectID":"/docker-introduce/:0:1","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Docker"],"content":"为什么要用docker 场景:做项目开发的同学经常会遇到一个问题,就是这个项目能够在本地上运行,但是换一台电脑却会报各种各样的错误,这个时候不得不面对环境配置这一极其麻烦的问题 所以我们说,docker将过去的程序和系统环境的绑定关系给打破了,只要我们的电脑安装了docker,我就可以通过拉取云端的镜像,无需关注环境的搭建就可以实现跨平台的应用部署。我们不再需要面对繁杂的应用上云出现的环境搭建问题,就可以轻松地使用服务。 ","date":"2023-11-14","objectID":"/docker-introduce/:0:2","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Docker"],"content":"怎样安装docker 安装docker: Windows系统: 在Windows系统,我们需要确保自己的电脑安装了WSL 以管理员身份打开CMD,并敲入: wsl --install 官方文档:安装 WSL | Microsoft Learn ,可查阅官方文档获得更多的信息。 之后我们前往docker-desktop官方网站Docker Desktop: The #1 Containerization Tool for Developers | Docker 下载最新的docker-desktop即可。 需要注意的是,在使用安装好的docker-desktop之前,我们需要修改几个配置 调整docker虚拟机的位置,不然根据初始设置,会把C盘占满 修改docker的镜像源信息,不然在docker pull拉取镜像时,会特别慢: 将其中的内容替换成下述信息: { \"builder\": { \"gc\": { \"defaultKeepStorage\": \"20GB\", \"enabled\": true } }, \"experimental\": false, \"features\": { \"buildkit\": true }, \"registry-mirrors\": [ \"http://hub-mirror.c.163.com\", \"https://mirror.ccs.tencentyun.com\" ] } 或者直接修改C:\\Users\\{{ USERNAME }}\\.docker\\daemon.json内容为上述信息,重启docker。 判断是否安装成功,在CMD中,敲入: docker version 出现如下信息即可: docker之所以需要在Linux环境下使用,是源于在使用go进行编写docker时,需要借助Linux系统的Namespace和Cgroup隔离机制,所以我们在Windows上运行docker实质上是在Windows上安装了一个虚拟机WSL,在虚拟机的内部执行docker Ubuntu系统: 更新索引:sudo apt-get update 安装:sudo apt install docker.io 修改镜像源:在/etc/docker目录下创建daemon.json,在里面添加: { \"registry-mirrors\": [ \"http://hub-mirror.c.163.com\", \"https://mirror.ccs.tencentyun.com\" ] } 即可 判断是否安装成功,在终端输入:docker --version,出现 即可 CentOS/aliyun服务器: 卸载旧版(如果你之前没有安装过,可跳过这一步) yum remove docker \\ docker-client \\ docker-client-latest \\ docker-common \\ docker-latest \\ docker-latest-logrotate \\ docker-logrotate \\ docker-engine 安装依赖包:yum install -y yum-utils 为了防止是从国外的源下载,所以配置阿里云地址:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新依赖:yum update 安装docker:yum install docker-ce docker-ce-cli containerd.io 配置docker镜像源:同样的在/etc/docker目录下创建daemon.json文件,填入镜像源地址信息即可。 启动docker服务:systemctl start docker 判断是否安装完成:控制台输入docker info,看到镜像源信息更改即为安装成功 当然你可以也可以在其他平台上使用docker info来判断镜像源的地址信息是否成功修改 ","date":"2023-11-14","objectID":"/docker-introduce/:0:3","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Docker"],"content":"一些最基本的概念 仓库Registry:你可以理解为类似代码仓库的东西,只是这里面存放的不是一段段代码,而是一堆镜像,我们可以通过一些指令来获得或上传镜像信息。 镜像Image:它是一种模板,具有创建docker容器的指令。并且一种镜像是得基于另一种镜像才能构建。我们可以把这个理解为虚拟机安装所需的iso文件,只要我有这个iso文件,我就可以打造多个一样的虚拟机环境。当然我们还可以在这个iso的基础上附带一些东西,构成一个新的iso。例如centos分为minimal(最基础的)以及desktop(带有桌面UI的),desktop就是基于minimal,同时又添加了新的东西形成的新的iso文件。 容器Container:它是一种运行实例,每个容器之间是相互隔离互不影响的。同样的,我们举个例子,当你拥有一个iso文件时,你不把它放在VMware中产生一个虚拟机实例,那么这个iso文件也就毫无用处。而你使用同一个iso文件创建的不同虚拟机之间也是不会有任何影响,你不会发现,在A虚拟机中创建了一个文件,B虚拟机中也可以找到。 如果上述的例子还是不能让你理解这三者之间的关系和实际的作用,我们可以拿日常开发做一个例子。仓库Registry就是github.com;镜像就是github.com中的pytorch项目代码,我们可以利用pytorch本身的东西创建一个新的例如predict的项目代码,当然我们也可以上传到github;容器就相当于我们执行这段代码的进程,每个进程之间不会相互影响(不考虑使用共享内存,管道等方式实现进程间的控制)。 ","date":"2023-11-14","objectID":"/docker-introduce/:0:4","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Docker"],"content":"总结 在这一章中,我们大概介绍了docker的一些基本信息和安装方式,在下一章我们会在ubuntu系统上介绍docker的基本操作。 ","date":"2023-11-14","objectID":"/docker-introduce/:0:5","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Hugo"],"content":"为什么要用Action来实现自动化部署hugo项目 不采用自动化部署,每次更新项目时,都需要在本地编译,然后上传整个public目录,比较麻烦 不采用自动化部署,没办法管理博客内容以及维护 ","date":"2023-11-12","objectID":"/workflow/:0:1","tags":["github","自动化部署"],"title":"如何利用GitHub的Action实现hugo项目自动化部署","uri":"/workflow/"},{"categories":["Hugo"],"content":"怎样实现 在github上创建 {{ username }}.github.io仓库,在main分支的基础上,新建source分支用于存放hugo的markdown文件,而main分支用于存放编译好后的文件 前期准备: 在本地,使用ssh工具创建公私钥 ssh-keygen -t rsa -N '' -f ./deploy-key -q 在本地我们会得到deploy-key和deploy-key.pub两个文件 现在需要将ssh密钥信息设置到仓库中: 添加deploy-key信息 deploy key的title随便填写即可,我们将生成的deploy-key.pub(即公钥)的内容填到key中 设置action的密钥: 新建一个actions secret 其中Name的内容填为ACTIONS_DEPLOY_KEY,Secret的内容填为我们生成的deploy-key(即私钥)的内容。 在source分支中添加.github/workflows/main.yml文件,用于定义Github Actions,其中main.yaml文件内容为 name: auto-update-page # 定义action名称 on: push: branches: - source # 当source分支出现push行为时,执行这个action jobs: deploy: runs-on: ubuntu-22.04 # 定义环境以及之后的行为 steps: - uses: actions/checkout@v4 with: submodules: true # Fetch Hugo themes (true OR recursive) fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: \"0.120.3\" extended: true - name: Build run: hugo --minify - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} publish_dir: ./public external_repository: plutolove233/plutolove233.github.io publish_branch: main # 将编译好的public里面的内容部署到对应仓库的分支上 设置完之后,我们查看仓库的Actions,我们能够看到: 看到如上内容,就意味着我们自动化部署的工作流完成了,我们可以尝试修改部分markdown文件,上传之后我们可以看到我们的博客内容也会发生改变 ","date":"2023-11-12","objectID":"/workflow/:0:2","tags":["github","自动化部署"],"title":"如何利用GitHub的Action实现hugo项目自动化部署","uri":"/workflow/"},{"categories":["机器学习之路"],"content":"问题描述 给定一个4×12的网格环境,如下图所示,其中黄色区域表示悬崖,我们不能经过,蓝色是我们的目标区域,我们希望能求出每个状态如何利用最少的步骤到达目的点。 ","date":"2023-11-10","objectID":"/cliffwalking/:0:1","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"编写工具类代码 # rl_utils.py def one_hot(index, num_size=10): return [1 if i == index else 0 for i in range(num_size)] class ReplayBuffer: def __init__(self, capacity): self.buffer = collections.deque(maxlen=capacity) def add(self, state, action, reward, next_state, done): self.buffer.append((state, action, reward, next_state, done)) def sample(self, batch_size): transitions = random.sample(self.buffer, batch_size) state, action, reward, next_state, done = zip(*transitions) return np.array(state), action, reward, np.array(next_state), done def size(self): return len(self.buffer) def train_off_policy_agent(env, agent, num_episodes, replay_buffer, minimal_size, batch_size): return_list = [] for i in range(10): with tqdm(total=int(num_episodes / 10), desc='Iteration %d' % i) as pbar: for i_episode in range(int(num_episodes / 10)): episode_return = 0 state = env.reset()[0] done = False while not done: action = agent.take_action(state) next_state, reward, done, _, _ = env.step(action) replay_buffer.add(state, action, reward, next_state, done) state = next_state episode_return += reward if replay_buffer.size() \u003e minimal_size: b_s, b_a, b_r, b_ns, b_d = replay_buffer.sample(batch_size) transition_dict = {'states': b_s, 'actions': b_a, 'next_states': b_ns, 'rewards': b_r, 'dones': b_d} agent.update(transition_dict) return_list.append(episode_return) if (i_episode + 1) % 10 == 0: pbar.set_postfix({'episode': '%d' % (num_episodes / 10 * i + i_episode + 1), 'return': '%.3f' % np.mean(return_list[-10:])}) pbar.update(1) return return_list ","date":"2023-11-10","objectID":"/cliffwalking/:0:2","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"制定规则 我们规定,每走一步所得的reward是-1,走进悬崖的reward是-100,到达目标地点的reward是100。 我们编写环境代码如下: # grid_world.py class GridWorld: \"\"\" 悬崖问题的环境建立 \"\"\" def __init__(self, row=4, col=12): self.action_num = 4 self.col = col self.row = row self.x = row - 1 self.y = 0 self.statue_dim = self.row*self.col self.action_dim = 4 def step(self, action) -\u003e (list, float, bool, bool, dict): action = int(action) # 假设一个3*3的情景,目的是中间方块,求最短距离 self.x = min(self.row - 1, max(0, self.x + change[action][0])) self.y = min(self.col - 1, max(0, self.y + change[action][1])) next_state = self.x * self.col + self.y reward = -1 done = False if self.x == self.row - 1 and self.y \u003e 0: done = True if self.y != self.col - 1: # enter into hole reward = -100 else: # reach the final reward = 100 nextState = np.array(rl.one_hot(next_state, num_size=self.row * self.col)) return nextState, reward, done, False, {} def reset(self) -\u003e (list, dict): self.x = self.row - 1 self.y = 0 label = self.x * self.col + self.y state = np.array(rl.one_hot(label, num_size=self.row * self.col)) return state, {} 在上述代码中,我们实现了环境的定义,同时,我们注意到,我们返回的状态采用了独热编码,这也就意味着,之后我们构建网络时,输入的维度应该是48。 ","date":"2023-11-10","objectID":"/cliffwalking/:0:3","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"编写神经网络用来拟合QSA target 我们需要知道,这个网络的输入是48,输出应该是action个数。 # grid_world.py class CliffWalkNet(nn.Module): \"\"\" 悬崖问题神经网络构造 \"\"\" def __init__(self, in_dim, hidden_dim, out_dim): super(CliffWalkNet, self).__init__() self.layer = nn.Sequential( nn.Linear(in_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, out_dim) ) def forward(self, x): return self.layer(x) 在里面使用三个全连接层,以及两个隐藏层。 ","date":"2023-11-10","objectID":"/cliffwalking/:0:4","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"编写DQN核心代码 我们每个动作采用ε贪婪策略,以及规定每次操作执行的更新方法 class CliffWalkDQLearning: def __init__(self, in_dim, hidden_dim, action_dim): self.ActionNumber = action_dim self.Q_net = CliffWalkNet(in_dim, hidden_dim, action_dim).to(device) self.Q_target = CliffWalkNet(in_dim, hidden_dim, action_dim).to(device) self.optimizer = torch.optim.Adam(self.Q_net.parameters(), lr=learning_rate) self.criterion = nn.MSELoss() self.count = 0 self.QSA = [[0, 0, 0, 0] for _ in range(in_dim)] def take_action(self, state): if np.random.random() \u003c epsilon: return np.random.randint(self.ActionNumber) state = torch.tensor(state, dtype=torch.float).to(device) return self.Q_net(state).argmax().item() def update(self, transition: dict): # load data from dictionary states_ = torch.tensor(transition.get(\"states\"), dtype=torch.float).to(device) actions_ = torch.tensor(transition.get(\"actions\")).view(-1, 1).to(device) rewards_ = torch.tensor(transition.get(\"rewards\"), dtype=torch.float).view(-1, 1).to(device) next_states_ = torch.tensor(transition.get(\"next_states\"), dtype=torch.float).to(device) dones_ = torch.tensor(transition.get(\"dones\"), dtype=torch.float).view(-1, 1).to(device) q_values = self.Q_net(states_).gather(1, actions_) # 每列收集对应actions_拟合的value值 max_qvalue = self.Q_target(next_states_).max(1)[0].view(-1, 1) q_target = rewards_ + gamma * max_qvalue * (1-dones_) loss = self.criterion(q_values, q_target) self.optimizer.zero_grad() loss.backward() self.optimizer.step() if self.count % update_times == 0: net_state_dict = self.Q_net.state_dict() self.Q_target.load_state_dict(net_state_dict) self.count += 1 ","date":"2023-11-10","objectID":"/cliffwalking/:0:5","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"执行代码,进行模型训练 我们可以直接利用rl_utils里面的(off_policy)工具,进行DQN的训练 env = GridWorld() dim = env.row*env.col agent = CliffWalkDQLearning(in_dim=dim, hidden_dim=int(dim/2), action_dim=4) buffer = rl.ReplayBuffer(1000) random.seed(0) np.random.seed(0) torch.manual_seed(0) return_list = rl.train_off_policy_agent(env, agent, num_episodes, buffer, minimal_size, batch_size) episodes_list = list(range(len(return_list))) plt.plot(episodes_list, return_list) plt.xlabel('Episodes') plt.ylabel('Returns') plt.title('DQN on {}'.format(\"Cliff Walking\")) plt.show() ","date":"2023-11-10","objectID":"/cliffwalking/:0:6","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"模型保存 torch.save({\"CliffWalking\": agent.Q_target.state_dict()}, \"./cliff_walking.pth\") # load model model = CliffWalkNet(in_dim=dim, hidden_dim=int(dim/2), out_dim=4).to(device) state_dict = torch.load(\"./cliff_walking.pth\")[\"CliffWalking\"] model.load_state_dict(state_dict) res = [[0, 0, 0, 0] for _ in range(dim)] for i in range(4): for j in range(12): state = rl.one_hot(i*12+j, dim) input_ = torch.tensor(state, dtype=torch.float).to(device) target = model(input_).cpu().detach().numpy().tolist() res[i*12+j] = target # print(\"state(%d,%d):\" % (i, j)) # print(target) # print() print_agent(res, env, action_graph, list(range(37, 47)), [47]) 我们将训练好的模型保存,之后导入model,这样我们就可以避免重复的模型训练,直接计算每个结点的QSA,寻找每个状态的action最大值,从而得出训练后的策略结果。 由上述结果,我们发现每个状态都已经找到了最优的策略,这个模型的结果还算可以。 ","date":"2023-11-10","objectID":"/cliffwalking/:0:7","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"基本概念: 对于强化学习,我们一般会分成智能体(agent),环境(通过智能体的状态和动作反馈信息)两大部分,我们现在介绍一些名词,从而有利于之后学习的理解。在这一部分,我们会结合一个3×3的网格寻路来形象化介绍下述概念。 我们最初位置是在(1,1),我们希望能够在最短的时间内到达蓝色网格位置。 State:agent相对于environment的状态。例如以s1表示网格(1,1),s9表示网格(3,3)。所有的状态会构成S(State Set)。 Action:每个状态可能采取的行动。例如向上(a1)、下(a3)、左(a4)、右(a2)走,这所有的动作会构成A(Action Set)。 state transition:agent从s1→s4的过程。 state transition probability:用条件概率的形式,表示转移的情况。例如p(s4|s1, a3)=0.5表示从状态s1执行动作a3(向下)到达状态s4的可能性是0.5(因为还可以向右到达s2的可能)。 Reward:一个数字,用于表示一个state transition行为所产生的激励。 forbidden area:进入但是会产生损失的区域(Reward\u003c0)。例如图示中的黄色区域。 Policy:让agent知道在某个状态该如何行动,也是用条件概率的形式来表示,例如π(a1|s1)=0,π(a2|s1)=0.5。同时我们应该还满足下述条件: $$ \\sum_{a\\in A}\\pi(a|s_j) = 1 $$ Trajectory:是整个状态行为链,例如s1(a2)→s2(a3)→s5(a3)→s8(a2)→s9(a4)→s8… Return:表示整个Trajectory上Reward之和 Discounted Rate:由上可知,一个Trajectory可能是无穷无尽的,所以我们需要定义γ来种折扣Reward,从而使整个过程的Return不会太大。 Discounted Return:表示整个Trajectory的折扣回报总和,具体表示为: $$ Discounted\\ Return=\\sum_{i=1}^\\infin \\gamma^{i-1}r_i $$ 我们可以知道,这个结果最终会收敛到一个值。并且γ越小,那么Discounted Return会与最早的reward相关(更近视),γ越大也就越远视 Episode:一个有限步的Trajectory,并且最终状态时terminal state(目标状态,即图中蓝色方块)。 ","date":"2023-11-10","objectID":"/concept/:0:1","tags":["RL","math"],"title":"强化学习数学知识总结","uri":"/concept/"},{"categories":["机器学习之路"],"content":"马尔可夫过程 随机过程 随机过程研究的对象是,随时间改变的随机现象。例如本例子中,时刻1在状态s1,时刻2可能就会在s2获s4。这一过程是随机的,我们通常用 $$ P(s_{t+1}|a_{t+1},s_{t}, a_{t}, s_{t-1}…a_1, s_0) $$ 来表示下一个时刻,状态的可能性 马尔可夫性质 当前状态只与上一个状态有关时,我们称这个过程具有马尔可夫性质,即 $$ P(s_{t+1}|a_{t+1},s_{t}, a_{t}, s_{t-1}…a_1, s_0)=P(s_{t+1}|a_{t+1}, s_t) $$ 在本例子中,每个时刻到达某个网格的状态可能完全取决于上一时刻所在状态和动作,所以我们这个网格寻路的例子是满足马尔可夫性质的。 几个新的概率 $$ P(s’|s, a)表示s\\stackrel{a}{\\longrightarrow}s’即从s执行动作a到达s’的概率\\\\ P(r |s, a)表示s\\stackrel{a}{\\longrightarrow}s’这一过程获得reward=r的概率\\\\ $$ 新的概念 State Value $$ v_{\\pi}(s)=\\mathbb{E}(G_t|S=s)\\\\ $$ 回报矩阵G:表示当前时刻所有状态所获得的discounted return $$ G_t=R_{t+1}+\\gamma G_{t+1} $$ 贝尔曼公式 我们将上述式子进行展开以及归纳,可得贝尔曼公式: $$ \\forall s\\in S,v_{\\pi}(s)=\\mathbb{E}(G_t|S_t=s)=\\mathbb{E}(R_{t+1}|S_t=s)+\\gamma\\mathbb{E}(G_{t+1}|S_t=s)\\\\ =\\sum_{a\\in A}\\pi(a|s)\\sum_rp(r|s,a)r + \\gamma\\sum_{s’}\\mathbb{E}(G_{t+1}|S_{t+1}=s’,S_t=s)P(s’|s)\\\\ =\\sum_{a\\in A}\\pi(a|s)\\sum_rp(r|s,a)r +\\gamma\\sum_{s’}v_{\\pi}(s’)\\sum_{a\\in A}P(s’|s, a)\\pi(a|s) $$ 我们将这个公式化成矩阵的形式 $$ \\mathbf{v_{\\pi}}=\\mathbf{r_{\\pi}}+\\gamma\\mathbf{P_{\\pi}}\\mathbf{v_{\\pi}} $$ 其中: $$ r_{\\pi}(s)=\\sum_{a\\in A}\\pi(a|s)\\sum_rp(r|s,a)r\\\\ P_{\\pi}(s’|s)=\\sum_{a \\in A}p(s’|s,a)\\pi(a|s),即s\\rarr s’的可能性\\\\ \\mathbf{P_{\\pi(i,j)}} = P_{\\pi}(s_j|s_i) $$ 我们该如何求解——求state value 求矩阵的逆 迭代的方式: 先随机设置v0初始值 利用 $$ \\mathbf{v_{k+1}}=\\mathbf{r_{\\pi}}+\\gamma\\mathbf{P_{\\pi}}\\mathbf{v_{k}} $$ 不断进行迭代,当k→∞时,vk→vπ ","date":"2023-11-10","objectID":"/concept/:0:2","tags":["RL","math"],"title":"强化学习数学知识总结","uri":"/concept/"},{"categories":["机器学习之路"],"content":"安装pytorch 我们以英伟达显卡为例,我们需要知道自己电脑对应cuda版本信息: 在控制台输入nvidia-smi我们可以看到对应cuda版本的信息内容: 从上图中,我们可知:当前我们CUDA的版本是11.2,之后我们去pytorch官方网页 查询对应pytorch的版本信息,按照给出的安装命令信息安装即可。 由于pytorch官网并没有cuda11.2的安装方法,所以我选择安装cuda11.1的环境 pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html 我们可以通过一下代码来判断pytorch是否已经正确安装以及识别到显卡驱动 import torch print(torch.cuda.is_available()) print(torch.cuda.current_device()) print(torch.cuda.device_count()) print(torch.cuda.get_device_name(0)) 执行结果如下: ","date":"2023-11-09","objectID":"/linear/:0:1","tags":["pytorch","mechine learning"],"title":"pytorch实现线性拟合","uri":"/linear/"},{"categories":["机器学习之路"],"content":"编写代码 现在我们可以进行代码编写过程了 构造数据集,我们假设拟合的结果是 $$ y=w_1\\times x_1 + w_2\\times x_2 + b\\\\ 即y=\\begin{bmatrix} w_1 \u0026 w_2 \\\\ \\end{bmatrix} \\begin{bmatrix} x_1\\\\ x_2\\\\ \\end{bmatrix}+b $$ 为了能够体现机器学习拟合的有效性,我们在生成数据点时会增加一些噪声,从而体现出数据的混乱 代码实现: def synthetic_data(w, b, num_examples): \"\"\"生成 y = Xw + b + 噪声。\"\"\" X = torch.normal(0, 1, (num_examples, len(w))) # X是均值为0,方差为1的随机数。有num_examples个样本,列就是len(w) y = torch.matmul(X, w) + b # Y是X与w的乘积(matmul == mm,矩阵相乘)加上偏差b y += torch.normal(0, 0.01, y.shape) # 加入一个噪音,均值为0,方差为0.01,形状与y相同 return X, y.reshape((-1, 1)) # 其中,y返回一个列向量。-1表示自动计算,1表示固定,即列向量为1 true_w = torch.tensor([2, -3.4]) true_b = 4.2 features, labels = synthetic_data(true_w, true_b, 1000) 我们可以绘制图像,用于显示我们构造的数据: 然后我们将数据进行封装成Dataset class LinearDataSet(Dataset): def __init__(self, x, y): self.X = torch.FloatTensor(x) self.Y = torch.FloatTensor(y) def __getitem__(self, index): return self.X[index], self.Y[index] def __len__(self): return len(self.X) trainSet = LinearDataSet(features, labels) trainLoader = DataLoader(trainSet, batch_size=10, shuffle=True, pin_memory=True) 我们现在编写网络,以及编写一个训练过程: class LinearNetWork(nn.Module): def __init__(self, n_feature): super(LinearNetWork, self).__init__() self.layers = nn.Sequential( nn.Linear(n_feature, 1) # 定义一个最简单线性全连接层 ) def forward(self, x): y = self.layers(x) return y def Trainer(train_loader: DataLoader, model: LinearNetWork): criterion = nn.MSELoss() # 定义一个均方误差 optimizer = torch.optim.SGD(model.parameters(), lr=0.03) # 定义一个优化器 for i in range(epoch): model.train() for x, y in train_loader: optimizer.zero_grad() # 采用梯度下降,每次训练都需要将梯度信息清零 x, y = x.to(device), y.to(device) pred = model(x) loss = criterion(pred, y) print(\"loss=\", loss.detach().item()) loss.backward() # 梯度回退 optimizer.step() model = LinearNetWork(2).to(device) # 因为我们总共就两个变量,所以我们传入的特征信息为2 Trainer(trainLoader, model) print(model.state_dict()) 这样我们一个最简单的神经网络已经构成,我们执行上述代码查看网络每层的信息: ","date":"2023-11-09","objectID":"/linear/:0:2","tags":["pytorch","mechine learning"],"title":"pytorch实现线性拟合","uri":"/linear/"},{"categories":["机器学习之路"],"content":"总结 总的来说,这次这个任务还是比较简单的,我们构造一个简单的神经网络,完成了最简单的线性拟合的问题,我们可以在这里面一窥机器学习的基本过程。我们需要获取数据、数据处理、构造网络、进行训练、调整参数,然后不断循环往复,从而得到一个加好的结果。 ","date":"2023-11-09","objectID":"/linear/:0:3","tags":["pytorch","mechine learning"],"title":"pytorch实现线性拟合","uri":"/linear/"},{"categories":null,"content":"个人介绍 出生于2002年6月,喜欢go语言,LOL的蒟蒻。 目前在华北电力大学就读软件工程本科学业。 目前正在学习强化学习,希望能够通过编写个人博客来增加我学习的动力,以及记录我学习的过程。 博客会更新什么 本科以及之后研究生学习的过程和结果 go语言相关的内容,会包括最新特性,以及我觉得有用的东西 docker应用示例,我希望通过几个简短的章节能够让你了解docker如何部署一个项目 或许还会有一些每周心得体会什么的? 我也希望能够有人在阅读我的博客之后,发送email(yizhigopher@163.com)和我交流,希望能够在各位大佬变得更强,无限进步。 ","date":"2023-11-08","objectID":"/about/:0:0","tags":null,"title":"About","uri":"/about/"},{"categories":null,"content":"这是我的第一份博客,用于测试 package main import \"fmt\" func main(){ fmt.Println(\"Hello World\") } $$ \\sum_{i=0}^{100}i = 5050 $$ ","date":"2023-11-08","objectID":"/first_post/:0:0","tags":["hugo"],"title":"First_post","uri":"/first_post/"}] \ No newline at end of file +[{"categories":["vscode插件配置设置"],"content":"在插件中找到Todo Tree,点击设置按钮 找到在settings.json中编辑更多 将上述代码复制到settings.json中即可。 \"todo-tree.regex.regex\": \"((%|#|//|\u003c!--|^\\\\s*\\\\*)\\\\s*($TAGS)|^\\\\s*- \\\\[ \\\\])\", \"todo-tree.regex.regexCaseSensitive\": false, \"todo-tree.general.tags\": [ \"BUG\", \"HACK\", \"FIXME\", \"TODO\", \"todo\", \"bug\", \"tag\", \"done\", \"mark\", \"test\", \"update\", \"[]\", \"[x]\" ], \"todo-tree.highlights.defaultHighlight\": { \"background\": \"#ff9100\", \"foreground\": \"#ffffff\", \"type\": \"text\", \"icon\": \"bug\" }, \"todo-tree.highlights.customHighlight\": { //todo 需要做的功能 \"todo\": { \"icon\": \"alert\", //标签样式 \"background\": \"#c9c552\", //背景色 \"rulerColour\": \"#c9c552\", //外框颜色 \"iconColour\": \"#c9c552\", //标签颜色 }, //bug 必须要修复的BUG \"bug\": { \"background\": \"#ff3737\", \"icon\": \"bug\", \"rulerColour\": \"#eb5c5c\", \"iconColour\": \"#eb5c5c\", }, //tag 标签 \"tag\": { \"background\": \"#38b2f4\", \"icon\": \"tag\", \"rulerColour\": \"#38b2f4\", \"iconColour\": \"#38b2f4\", \"rulerLane\": \"full\" }, //done 已完成 \"done\": { \"background\": \"#328050\", \"icon\": \"check\", \"rulerColour\": \"#5eec95\", \"iconColour\": \"#5eec95\", }, //mark 标记一下 \"mark\": { \"background\": \"#f90\", \"icon\": \"note\", \"rulerColour\": \"#f90\", \"iconColour\": \"#f90\", }, //test 测试代码 \"test\": { \"background\": \"#df7be6\", \"icon\": \"flame\", \"rulerColour\": \"#df7be6\", \"iconColour\": \"#df7be6\", }, //update 优化升级点 \"update\": { \"background\": \"#b14e75\", \"icon\": \"versions\", \"rulerColour\": \"#d65d8e\", \"iconColour\": \"#d65d8e\", }, }, ","date":"2024-01-22","objectID":"/todotree/:0:0","tags":["vscode","extension"],"title":"Todotree插件设置","uri":"/todotree/"},{"categories":["vscode插件配置设置"],"content":"首先你需要按照这个教程 安装好Go环境。 之后在vscode插件商城中,搜寻Go,选择第一个进行安装。 安装好插件后,按下Ctrl+Shift+P快捷键,输入go tool,并安装所有工具。 观察在${GOPATH}/bin目录下是否存在这些工具的可执行文件。 重启vscode,即可。 ","date":"2024-11-10","objectID":"/go/:0:0","tags":["golang"],"title":"vscode Go环境设置","uri":"/go/"},{"categories":["golang之路"],"content":"指针 和C语言一样,Go中也存在指针,一般采用如下方式来获取变量的地址: a := 12 var ptr *int = \u0026a 如果我们想要获取该指针变量指向地址对应的内容时,我们可采用如下方式: fmt.Println(*ptr) *操作符和\u0026操作符分别代表了取值操作和取地址操作。 对于引用类型的变量,在Go中需要注意不仅需要声明,而且需要为其分配内存空间,不然就是对一个空指针进行操作了,具体的例子如下: func main(){ var a *int *a = 100 } 为了修改上述代码,我们可以添加如下操作: func main() { var a *int a = new(int) *a = 100 } new(T)函数能够返回传入类型T的内存地址,并且内存中对应的值为类型的零值。 ","date":"2024-11-08","objectID":"/go-basic2/:1:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"函数 函数的定义方式如下: func 函数名(参数) (返回值) { 函数体 } 其中需要说明的是: 参数由参数变量和参数变量的类型组成,多个参数之间使用,分隔。 如果相邻的参数类型相同,例如a int, b int可以简写为a, b int 如果传入参数数量不确定,可用...T来表示可变参数。例如func (a string, x ...int) 固定参数和可变参数搭配时,可变参数得放在固定参数后面。 可变参数可以是为一个数组 返回值由返回值变量和其变量类型组成,也可以只写返回值的类型,多个返回值必须用()包裹,并用,分隔。 如果返回值部分是由返回值变量和变量类型组成的话,函数体内部可以直接使用这个返回值,并在最后仅使用return来表示返回函数结果 我们定义一个a+b的函数作为示例: func intSum(a int, b int) res int { res = a + b return } int main() { b := intSum(1, 2) // 调用函数 } ","date":"2024-11-08","objectID":"/go-basic2/:2:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"函数类型 在go中,函数作为一等公民,因此可以作为变量进行传输。例如: func add(x, y int) int { return x + y } func minus(x, y int) int { return x - y } func calc(x, y int, op func(int, int)int) int { return op(x, y) } func main() { res := calc(1, 2, add) println(res) } 但是在上述实现中,op的函数签名过长,实际应用中并不现实,而且不能突出这个变量的意义,因此我们可以为这个类型定义一个类型: type IntOperation func(int,int)int 可以理解成为func(int,int)int这个函数签名定义新的名字,当然,我们也可以为基本类型定义新名字: type MyInt int 通过上述方法,我们就可以简化代码为如下形式: type IntOperation func(int,int)int func add(x, y int) int { return x + y } func minus(x, y int) int { return x - y } func calc(x, y int, op IntOperation) int { return op(x, y) } func main() { res := calc(1, 2, add) println(res) } ","date":"2024-11-08","objectID":"/go-basic2/:2:1","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"匿名函数和闭包 函数同样可以作为返回值,在go中不能在函数内部定义函数,因此采用匿名函数来实现,例如: func main() { add := func(x, y int) int { fmt.Println(x+y) } add(1, 2) func (x, y int) int { fmt.Println(x+y) }(1, 2) } 当函数的返回值是一个函数,并且该函数还包含相关引用环境时,我们就称其为闭包,例如: func addr() func(int) int { x := 10 return func(y int) int { x += y return x } } func main() { f := addr() print(f(10)) // 20 print(f(20)) // 40 } ","date":"2024-11-08","objectID":"/go-basic2/:2:2","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"defer语句 defer语句会将其后面跟随的语句进行延迟处理,在defer归属的函数即将返回时,将延迟处理的语句按defer定义的逆序进行执行,也就是说,先被defer的语句最后被执行,最后被defer的语句,最先被执行,例如: func deferDemo() { println(\"Hello\") defer println(\"defer 1\") defer println(\"defer 2\") println(\"World\") } /* Hello World defer 2 defer 1 */ 其执行原理如下图所示: 由于defer语句的这一特性,我们可以在defer后面执行例如资源清理、错误处理、解锁等操作。 ","date":"2024-11-08","objectID":"/go-basic2/:2:3","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"结构体 go中结构体的定义方式如下: type StructName struct { a1 int b1 string ... } 其中: StructName结构体名在同一个包内仅能有一个,不能重复 a1,b1称为字段名,在每个结构体内唯一,不能重复 例如: type person struct { name string age int sex int } 当我们声明了一个结构体后,如何实例化: var p person 或 p := new(person) 或 p := \u0026person{} 后面两种得到的是结构体的指针,但是对于结构体而言,并不需要像C++中需要(*p).name=\"John\"来修改属性,只需要p.name=John就行。 既然变量有匿名变量,结构体也会有匿名结构体: var user = struct {name string, age int}{ \"yizhigopher\", 12, } 上面这段代码不仅展示了匿名结构体的用法,还展示了结构体初始化的一种方式,这种方式通过直接按着结构体属性的顺序赋值即可(需要注意的是,这种方法必须对所有属性都初始化)。 接下来展示其他初始化的方法: var p person p.name = \"yizhigopher\" // 或 p := person{ name: \"yizhigopher\", age: 22, } // 或 p := \u0026person{ name: \"yizhigopher\" } 在go中没有构造函数的说法,需要自己实现构造函数: func newPerson() *person { return \u0026peroson{ name: \"yizhigopher\", age: 12, } } Go中的结构体继承通过匿名结构体来实现,具体如下: //Animal 动物 type Animal struct { name string } //Dog 狗 type Dog struct { Feet int8 *Animal //通过嵌套匿名结构体实现继承 } 其中关于匿名结构体需要注意的几点有: 当访问结构体成员时,会先在结构体中查找该字段,找不到再去嵌套的匿名字段中查找。 嵌套结构体内部可能存在相同的字段名。在这种情况下为了避免歧义需要通过指定具体的内嵌结构体字段名。 除此之外,结构体还有一个究极大杀器,称为结构体标签(Tag)。Tag是结构体的元信息,可以在运行的时候通过反射的机制读取出来。 Tag在结构体字段的后方定义,由一对反引号包裹起来,具体的格式如下: `key1:\"value1\" key2:\"value2\"` 需要注意的是: 结构体tag由一个或多个键值对组成。键与值使用冒号分隔,值用双引号括起来。同一个结构体字段可以设置多个键值对tag,不同的键值对之间使用空格分隔。 为结构体编写Tag时,必须严格遵守键值对的规则=,一旦格式写错,编译和运行时都不会提示任何错误,通过反射也无法正确取值。例如不要在key和value之间添加空格。 我们举个例子来展示tag的能力: //Student 学生 type Student struct { ID int `json:\"id\"` //通过指定tag实现json序列化该字段时的key Gender string //json序列化是默认使用字段名作为key name string //私有不能被json包访问 } func main() { s1 := Student{ ID: 1, Gender: \"男\", name: \"yizhigopher\", } data, err := json.Marshal(s1) if err != nil { fmt.Println(\"json marshal failed!\") return } fmt.Printf(\"json str:%s\\n\", data) //json str:{\"id\":1,\"Gender\":\"男\"} } ","date":"2024-11-08","objectID":"/go-basic2/:3:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"方法 go语言中,方法与OOP中的成员方法类似,是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者self,具体定义的格式如下: func (接受者变量 接受者类型) 方法名(参数列表) (返回参数) { 函数体 } 可以发现,方法和函数之间在表达形式上的区别,就是在函数名前面增加了一段用于申明接受者类型的语句。需要注意的是: 接收者中的参数变量名在命名时,建议使用接收者类型名称首字母的小写,而不是self、this之类的命名。例如,Person类型的接收者变量应该命名为 p,Connector类型的接收者变量应该命名为c等。 接收者类型和参数类似,可以是指针类型和非指针类型。 非本地类型不能定义方法,也就是说我们不能给别的包的类型定义方法。 在Go语言中,接收者的类型可以是任何类型,不仅仅是结构体,任何类型都可以拥有方法。举个例子,我们基于内置的int类型使用type关键字可以定义新的自定义类型,然后为我们的自定义类型添加方法。 type MyInt int func (m MyInt) SayHello() { fmt.Println(\"Hello, 我是一个int。\") } 当接受者类型是指针等引用类型时,方法内对于接受者的修改是直接作用于接受者的。但是如果接受者类型是指类型,那么是作用于接受者copy后的对象。可以通过下属例子体现其中的区别: func (p *Person) SetAge(newAge int8) { p.age = newAge } func (p Person) SetAge2(newAge int8) { p.age = newAge } 我们应当在以下这些情况,使用指针类型接受者: 需要修改接收者中的值 接收者是拷贝代价比较大的大对象 保证一致性,如果有某个方法使用了指针接收者,那么其他的方法也应该使用指针接收者。 ","date":"2024-11-08","objectID":"/go-basic2/:4:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"推荐阅读: Go结构体的内存布局 通过八个demo搞明白Go语言defer的五大特性 Go Tag标签详解 ","date":"2024-11-08","objectID":"/go-basic2/:5:0","tags":["golang","study"],"title":"Go指针、函数、结构体、接口以及方法","uri":"/go-basic2/"},{"categories":["golang之路"],"content":"上一章节我们已经简单介绍了一个最简单的go程序以及关于变量以及常量的定义。本章节将会继续极少go的基础知识。 ","date":"2024-11-08","objectID":"/go-basic/:0:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"基本运算符 go的基础运算符包含 数值计算:加+,减-,乘*,除/,求余% 逻辑计算:与\u0026\u0026,或||,非! 位运算符号:\u0026,|,^,\u003e\u003e,\u003c\u003c 关系运算符:相等==,不等于!=,大于\u003e,大于等于\u003e=,小于\u003c,小于等于\u003c= ","date":"2024-11-08","objectID":"/go-basic/:1:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"流程控制 ","date":"2024-11-08","objectID":"/go-basic/:2:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"if-else分支结构 if-else分支判断结构如下所示: if 判断1 { 语句1 } else if 判断2{ 语句2 } else { 语句3 } 需要注意的是: 花括号不能换行,必须和if在同一行内 花括号是不可以省略的,即使语句1中只有1个语句 在go中if-else还有一种特殊且常用的写法: func ifDemo() { if score := 65; score \u003e= 90 { fmt.Println(\"A\") } else if score \u003e 75 { fmt.Println(\"B\") } else { fmt.Println(\"C\") } } 我们可以在if表达式之前添加一个执行语句,再根据变量值进行判断,并且这个变量的作用域仅在这段if-else语句中。 ","date":"2024-11-08","objectID":"/go-basic/:2:1","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"循环结构 go中所有的循环均适用for来实现,不会有while以及do-until结构。 for循环的基本结构如下 for 初始语句;终止语句;每步更新内容 { ... } 其中初始语句、终止语句以及每步更新内容都不是必填项。 例如: for i := 0; i\u003c 10; i++ { print(i) } // ----------------------- i := 0 for i \u003c 10 { print(i) i++ } // ----------------------- i := 0 for { if i \u003e= 10 { break } print(i) i += 1 } 以上三种写法均是等价的。 此外还有for-range遍历结构: for k,v := range variable { } 其中variable可以是map,string,slice,array等类型,k表示索引,v表示索引对应的值。 在go1.22版本中对循环结构增加了几个特性。 首先是增加了对整数range的新特性,上述代码也可以这么写: for i := range 10 { print(i) } 此外去除了for-range不在共享循环变量,在go1.16和go1.22两个版本中分别运行一下代码,执行结果会有所不同。 list := []int{1, 2, 3, 4, 5} for _, val := range list { go func() { print(val) }() } 旧版本中for循环迭代器的变量是一个单一变量,在每个循环迭代中仅是取值不同。这样做在性能上非常高效,但如果使用不当,会导致意想不到的行为,可能会造成共享循环变量的问题。而go1.22中,for循环的每次迭代都会创建新变量,每次循环自己迭代自己的变量,以避免意外共享错误。关于这方面的知识可以阅读这篇博客 。 ","date":"2024-11-08","objectID":"/go-basic/:2:2","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"数组与切片 ","date":"2024-11-08","objectID":"/go-basic/:3:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"数组(Array) 数组是同一种数据类型元素的集合。在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。示例如下: var a [3]int // {0, 0, 0} var cities [3]string{\"Shanghai\", \"Beijing\"} // {\"Shanghai\", \"Beijing\", \"\"} var deduce [...]int{1, 2, 3} // 数组大小就是3了 var matrix [2][3]int{ {1, 2, 3}, {4, 5, 6}, } 可以通过如下方式实现数组的遍历: for i := 0; i \u003c len(cities); i++ { print(cities[i]) } for _, val := range cities { print(val) } 需要注意的是,如果在函数中传入一个数组类型的变量,那么仅会copy值到另一个变量中,而不是传递一个引用。 func modifyArray(x [3]int) { x[0] = 100 } func modifyArray2(x [3][2]int) { x[2][0] = 100 } func main() { a := [3]int{10, 20, 30} modifyArray(a) //在modify中修改的是a的副本x fmt.Println(a) //[10 20 30] b := [3][2]int{ {1, 1}, {1, 1}, {1, 1}, } modifyArray2(b) //在modify中修改的是b的副本x fmt.Println(b) //[[1 1] [1 1] [1 1]] } [n]T表示指针数组,[n]T表示数组指针 。 ","date":"2024-11-08","objectID":"/go-basic/:3:1","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"切片(Array) 由于数组长度不可变,我们也希望go中能有个像vector的类型,能够支持可变长度。 切片(Slice)是一个拥有相同类型元素的可变长度的序列。它是基于数组类型做的一层封装。它非常灵活,支持自动扩容。 切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。申明切片变量如下: var x []T var a []int{1, 2, 3} var slice = make([]int, 3, 10) // 定义了len==3,cap==10的切片 make函数仅用来初始化slice, map以及chan三种类型的变量 切片拥有自己的长度和容量,我们可以通过使用内置的len()函数求长度,使用内置的cap()函数求切片的容量。 我们也可以在数组上,创建一个切片 var x [5]int{1, 2, 3, 4, 5} b := x[3:5] // 左闭右开。 切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度(len)和切片的容量(cap)。因此判断切片是否为空,应当如下: if len(s) == 0 { } 而不是s==nil,如果这么比较的话,实际上是在判断指针是否为空。例如: var s1 []int //len(s1)=0;cap(s1)=0;s1==nil s2 := []int{} //len(s2)=0;cap(s2)=0;s2!=nil s3 := make([]int, 0) //len(s3)=0;cap(s3)=0;s3!=nil 由由于切片是指向底层数据的指针,因此如果copy,那么对copy后的变量进行修改,原先的变量也会发生改变,举个例子: package main import \"fmt\" func sliceFunc(s []int, val int) { s[0] = val } func main() { var list = [5]int{1, 2, 3, 4, 5} s1 := list[0:3] s2 := list[:] s3 := s2 sliceFunc(s1, 6) fmt.Println(list) //[6 2 3 4 5] for _, val := range s1 { print(val, \" \") } println() //6 2 3 for _, val := range s2 { print(val, \" \") } println() // 6 2 3 4 5 for _, val := range s3 { print(val, \" \") } println() // 6 2 3 4 5 } 因此,当我们使用切片时,最好遵循所有权的唯一性原则(这在Rust中被纳入语法范围中),即对于内存中的某个数据,同一时刻一个值只能有一个所有者。 既然切片的长度是可变的,那么该如何增加切片的元素呢: func main() { //append()添加元素和切片扩容 var numSlice []int for i := 0; i \u003c 10; i++ { numSlice = append(numSlice, i) fmt.Printf(\"%v len:%d cap:%d ptr:%p\\n\", numSlice, len(numSlice), cap(numSlice), numSlice) } } 使用内置的append函数即可。 需要注意的是,每个切片会指向一个底层数组,这个数组的容量够用就添加新增元素。当底层数组不能容纳新增的元素时,切片就会自动按照一定的策略进行“扩容”,此时该切片指向的底层数组就会更换。“扩容”操作往往发生在append()函数调用时,所以我们通常都需要用原变量接收append函数的返回值。 关于每次扩容对cap修改的策略,可以参考${GOROOT}/src/runtime/slice.go的源码,这里就不过多展开。 ","date":"2024-11-08","objectID":"/go-basic/:3:2","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"字典(map) map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。 var stuMap map[string]int stuMap = make(map[string]int) stuMap[\"Tom\"] = 24 exampleMap := map[string]string{ \"code\": \"23\", \"message\": \"Query success!\", } 思考下[]map[string]int和map[string][]int之间的区别 如何判断某个键是否存在: _, ok := m[key] if !ok{ println(\"key is not existed!\") } 可以通过如下方法删去map中的某个键: delete(m, key) ","date":"2024-11-08","objectID":"/go-basic/:4:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"思考 package main import \"fmt\" func main() { type Map map[string][]int m := make(Map) s := []int{1, 2} s = append(s, 3) fmt.Printf(\"%+v\\n\", s) m[\"q1mi\"] = s s = append(s[:1], s[2:]...) fmt.Printf(\"%+v\\n\", s) fmt.Printf(\"%+v\\n\", m[\"q1mi\"]) } 尝试写出上面这段代码的结果,从而深刻理解本章节所阐述的内容。 ","date":"2024-11-08","objectID":"/go-basic/:5:0","tags":["golang","study"],"title":"Go基本运算符、流程控制、数组与切片以及字典","uri":"/go-basic/"},{"categories":["golang之路"],"content":"在完成了上个章节的Go编译器安装后,本章节将介绍Go的基础语法,并通过几个例子进行展示。 Hello World 学习每个语言的第一步永远是学会如何在控制台打印😊,现在让我们看一下go如何实现Hello World: // main.go package main import \"fmt\" func main(){ fmt.Println(\"Hello World!\") } 在本文件的目录下,在控制台中执行go build main.go \u0026\u0026 main或go run main.go观察控制台输出的结果。 我们逐行分析说明: 第1行使用package main申明这是一个主包,我们需要在主包下面定义func main()函数,用于声明程序入口。 第3行使用import来导入外部包\"fmt\",该包通常用于实现格式化的I/O操作,这个与C的\u003ccstdio\u003e相似。 第5行使用func main()来申明编译入口以及程序执行的开始位置。 第6行使用fmt.Println(\"Hello World!\")向控制台输出Hello World! 通过上述例子,我们介绍下go语言一个程序所需要的三个部分: 包名。每个go程序都需要申明该程序所属的包,在本章节中,我们所有代码的包名均为main,而对于go的包管理方式,我们将在后续的章节中进行介绍。 导入外部包。想要实现一段代码,不可避免需要调用已经封装好的程序,因此通过import来导入一些必要的外部包,例如本例子中的fmt,以及一些常用的bytes,net等,这些均是已经封装好的标准库。这些标准库的位置在${GOROOT}/src中 函数。go语言函数申明格式为func functionName(args)并用花括号包裹函数体。需要注意的是,不像C++可以将花括号换行,go语言中花括号的换行是不允许换行的,并使用tab进行代码缩进。 接下来我们将介绍go的基本语法 GO基本语法 ","date":"2024-10-30","objectID":"/go-hello/:0:0","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"变量和常量 ","date":"2024-10-30","objectID":"/go-hello/:1:0","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"变量 变量定义如下方式如下: var a int var a int = 10 var a = 10 a := 10 上述为4种不同表达形式的变量申明方式,其中a为变量名,int为变量类型,后两种方式中,go能够自动推理出各个变量的类型。 go的变量名可以用26个英文字母,_以及数字组合而成 数字不能作为变量的起始字符 此外go中存在一些关键字,其具备特殊含义,包含一下25个,这些单词不能作为变量名: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 此外还存在一些保留字,这些同样不建议作为变量名: Constants: true false iota nil Types: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error Functions: make len cap new append copy close delete complex real imag panic recover 如果需要定义多个变量可以如此声明: var ( a int = 19 b bool = true ) 或 var ( a = 10 b = false ) ","date":"2024-10-30","objectID":"/go-hello/:1:1","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"常量定义 与变量定义类似,可以如此定义 const a int = 10 const a = 10 // notice the type of a is 'untyped int' const ( a = 10 b string = \"12a\" ) 需要注意的是,常量的批量定义中,如果没有确定常量的类型,go并不会直接推到出常量的类型,而是untyped ...,关于这个问题可以查看官方文档 ,对于untyped常量会导致的问题,可以查看疑惑: Go const 导致程序结果错乱? ","date":"2024-10-30","objectID":"/go-hello/:1:2","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"多重赋值 这个特点有点像js中的多重赋值,我们可以这么做 x, y, z := 1, 2, 3 这时,x的值为1,y的值就为2,…… 你可以随处使用该方法来实现多重赋值,例如可以用在常量定义中 ","date":"2024-10-30","objectID":"/go-hello/:1:3","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"匿名变量 go中会使用_来表示一个仅用于接收,但不能使用的变量,常用于当我们想要忽略多重赋值中的某个值时。例如: x, _, z := 1, 2, 3 ","date":"2024-10-30","objectID":"/go-hello/:1:4","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["golang之路"],"content":"iota iota是go语言的常量计数器,只能在常量的表达式中使用。 iota在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota计数一次。使用iota能简化定义,在定义枚举时很有用。例如: const ( a = iota // a = 0 b // b = 1 c // c = 2 ) 或 const ( _ = iota KB = 1\u003c\u003c(10*iota) MB GB ) 可以发现,后续的常量推导,均是依据离这条语句最近的iota表达来推导的。 代码风格 在go的代码中,变量命名的风格通常具有一个约定俗成的规则,这里我将总结一下我遇到的一些规则 对于常量名,一般全部大写,并用_隔开,例如:MAX_CONNECTION。 对于变量名以及函数名,一般采用驼峰风格,例如isHashed。如果需要将这个函数或变量设为public,则将首字母也大写。 当然变量的定义最好能够直观表现其意义,最好别用拼音、无意义的一个字符串来定义一个变量。 ","date":"2024-10-30","objectID":"/go-hello/:1:5","tags":["golang","study"],"title":"Hello Go!","uri":"/go-hello/"},{"categories":["Docker"],"content":"为了进行多个容器之间通讯的实验,首先我们需要创建两个服务,分别打包成不同的镜像,并通过docker-compose进行容器编排。本次实验的项目目录如下: ├── client │ ├── dockerfile │ ├── index.html │ └── nginx.conf ├── docker-compose.yml ├── microservice1 │ ├── dockerfile │ ├── main │ └── main.go └── microservice2 ├── dockerfile ├── main └── main.go microservice后端服务定义 我们定义了两个后端服务,其代码如下: // microservice1/main.go package main import ( \"encoding/json\" \"net/http\" ) type Resp struct { Code int Message string } func main() { http.HandleFunc(\"/say_hello\", func(w http.ResponseWriter, r *http.Request) { w.Header().Set(\"Access-Control-Allow-Origin\", \"*\") //允许访问所有域 w.Header().Add(\"Access-Control-Allow-Headers\", \"Content-Type\") //header的类型 w.Header().Set(\"content-type\", \"application/json\") var data Resp if r.Method != \"GET\" { data = Resp{ Code: 4000, Message: \"Only Allow GET Method!\", } } else { data = Resp{ Code: 2000, Message: \"Hello Microservice1\", } } resp, _ := json.Marshal(data) w.Write(resp) }) http.ListenAndServe(\":8080\", nil) } 编译上述代码: GOOS=linux GOARCH=amd64 go build main.go 另一个后端服务代码如下: // microservice2/main.go package main import ( \"encoding/json\" \"net/http\" ) func main() { http.HandleFunc(\"/who_am_i\", func(w http.ResponseWriter, r *http.Request) { w.Header().Set(\"Access-Control-Allow-Origin\", \"*\") //允许访问所有域 w.Header().Add(\"Access-Control-Allow-Headers\", \"Content-Type\") //header的类型 w.Header().Set(\"content-type\", \"application/json\") data := struct{ Code int Message string }{ Code: 2000, Message: \"I am yizhigopher!\", } resp, _ := json.Marshal(data) w.Write(resp) }) http.ListenAndServe(\":8080\", nil) } 使用上述命令编译代码。 并编写容器build脚本,每个后端服务的dockerfile一样: FROM golang:1.23-alpine WORKDIR /app COPY ./main /app/microservice EXPOSE 8080 ENTRYPOINT [\"/app/microservice\"] 前端界面定义 为了直观体现出不同容器之间通讯作用,我们编写了如下前端代码: \u003c!-- client/index.html --\u003e \u003c!DOCTYPE html\u003e \u003chtml lang=\"CH-ZN\"\u003e \u003chead\u003e \u003cmeta charset=\"UTF-8\"\u003e \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e \u003cmeta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"\u003e \u003cscript src=\"https://code.jquery.com/jquery-3.7.1.min.js\"\u003e\u003c/script\u003e \u003c/head\u003e \u003cbody\u003e \u003cbutton onclick=\"say_hello()\" style=\"width:100px; height:20px\"\u003ecall say hello\u003c/button\u003e \u003cbr/\u003e \u003cbutton onclick=\"whoami()\" style=\"width:100px; height:20px\"\u003ecall who am i\u003c/button\u003e \u003c/body\u003e \u003c/html\u003e \u003cscript\u003e function say_hello() { $.ajax({ url: \"http://localhost/api/v1/say_hello\", type: \"GET\", dataType: \"json\", async: true, success: function(res) { console.log(res) }, error: function(param) { console.log(\"fail, error=\", param) } }) } function whoami() { $.ajax({ url: \"http://localhost/api/v2/who_am_i\", type: \"GET\", dataType: \"json\", async: true, success: function(res) { console.log(res) }, error: function(param) { console.log(\"fail, error=\", param) } }) } \u003c/script\u003e 需要注意的是,其中每个接口请求的url为:http://localhost/api/v1/say_hello和http://localhost/api/v2/who_am_i。并编写nginx.conf配置代理: user nginx; worker_processes auto; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] \"$request\" ' '$status $body_bytes_sent \"$http_referer\" ' '\"$http_user_agent\" \"$http_x_forwarded_for\"'; access_log /var/log/nginx/access.log main; sendfile on; keepalive_timeout 65; # Server block for handling requests server { listen 80; server_name localhost; # 处理静态文件的请求(如果有) location / { root /fontend; index index.html; } location ^~/api/v1/ { proxy_pass http://router_one:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~/api/v2/ { proxy_pass http://router_two:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } 我们注意到,代理的转发路径分别是http://router_one:8080/和http://router_two:8080/,其中不是IP地址,而是容器名。 容器编排以及通信测试 编写docker-compose.yml编排内容,配置如下: version: '3' services: font_end: image: fontend:v1 build: ./client contai","date":"2024-10-29","objectID":"/docker-connection/:0:0","tags":["docker","go"],"title":"如何实现多个个容器之间的通讯","uri":"/docker-connection/"},{"categories":["golang之路"],"content":"在本节中,我们将首先简单介绍下如何安装Go语言环境,以开启Go语言学习之路!我们将简单介绍在Windows环境,Linux环境以及Mac环境下如何安装,尽可能全面的覆盖不同读者所使用的操作系统。 Go语言下载地址 Windows安装 下载windows环境下的zip文件,解压到系统的某个目录中,在我的系统中,我将其解压到本地D盘目录D:\\Program Files\\Go\\go下。 之后在系统的环境变量中将该目录下的bin目录添加到环境变量中,如图所示: 保存后通过打开终端,输入go version即可判断是否添加到环境变量中 之后需申明GOROOT、GOPATH,并将GOPATH目录下的bin目录添加到环境变量中,便于后续调用go install指令安装的命令。 Linux安装 下载图1中的源码包,删除 /usr/local/go 文件夹(如果存在),删除之前安装的 Go,然后将刚刚下载的压缩包解压缩到/usr/local,在 /usr/local/go 中创建一个全新的 GOROOT rm -rf /usr/local/go \u0026\u0026 tar -C /usr/local -xzf go1.23.2.linux-amd64.tar.gz 在PATH环境变量中添加/usr/local/go/bin,在$HOME/.profile或/etc/profile(用于全系统安装)中添加以下一行即可: export GOROOT=/usr/local/go export GOPATH=/data/go export PATH=$GOPATH/bin:$GOROOT/bin:$PATH 之后使用命令source $HOME/.profile激活环境变量配置即可。 Mac安装 安装图1中的.pkg安装文件即可 执行以下命令: cd ~ vim .bash_profile 编辑用户环境变量: export GOPATH=/Users/XXX/go #本地创建的gopath绝对路径 export PATH=$PATH:$GOPATH/bin 激活配置文件source ~/.bash_profile即可。 额外的注意点: 需要注意的是,GOPATH目录下需要创建三个文件夹,分别是src、pkg以及bin,其中bin目录保存go install安装的指令,pkg保存第三方包的源码,src用于在GO111MODULE=off时,在该路径下编写包含第三方包的程序(现在基本不在src下写代码了) 之后我们需要覆写go的几个配置: go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,direct GO111MODULE是Go语言用于管理依赖关系的一种机制,它可以帮助开发者更好地管理项目的依赖包,并且可以确保项目在不同环境下的一致性 GOPROXY表示Go安装第三方包的代理(因为国内众所周知的原因),便于后续直接go get安装第三方包 至此,go的安装已经完成了 ","date":"2024-10-08","objectID":"/go-install/:0:0","tags":["golang","study"],"title":"Go语言环境安装","uri":"/go-install/"},{"categories":null,"content":"归一化流基本内容 什么是标准化流:基于一系列可逆变换,生成样本对应的分布 标准化流的基本原理: 变量替换:$p_x(x)=p_z(f_\\theta(x))|\\det J_{f_\\theta}(x)|$,我们可以理解为通过$z=f_\\theta(x)$,将原先复杂分布,变换成简单易懂的分布形式,其中我们要求$f_\\theta$必须是可逆变换。标准化流的目的就是求得该可逆变换。 在标准化流中,往往会使用多个这样的可逆变换,即$f_\\theta(x)=f_1(x)\\circ f_2(x)…\\circ f_K(x)$ 雅各比行列式求解: $$ \\det J_{f_\\theta}(x)=\\det \\prod_{i=1}^K J_{f_i}(x)=\\prod_{i=1}^K\\det J_{f_i}(x) $$ 利用对数函数,我们可以得到: $$ \\log p_x(x)=\\log p_z(f_{\\theta}(x))+\\sum_{i=1}^K\\log |det J_{f_i}(x)| $$ 我们需要最大化这个概率密度 ","date":"2024-01-06","objectID":"/nf-introduce/:0:1","tags":null,"title":"Normalizing Flow介绍","uri":"/nf-introduce/"},{"categories":null,"content":"论文《A deep generative model for probabilistic energy forecasting in power systems: normalizing flows》的应用: 在该论文中,作者采用标准化流的方式实现了负荷预测功能。作者利用$\\bm x$表示d-1天的负荷数据,用$\\bm c$表示天气信息,希望能够得到符合符合数据分布的分布$p_\\theta(\\bm x|\\bm c)$,从而可以利用该分布得到预测数据$^{\\bm x}$。 在利用归一化流方式对泰迪比赛数据进行负荷预测的尝试中,会进行如下操作: 提取时间数据和天气数据,重新整合原本数据格式,得到归一化流的模型输入格式 其中每一行为某个时刻的负荷数据y和影响负荷的因素(时间因素、天气因素)x。根据日期重新排列数据x,将每个时刻影响负荷的因素横向排列并组合。此时x重新排列为一个$day\\times 960$的矩阵,表现如下: ","date":"2024-01-06","objectID":"/nf-introduce/:0:2","tags":null,"title":"Normalizing Flow介绍","uri":"/nf-introduce/"},{"categories":["cuda"],"content":"创建实例 在阿里云平台上创建实例: 其中我们镜像选择为公共的Ubuntu20.04镜像,当然你也可以选择其他配置好的镜像从而简化之后的步骤。 我们之后会演示如何在一个空白的系统中,安装python、cuda以及pytorch的环境 配置好以上信息之后,我们就能获得一个实例,点击实例操作里的打开即可连接远程主机,之后我们会在这个实力上安装一些新的东西,配置我们需要的环境。 ","date":"2023-12-14","objectID":"/install/:0:1","tags":["cuda","安装教程"],"title":"阿里云PAI平台搭建pytorch-cuda11.4环境","uri":"/install/"},{"categories":["cuda"],"content":"安装基本环境 更新apt源 apt-get update 安装python 十分简单: apt-get install python3 apt-get install python3-venv apt-get install python3-pip 安装完成之后,可以执行 python3 --version 安装cuda所需环境 控制台敲入nvidia-smi获得GPU信息,可以我们所需cuda的版本是11.4 安装libxml2 apt-get install libxml2 配置好时区信息即可 安装gcc环境: apt-get install gcc-7 g++-7 配置gcc版本优先级,不然cuda无法识别到安装好的gcc update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 --slave /usr/bin/g++ g++ /usr/bin/g++-7 --slave /usr/bin/gcov gcov /usr/bin/gcov-7 update-alternatives --config gcc 敲入gcc --version出现如下信息即可: 安装wget和vim apt-get install wget apt-get install vim 安装cuda 到nvidia官网上找到对应cuda驱动下载信息:如图选择即可 在当前目录下创建一个cuda-installer目录,进入该目录,执行installer中的命令: wget https://developer.download.nvidia.com/compute/cuda/11.4.0/local_installers/cuda_11.4.0_470.42.01_linux.run sh cuda_11.4.0_470.42.01_linux.run 敲入accpet同意协议,在之后的配置中选择如下配置: 安装即可,同时按照给出的提示: 修改/etc/profile文件,设置环境变量。使用vim /etc/profile在文末添加如下信息: export CUDA_HOME=/usr/local/cuda-11.4 export LD_LIBRARY_PATH=/usr/local/cuda-11.4/lib64:$LD_LIBRARY_PATH export PATH=/usr/local/cuda-11.4/bin:$PATH 重起实例,执行nvcc -V出现: 即可。 至此cuda安装完毕 安装Torch 去官网上,找到对应版本执行一下命令即可 pip install torch==1.12.0+cu113 torchvision==0.13.0+cu113 torchaudio==0.12.0 --extra-index-url https://download.pytorch.org/whl/cu113 ","date":"2023-12-14","objectID":"/install/:0:2","tags":["cuda","安装教程"],"title":"阿里云PAI平台搭建pytorch-cuda11.4环境","uri":"/install/"},{"categories":["golang小技巧"],"content":"简介 我们能在go代码中添加一段注释,用来表示一种编译约束 //go:build [tags] 通过这个并且配合go build -tags=\"...\"的方式,就能实现带有约束的编译。 举个例子: 我们编写一下代码:主程序申明如下 //main.go package main var configArr []string func main(){ for _, v := range configArr { print(v, \" \") } } 同时,我们会编写另外两个用于初始化的代码,分别为dev和test //go:build dev package main func init() { configArr = append(configArr, \"dev\") } //go:build test package main func init() { configArr = append(configArr, \"test\") } 我们可以看到,在两个同一包下,我们定义了两个不同的初始化功能,分别为configArr添加相应的内容。 当我们采用不同方式编译代码时,会看到如下情况: 能够看到编译时携带的tag不同,结果也就不同。 我们可以很直观的想到可以通过这种方法,实现不同模式下的编译 ","date":"2023-12-04","objectID":"/tips-1/:0:1","tags":["golang","tips"],"title":"go语言小技巧--编译约束","uri":"/tips-1/"},{"categories":["golang小技巧"],"content":"环境设置 当然我们也可以通过添加//go:build linux的方式对本段代码进行编译环境的限制。 例如我们对上述代码的go:build注释进行修改,可以看到如下效果: //go:build linux package main func init() { configArr = append(configArr, \"dev\") } //go:build windows package main func init() { configArr = append(configArr, \"test\") } 这时,我们直接进行代码编译,能够看到如下效果: 可以看到,我们只将test部分的代码编译,而dev的代码并没有编译 ","date":"2023-12-04","objectID":"/tips-1/:0:2","tags":["golang","tips"],"title":"go语言小技巧--编译约束","uri":"/tips-1/"},{"categories":["golang小技巧"],"content":"格式 举个例子:// go:build linux \u0026\u0026 amd64 \u0026\u0026 !cgo || darwin,通过这个我们就能发现,可以通过逻辑运算符来表明编译约束。 ","date":"2023-12-04","objectID":"/tips-1/:0:3","tags":["golang","tips"],"title":"go语言小技巧--编译约束","uri":"/tips-1/"},{"categories":["Docker"],"content":"如何运行容器 在之前的几篇文章中,我们学习了如何使用docker的指令以及如何进行容器打包,接下来我们就需要了解,该如何运行容器。 最简单的方式: 使用docker run或docker start指令来运行镜像或容器 但是这种方式在面对需要进行容器的端口映射、镜像卷以及容器间的网络通信时,会比较麻烦,不易操作。 同时,如果某个容器额外需要依赖另一个容器的存在,即容器之间存在关联的关系时,容器的启动顺序就比较重要了。举个简单的例子,我们手头有个web服务容器,这个容器需要依赖另一个MySQL容器的存在,这时,我们就需要先在web服务容器运行前,先运行MySQL容器。也许你会认为这种情况下,容器的先后顺序并不会对你造成困扰,但是如果容器数量多了怎么办,容器运行的相关参数特别多怎么办。亦或者经过了较长时间,你忘记了这个依赖关系怎么办? 这时候我们就需要有一个工具来管理容器运行的相关参数以及依赖关系。 ","date":"2023-11-30","objectID":"/docker-run/:0:1","tags":null,"title":"容器运行方式","uri":"/docker-run/"},{"categories":["Docker"],"content":"docker-compose工具 如何安装 Windows环境下,因为docker-desktop自带docker-compose,所以不需要关注如何安装 Linux环境下,访问docker-compose的下载地址Releases · docker/compose (github.com) ,选择适合系统的以及相应架构的可运行程序。运行sudo chmod +x docker-compose赋予其可运行能力,让后将该可执行文件放入环境变量的目录下即可 编写docker-compose.yml文件 当我们已经将容器打包完成之后,我们可以编写docker-compose.yml文件,从而能够运行容器。 我们举个简单的例子:在这个例子中,我们只需要申明其镜像卷的挂载即可 verison: '3' services: cliffwalking: image: demo:v1 container_name: reinforce_learning volumes: - /home/yizhigopher/cliffwalk/ouput:/cliffwalking/output - /home/yizhigopher/cliffwalk/model:/cliffwalking/model 我们只需要在当前docker-compose.yml的目录下,运行docker-compose up就能够运行一个名为reinforce_learning的容器,并且将容器内部的output和model文件夹的内容和容器外部的对应的文件夹相关联. 当然,docker-compose能够识别的关键字不止以上这些内容,我们可以通过访问Docker Compose overview | Docker Docs 以及菜鸟教程Docker Compose | 菜鸟教程 (runoob.com) 获得相关的更多信息.以上只是一个简单的示例,希望能够通过这些能够让读者一窥docker-compose容器编排的高效以及优越性 ","date":"2023-11-30","objectID":"/docker-run/:0:2","tags":null,"title":"容器运行方式","uri":"/docker-run/"},{"categories":["Docker"],"content":"结语 至此,docker的相关知识基本分享完毕,事实上,仅仅通过短短的三个博文是不能说明白docker的,也不可能就仅仅读这些内容就能掌握docker.这三篇博文,仅仅能够让大家对docker有个基本的了解,以及基本操作的熟悉.想要熟练掌握docker,还需要经过自己大量的实践练习和操作才能真正熟悉. ","date":"2023-11-30","objectID":"/docker-run/:0:3","tags":null,"title":"容器运行方式","uri":"/docker-run/"},{"categories":["Docker"],"content":"基本操作 在上节,我们已经安装好docker,但是就如同写代码一样,我们安装好了相关环境,但是并没有代码能够让我们运行,我们又不会写代码(自己构建镜像),那该怎么办。我们可以到github上面寻找一个相关的代码,拉取到本地,然后运行即可。 所以我们现在首先要做的事应该是学会如何拉取镜像到本地。 docker pull 完整的docker pull命令应该是:docker pull ${IMAGE_NAME}:${IMAGE_TAG} 它会从docker的官方镜像仓库中拉取对应的镜像。其中${IMAGE_TAG}部分如果不写,会默认拉取最新的镜像信息。 例如,我们现在运行docker pull hello-world命令,我们看看会发生什么: 我们能够看到,使用了最新的版本(tag),镜像的sha256验证信息,以及从哪里拉取的镜像。所以之后,如果我们需要某种镜像,我们就可以直接pull以下就可以了。 可以通过访问docker hub 上,搜索你想要的基础镜像的信息即可(这一过程需要科学上网),或者使用docker search ${IMAGE_NAME},实在不行利用bing搜索相关信息也是不错的选择 那么我们拉取完了,我们怎么能够确定这个镜像就是在我的电脑上的呢? docker images 我们在控制台输入docker images看看会发生什么: 我们看到,在我们本地存储中,确确实实有一个来自hello-world,TAG是latest的仓库的镜像。 当然你也可以通过docker inspect ${IMAGE_NAME}查看镜像在本地的哪个位置,但是这么做完全没有必要。 我们已经能够确定确确实实有个镜像在本地,那么我们该如何运行这个镜像呢 docker run 完整的docker run指令如下:docker run [OPTIONS] ${IMAGE_NAME} [COMMAND] [ARG...],这样之后会生成一个容器container 其中options常用的是: -v:绑定容器卷,后面紧跟映射关系,具体而言就是将本地文件和容器内的文件相关联。需要注意的是,两处的文件路径用:隔开,前面是本地文件的绝对路径,后面是容器内的绝对路径。例如:docker run -v /home/yizhigopher/result:/project/result xxx:v1 -d:后台运行容器,使用这个option后,我们就不会看到容器运行的结果,而只能看到一个容器ID -p:端口映射。有些时候,我们需要访问容器内的一些服务,例如MySQL容器,我们需要在本地就能连接容器中的MySQL服务,我们可以这么写:docker run -d -p 8080:3306 mysql,这样我们就是将容器内的3306端口映射到本地的8080端口,我们在本地就可以通过访问8080端口获得MySQL服务。 -i:以交互模式运行容器,通常与 -t 同时使用 -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用 上述就是我们一般常用的OPTIONS信息,我们掌握了这些,基本可以应付大部分情况。如果需要其他的操作可以查阅官方文档,或者baidu。 举个例子:在终端执行docker run -it golang:alpine会发生什么: 需要注意的是我们这个命令相当于启动一个容器并进入容器内部。可以观察到,我们终端的位置发生了变化,从root@yizhigopher进入到了容器内部的/go目录下,由此也能看出docker的容器也可看成是一个小型的操作系统,在带有bash工具的容器内部,也可以执行一些简单的终端命令,例如ls、cd等等 既然我们已经学会了如何拉取镜像,如何启动一个容器,那么我们可以学学如何生成一个镜像。 ","date":"2023-11-14","objectID":"/docker-cmd/:0:1","tags":null,"title":"docker常用命令以及镜像打包","uri":"/docker-cmd/"},{"categories":["Docker"],"content":"dockerfile 要实现自己编制一个镜像,我们就得学会dockerfile文件的编写规则。 当然,由于篇幅,这里仅仅提供一些简单的dockerfile文件编写的介绍,学会了这些也就够了,更多详细的说明都可以查看官方文档。 FROM ${IMAGE_NAME} 每个dockerfile都得以FROM作为开始,我们自己构建镜像,需要在一个镜像的基础上加以创作。就如同我们平时编写代码一样,我们不可能从0101二进制串来编写代码,我们会借助编译器等基础环境来高效编写程序。 FROM ${IMAGE_NAME}的意义十分简单,你可以简答地理解为docker pull ${IMAGE_NAME},我们之后的一切操作都是在这个镜像内部执行的 WORKDIR ${FILE_NAME} 这个是自选的,WORKDIR相当于申明一个工作目录,当你的容器运行时,会默认在这个目录下运行。如果这个目录不存在,会自动帮你创建这个目录 COPY ${FILE_PATH} ${CONTAINER_FILE_PATH} 这个步骤会将本地主机下的${FILE_PATH}的内容拷贝到容器内部${CONTAINER_FILE_PATH}目录下。我们需要注意的是,如果你想拷贝一个文件,那么你需要指明这个文件在容器内部的名字,即:COPY ./requirement.txt /project/req.txt。如果你拷贝的是文件夹,那么你同样需要指明这个文件在容器内部的名称。 联系一下Linux系统下的mv指令,会有许多相同之处 需要注意的是,有一个ADD指令和COPY指令十分相似,执行的功能也大致相同,但是ADD会自动将压缩文件进行解压,而MOVE不行 RUN ${COMMAND} 这个命令会在搭建docker镜像时执行,它会执行${COMMAND}命令,通常我们用这条指令来为镜像内容进行修改。例如,我们为python代码进行打包时,会将python源代码COPY到镜像内部,然后会执行RUN pip install -r requirements.txt来安装相关包从而能够运行python代码 CMD ${COMMAND} 这个部分的命令会在容器启动时执行,需要注意的有几点 你可以写多个CMD,但是只有最后一个CMD会执行 CMD的指令会被docker run附带的运行指令覆盖 COMMND的书写格式应写成字符数组的形式,例如ls -a需写成[\"ls\", \"-a\"] ENTRYPOINT ${COMMAND} 这个指令和CMD指令十分相似,但是有一点不同,ENTRYPOINT不会被docker run后的运行指令覆盖,而是会将docker run后面的参数传递给ENTRYPOINT。具体的示例可看这个博文Docker从入门到精通——CMD与ENTRYPOINT区别 。这里就不再赘述。 ok我们大概介绍完了dockerfile需要了解的地方,现在我们来自己编写个dockerfile试试看吧。随便挑一个文件夹,将所需要的文件内容拷贝到这里,然后在这个文件夹下新建一个dockerfile文件(名字就是dockerfile),文件内容如下: 然后在这个文件夹下打开控制台,输入:docker buuild -t cliffwalk:v1 . docker build表示执行构建镜像 -t表示构建的镜像名和镜像tag为cliffwalk:v1 最后的 . 表示使用当前目录下的dockerfile 会出现: 当指令结束后,我们使用docker images就可以看到构建好的镜像信息 由于我们最后使用的是CMD来表示容器运行的指令,所以,我们可以通过docker run的方式来覆盖这条指令来进入容器内部,我们能够看到在/cliffwalking目录下,有我们COPY进去的文件内容: 至此,我们完成了docker的基本命令和镜像打包的学习,最后一章我们会介绍如何高效的启动运行容器镜像 ","date":"2023-11-14","objectID":"/docker-cmd/:0:2","tags":null,"title":"docker常用命令以及镜像打包","uri":"/docker-cmd/"},{"categories":["Docker"],"content":"什么是docker docker可以说是一门技术、一种软件,它能够帮助我们将程序进行打包,从而方便后续的项目部署以及维护。 ","date":"2023-11-14","objectID":"/docker-introduce/:0:1","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Docker"],"content":"为什么要用docker 场景:做项目开发的同学经常会遇到一个问题,就是这个项目能够在本地上运行,但是换一台电脑却会报各种各样的错误,这个时候不得不面对环境配置这一极其麻烦的问题 所以我们说,docker将过去的程序和系统环境的绑定关系给打破了,只要我们的电脑安装了docker,我就可以通过拉取云端的镜像,无需关注环境的搭建就可以实现跨平台的应用部署。我们不再需要面对繁杂的应用上云出现的环境搭建问题,就可以轻松地使用服务。 ","date":"2023-11-14","objectID":"/docker-introduce/:0:2","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Docker"],"content":"怎样安装docker 安装docker: Windows系统: 在Windows系统,我们需要确保自己的电脑安装了WSL 以管理员身份打开CMD,并敲入: wsl --install 官方文档:安装 WSL | Microsoft Learn ,可查阅官方文档获得更多的信息。 之后我们前往docker-desktop官方网站Docker Desktop: The #1 Containerization Tool for Developers | Docker 下载最新的docker-desktop即可。 需要注意的是,在使用安装好的docker-desktop之前,我们需要修改几个配置 调整docker虚拟机的位置,不然根据初始设置,会把C盘占满 修改docker的镜像源信息,不然在docker pull拉取镜像时,会特别慢: 将其中的内容替换成下述信息: { \"builder\": { \"gc\": { \"defaultKeepStorage\": \"20GB\", \"enabled\": true } }, \"experimental\": false, \"features\": { \"buildkit\": true }, \"registry-mirrors\": [ \"http://hub-mirror.c.163.com\", \"https://mirror.ccs.tencentyun.com\" ] } 或者直接修改C:\\Users\\{{ USERNAME }}\\.docker\\daemon.json内容为上述信息,重启docker。 判断是否安装成功,在CMD中,敲入: docker version 出现如下信息即可: docker之所以需要在Linux环境下使用,是源于在使用go进行编写docker时,需要借助Linux系统的Namespace和Cgroup隔离机制,所以我们在Windows上运行docker实质上是在Windows上安装了一个虚拟机WSL,在虚拟机的内部执行docker Ubuntu系统: 更新索引:sudo apt-get update 安装:sudo apt install docker.io 修改镜像源:在/etc/docker目录下创建daemon.json,在里面添加: { \"registry-mirrors\": [ \"http://hub-mirror.c.163.com\", \"https://mirror.ccs.tencentyun.com\" ] } 即可 判断是否安装成功,在终端输入:docker --version,出现 即可 CentOS/aliyun服务器: 卸载旧版(如果你之前没有安装过,可跳过这一步) yum remove docker \\ docker-client \\ docker-client-latest \\ docker-common \\ docker-latest \\ docker-latest-logrotate \\ docker-logrotate \\ docker-engine 安装依赖包:yum install -y yum-utils 为了防止是从国外的源下载,所以配置阿里云地址:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 更新依赖:yum update 安装docker:yum install docker-ce docker-ce-cli containerd.io 配置docker镜像源:同样的在/etc/docker目录下创建daemon.json文件,填入镜像源地址信息即可。 启动docker服务:systemctl start docker 判断是否安装完成:控制台输入docker info,看到镜像源信息更改即为安装成功 当然你可以也可以在其他平台上使用docker info来判断镜像源的地址信息是否成功修改 ","date":"2023-11-14","objectID":"/docker-introduce/:0:3","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Docker"],"content":"一些最基本的概念 仓库Registry:你可以理解为类似代码仓库的东西,只是这里面存放的不是一段段代码,而是一堆镜像,我们可以通过一些指令来获得或上传镜像信息。 镜像Image:它是一种模板,具有创建docker容器的指令。并且一种镜像是得基于另一种镜像才能构建。我们可以把这个理解为虚拟机安装所需的iso文件,只要我有这个iso文件,我就可以打造多个一样的虚拟机环境。当然我们还可以在这个iso的基础上附带一些东西,构成一个新的iso。例如centos分为minimal(最基础的)以及desktop(带有桌面UI的),desktop就是基于minimal,同时又添加了新的东西形成的新的iso文件。 容器Container:它是一种运行实例,每个容器之间是相互隔离互不影响的。同样的,我们举个例子,当你拥有一个iso文件时,你不把它放在VMware中产生一个虚拟机实例,那么这个iso文件也就毫无用处。而你使用同一个iso文件创建的不同虚拟机之间也是不会有任何影响,你不会发现,在A虚拟机中创建了一个文件,B虚拟机中也可以找到。 如果上述的例子还是不能让你理解这三者之间的关系和实际的作用,我们可以拿日常开发做一个例子。仓库Registry就是github.com;镜像就是github.com中的pytorch项目代码,我们可以利用pytorch本身的东西创建一个新的例如predict的项目代码,当然我们也可以上传到github;容器就相当于我们执行这段代码的进程,每个进程之间不会相互影响(不考虑使用共享内存,管道等方式实现进程间的控制)。 ","date":"2023-11-14","objectID":"/docker-introduce/:0:4","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Docker"],"content":"总结 在这一章中,我们大概介绍了docker的一些基本信息和安装方式,在下一章我们会在ubuntu系统上介绍docker的基本操作。 ","date":"2023-11-14","objectID":"/docker-introduce/:0:5","tags":["docker"],"title":"docker介绍以及安装步骤说明","uri":"/docker-introduce/"},{"categories":["Hugo"],"content":"为什么要用Action来实现自动化部署hugo项目 不采用自动化部署,每次更新项目时,都需要在本地编译,然后上传整个public目录,比较麻烦 不采用自动化部署,没办法管理博客内容以及维护 ","date":"2023-11-12","objectID":"/workflow/:0:1","tags":["github","自动化部署"],"title":"如何利用GitHub的Action实现hugo项目自动化部署","uri":"/workflow/"},{"categories":["Hugo"],"content":"怎样实现 在github上创建 {{ username }}.github.io仓库,在main分支的基础上,新建source分支用于存放hugo的markdown文件,而main分支用于存放编译好后的文件 前期准备: 在本地,使用ssh工具创建公私钥 ssh-keygen -t rsa -N '' -f ./deploy-key -q 在本地我们会得到deploy-key和deploy-key.pub两个文件 现在需要将ssh密钥信息设置到仓库中: 添加deploy-key信息 deploy key的title随便填写即可,我们将生成的deploy-key.pub(即公钥)的内容填到key中 设置action的密钥: 新建一个actions secret 其中Name的内容填为ACTIONS_DEPLOY_KEY,Secret的内容填为我们生成的deploy-key(即私钥)的内容。 在source分支中添加.github/workflows/main.yml文件,用于定义Github Actions,其中main.yaml文件内容为 name: auto-update-page # 定义action名称 on: push: branches: - source # 当source分支出现push行为时,执行这个action jobs: deploy: runs-on: ubuntu-22.04 # 定义环境以及之后的行为 steps: - uses: actions/checkout@v4 with: submodules: true # Fetch Hugo themes (true OR recursive) fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod - name: Setup Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: \"0.120.3\" extended: true - name: Build run: hugo --minify - name: Deploy uses: peaceiris/actions-gh-pages@v3 with: deploy_key: ${{ secrets.ACTIONS_DEPLOY_KEY }} publish_dir: ./public external_repository: plutolove233/plutolove233.github.io publish_branch: main # 将编译好的public里面的内容部署到对应仓库的分支上 设置完之后,我们查看仓库的Actions,我们能够看到: 看到如上内容,就意味着我们自动化部署的工作流完成了,我们可以尝试修改部分markdown文件,上传之后我们可以看到我们的博客内容也会发生改变 ","date":"2023-11-12","objectID":"/workflow/:0:2","tags":["github","自动化部署"],"title":"如何利用GitHub的Action实现hugo项目自动化部署","uri":"/workflow/"},{"categories":["机器学习之路"],"content":"问题描述 给定一个4×12的网格环境,如下图所示,其中黄色区域表示悬崖,我们不能经过,蓝色是我们的目标区域,我们希望能求出每个状态如何利用最少的步骤到达目的点。 ","date":"2023-11-10","objectID":"/cliffwalking/:0:1","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"编写工具类代码 # rl_utils.py def one_hot(index, num_size=10): return [1 if i == index else 0 for i in range(num_size)] class ReplayBuffer: def __init__(self, capacity): self.buffer = collections.deque(maxlen=capacity) def add(self, state, action, reward, next_state, done): self.buffer.append((state, action, reward, next_state, done)) def sample(self, batch_size): transitions = random.sample(self.buffer, batch_size) state, action, reward, next_state, done = zip(*transitions) return np.array(state), action, reward, np.array(next_state), done def size(self): return len(self.buffer) def train_off_policy_agent(env, agent, num_episodes, replay_buffer, minimal_size, batch_size): return_list = [] for i in range(10): with tqdm(total=int(num_episodes / 10), desc='Iteration %d' % i) as pbar: for i_episode in range(int(num_episodes / 10)): episode_return = 0 state = env.reset()[0] done = False while not done: action = agent.take_action(state) next_state, reward, done, _, _ = env.step(action) replay_buffer.add(state, action, reward, next_state, done) state = next_state episode_return += reward if replay_buffer.size() \u003e minimal_size: b_s, b_a, b_r, b_ns, b_d = replay_buffer.sample(batch_size) transition_dict = {'states': b_s, 'actions': b_a, 'next_states': b_ns, 'rewards': b_r, 'dones': b_d} agent.update(transition_dict) return_list.append(episode_return) if (i_episode + 1) % 10 == 0: pbar.set_postfix({'episode': '%d' % (num_episodes / 10 * i + i_episode + 1), 'return': '%.3f' % np.mean(return_list[-10:])}) pbar.update(1) return return_list ","date":"2023-11-10","objectID":"/cliffwalking/:0:2","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"制定规则 我们规定,每走一步所得的reward是-1,走进悬崖的reward是-100,到达目标地点的reward是100。 我们编写环境代码如下: # grid_world.py class GridWorld: \"\"\" 悬崖问题的环境建立 \"\"\" def __init__(self, row=4, col=12): self.action_num = 4 self.col = col self.row = row self.x = row - 1 self.y = 0 self.statue_dim = self.row*self.col self.action_dim = 4 def step(self, action) -\u003e (list, float, bool, bool, dict): action = int(action) # 假设一个3*3的情景,目的是中间方块,求最短距离 self.x = min(self.row - 1, max(0, self.x + change[action][0])) self.y = min(self.col - 1, max(0, self.y + change[action][1])) next_state = self.x * self.col + self.y reward = -1 done = False if self.x == self.row - 1 and self.y \u003e 0: done = True if self.y != self.col - 1: # enter into hole reward = -100 else: # reach the final reward = 100 nextState = np.array(rl.one_hot(next_state, num_size=self.row * self.col)) return nextState, reward, done, False, {} def reset(self) -\u003e (list, dict): self.x = self.row - 1 self.y = 0 label = self.x * self.col + self.y state = np.array(rl.one_hot(label, num_size=self.row * self.col)) return state, {} 在上述代码中,我们实现了环境的定义,同时,我们注意到,我们返回的状态采用了独热编码,这也就意味着,之后我们构建网络时,输入的维度应该是48。 ","date":"2023-11-10","objectID":"/cliffwalking/:0:3","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"编写神经网络用来拟合QSA target 我们需要知道,这个网络的输入是48,输出应该是action个数。 # grid_world.py class CliffWalkNet(nn.Module): \"\"\" 悬崖问题神经网络构造 \"\"\" def __init__(self, in_dim, hidden_dim, out_dim): super(CliffWalkNet, self).__init__() self.layer = nn.Sequential( nn.Linear(in_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, hidden_dim), nn.ReLU(), nn.Linear(hidden_dim, out_dim) ) def forward(self, x): return self.layer(x) 在里面使用三个全连接层,以及两个隐藏层。 ","date":"2023-11-10","objectID":"/cliffwalking/:0:4","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"编写DQN核心代码 我们每个动作采用ε贪婪策略,以及规定每次操作执行的更新方法 class CliffWalkDQLearning: def __init__(self, in_dim, hidden_dim, action_dim): self.ActionNumber = action_dim self.Q_net = CliffWalkNet(in_dim, hidden_dim, action_dim).to(device) self.Q_target = CliffWalkNet(in_dim, hidden_dim, action_dim).to(device) self.optimizer = torch.optim.Adam(self.Q_net.parameters(), lr=learning_rate) self.criterion = nn.MSELoss() self.count = 0 self.QSA = [[0, 0, 0, 0] for _ in range(in_dim)] def take_action(self, state): if np.random.random() \u003c epsilon: return np.random.randint(self.ActionNumber) state = torch.tensor(state, dtype=torch.float).to(device) return self.Q_net(state).argmax().item() def update(self, transition: dict): # load data from dictionary states_ = torch.tensor(transition.get(\"states\"), dtype=torch.float).to(device) actions_ = torch.tensor(transition.get(\"actions\")).view(-1, 1).to(device) rewards_ = torch.tensor(transition.get(\"rewards\"), dtype=torch.float).view(-1, 1).to(device) next_states_ = torch.tensor(transition.get(\"next_states\"), dtype=torch.float).to(device) dones_ = torch.tensor(transition.get(\"dones\"), dtype=torch.float).view(-1, 1).to(device) q_values = self.Q_net(states_).gather(1, actions_) # 每列收集对应actions_拟合的value值 max_qvalue = self.Q_target(next_states_).max(1)[0].view(-1, 1) q_target = rewards_ + gamma * max_qvalue * (1-dones_) loss = self.criterion(q_values, q_target) self.optimizer.zero_grad() loss.backward() self.optimizer.step() if self.count % update_times == 0: net_state_dict = self.Q_net.state_dict() self.Q_target.load_state_dict(net_state_dict) self.count += 1 ","date":"2023-11-10","objectID":"/cliffwalking/:0:5","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"执行代码,进行模型训练 我们可以直接利用rl_utils里面的(off_policy)工具,进行DQN的训练 env = GridWorld() dim = env.row*env.col agent = CliffWalkDQLearning(in_dim=dim, hidden_dim=int(dim/2), action_dim=4) buffer = rl.ReplayBuffer(1000) random.seed(0) np.random.seed(0) torch.manual_seed(0) return_list = rl.train_off_policy_agent(env, agent, num_episodes, buffer, minimal_size, batch_size) episodes_list = list(range(len(return_list))) plt.plot(episodes_list, return_list) plt.xlabel('Episodes') plt.ylabel('Returns') plt.title('DQN on {}'.format(\"Cliff Walking\")) plt.show() ","date":"2023-11-10","objectID":"/cliffwalking/:0:6","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"模型保存 torch.save({\"CliffWalking\": agent.Q_target.state_dict()}, \"./cliff_walking.pth\") # load model model = CliffWalkNet(in_dim=dim, hidden_dim=int(dim/2), out_dim=4).to(device) state_dict = torch.load(\"./cliff_walking.pth\")[\"CliffWalking\"] model.load_state_dict(state_dict) res = [[0, 0, 0, 0] for _ in range(dim)] for i in range(4): for j in range(12): state = rl.one_hot(i*12+j, dim) input_ = torch.tensor(state, dtype=torch.float).to(device) target = model(input_).cpu().detach().numpy().tolist() res[i*12+j] = target # print(\"state(%d,%d):\" % (i, j)) # print(target) # print() print_agent(res, env, action_graph, list(range(37, 47)), [47]) 我们将训练好的模型保存,之后导入model,这样我们就可以避免重复的模型训练,直接计算每个结点的QSA,寻找每个状态的action最大值,从而得出训练后的策略结果。 由上述结果,我们发现每个状态都已经找到了最优的策略,这个模型的结果还算可以。 ","date":"2023-11-10","objectID":"/cliffwalking/:0:7","tags":["pytorch","DQN","RL"],"title":"DQN算法示例:CliffWalking问题","uri":"/cliffwalking/"},{"categories":["机器学习之路"],"content":"基本概念: 对于强化学习,我们一般会分成智能体(agent),环境(通过智能体的状态和动作反馈信息)两大部分,我们现在介绍一些名词,从而有利于之后学习的理解。在这一部分,我们会结合一个3×3的网格寻路来形象化介绍下述概念。 我们最初位置是在(1,1),我们希望能够在最短的时间内到达蓝色网格位置。 State:agent相对于environment的状态。例如以s1表示网格(1,1),s9表示网格(3,3)。所有的状态会构成S(State Set)。 Action:每个状态可能采取的行动。例如向上(a1)、下(a3)、左(a4)、右(a2)走,这所有的动作会构成A(Action Set)。 state transition:agent从s1→s4的过程。 state transition probability:用条件概率的形式,表示转移的情况。例如p(s4|s1, a3)=0.5表示从状态s1执行动作a3(向下)到达状态s4的可能性是0.5(因为还可以向右到达s2的可能)。 Reward:一个数字,用于表示一个state transition行为所产生的激励。 forbidden area:进入但是会产生损失的区域(Reward\u003c0)。例如图示中的黄色区域。 Policy:让agent知道在某个状态该如何行动,也是用条件概率的形式来表示,例如π(a1|s1)=0,π(a2|s1)=0.5。同时我们应该还满足下述条件: $$ \\sum_{a\\in A}\\pi(a|s_j) = 1 $$ Trajectory:是整个状态行为链,例如s1(a2)→s2(a3)→s5(a3)→s8(a2)→s9(a4)→s8… Return:表示整个Trajectory上Reward之和 Discounted Rate:由上可知,一个Trajectory可能是无穷无尽的,所以我们需要定义γ来种折扣Reward,从而使整个过程的Return不会太大。 Discounted Return:表示整个Trajectory的折扣回报总和,具体表示为: $$ Discounted\\ Return=\\sum_{i=1}^\\infin \\gamma^{i-1}r_i $$ 我们可以知道,这个结果最终会收敛到一个值。并且γ越小,那么Discounted Return会与最早的reward相关(更近视),γ越大也就越远视 Episode:一个有限步的Trajectory,并且最终状态时terminal state(目标状态,即图中蓝色方块)。 ","date":"2023-11-10","objectID":"/concept/:0:1","tags":["RL","math"],"title":"强化学习数学知识总结","uri":"/concept/"},{"categories":["机器学习之路"],"content":"马尔可夫过程 随机过程 随机过程研究的对象是,随时间改变的随机现象。例如本例子中,时刻1在状态s1,时刻2可能就会在s2获s4。这一过程是随机的,我们通常用 $$ P(s_{t+1}|a_{t+1},s_{t}, a_{t}, s_{t-1}…a_1, s_0) $$ 来表示下一个时刻,状态的可能性 马尔可夫性质 当前状态只与上一个状态有关时,我们称这个过程具有马尔可夫性质,即 $$ P(s_{t+1}|a_{t+1},s_{t}, a_{t}, s_{t-1}…a_1, s_0)=P(s_{t+1}|a_{t+1}, s_t) $$ 在本例子中,每个时刻到达某个网格的状态可能完全取决于上一时刻所在状态和动作,所以我们这个网格寻路的例子是满足马尔可夫性质的。 几个新的概率 $$ P(s’|s, a)表示s\\stackrel{a}{\\longrightarrow}s’即从s执行动作a到达s’的概率\\\\ P(r |s, a)表示s\\stackrel{a}{\\longrightarrow}s’这一过程获得reward=r的概率\\\\ $$ 新的概念 State Value $$ v_{\\pi}(s)=\\mathbb{E}(G_t|S=s)\\\\ $$ 回报矩阵G:表示当前时刻所有状态所获得的discounted return $$ G_t=R_{t+1}+\\gamma G_{t+1} $$ 贝尔曼公式 我们将上述式子进行展开以及归纳,可得贝尔曼公式: $$ \\forall s\\in S,v_{\\pi}(s)=\\mathbb{E}(G_t|S_t=s)=\\mathbb{E}(R_{t+1}|S_t=s)+\\gamma\\mathbb{E}(G_{t+1}|S_t=s)\\\\ =\\sum_{a\\in A}\\pi(a|s)\\sum_rp(r|s,a)r + \\gamma\\sum_{s’}\\mathbb{E}(G_{t+1}|S_{t+1}=s’,S_t=s)P(s’|s)\\\\ =\\sum_{a\\in A}\\pi(a|s)\\sum_rp(r|s,a)r +\\gamma\\sum_{s’}v_{\\pi}(s’)\\sum_{a\\in A}P(s’|s, a)\\pi(a|s) $$ 我们将这个公式化成矩阵的形式 $$ \\mathbf{v_{\\pi}}=\\mathbf{r_{\\pi}}+\\gamma\\mathbf{P_{\\pi}}\\mathbf{v_{\\pi}} $$ 其中: $$ r_{\\pi}(s)=\\sum_{a\\in A}\\pi(a|s)\\sum_rp(r|s,a)r\\\\ P_{\\pi}(s’|s)=\\sum_{a \\in A}p(s’|s,a)\\pi(a|s),即s\\rarr s’的可能性\\\\ \\mathbf{P_{\\pi(i,j)}} = P_{\\pi}(s_j|s_i) $$ 我们该如何求解——求state value 求矩阵的逆 迭代的方式: 先随机设置v0初始值 利用 $$ \\mathbf{v_{k+1}}=\\mathbf{r_{\\pi}}+\\gamma\\mathbf{P_{\\pi}}\\mathbf{v_{k}} $$ 不断进行迭代,当k→∞时,vk→vπ ","date":"2023-11-10","objectID":"/concept/:0:2","tags":["RL","math"],"title":"强化学习数学知识总结","uri":"/concept/"},{"categories":["机器学习之路"],"content":"安装pytorch 我们以英伟达显卡为例,我们需要知道自己电脑对应cuda版本信息: 在控制台输入nvidia-smi我们可以看到对应cuda版本的信息内容: 从上图中,我们可知:当前我们CUDA的版本是11.2,之后我们去pytorch官方网页 查询对应pytorch的版本信息,按照给出的安装命令信息安装即可。 由于pytorch官网并没有cuda11.2的安装方法,所以我选择安装cuda11.1的环境 pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html 我们可以通过一下代码来判断pytorch是否已经正确安装以及识别到显卡驱动 import torch print(torch.cuda.is_available()) print(torch.cuda.current_device()) print(torch.cuda.device_count()) print(torch.cuda.get_device_name(0)) 执行结果如下: ","date":"2023-11-09","objectID":"/linear/:0:1","tags":["pytorch","mechine learning"],"title":"pytorch实现线性拟合","uri":"/linear/"},{"categories":["机器学习之路"],"content":"编写代码 现在我们可以进行代码编写过程了 构造数据集,我们假设拟合的结果是 $$ y=w_1\\times x_1 + w_2\\times x_2 + b\\\\ 即y=\\begin{bmatrix} w_1 \u0026 w_2 \\\\ \\end{bmatrix} \\begin{bmatrix} x_1\\\\ x_2\\\\ \\end{bmatrix}+b $$ 为了能够体现机器学习拟合的有效性,我们在生成数据点时会增加一些噪声,从而体现出数据的混乱 代码实现: def synthetic_data(w, b, num_examples): \"\"\"生成 y = Xw + b + 噪声。\"\"\" X = torch.normal(0, 1, (num_examples, len(w))) # X是均值为0,方差为1的随机数。有num_examples个样本,列就是len(w) y = torch.matmul(X, w) + b # Y是X与w的乘积(matmul == mm,矩阵相乘)加上偏差b y += torch.normal(0, 0.01, y.shape) # 加入一个噪音,均值为0,方差为0.01,形状与y相同 return X, y.reshape((-1, 1)) # 其中,y返回一个列向量。-1表示自动计算,1表示固定,即列向量为1 true_w = torch.tensor([2, -3.4]) true_b = 4.2 features, labels = synthetic_data(true_w, true_b, 1000) 我们可以绘制图像,用于显示我们构造的数据: 然后我们将数据进行封装成Dataset class LinearDataSet(Dataset): def __init__(self, x, y): self.X = torch.FloatTensor(x) self.Y = torch.FloatTensor(y) def __getitem__(self, index): return self.X[index], self.Y[index] def __len__(self): return len(self.X) trainSet = LinearDataSet(features, labels) trainLoader = DataLoader(trainSet, batch_size=10, shuffle=True, pin_memory=True) 我们现在编写网络,以及编写一个训练过程: class LinearNetWork(nn.Module): def __init__(self, n_feature): super(LinearNetWork, self).__init__() self.layers = nn.Sequential( nn.Linear(n_feature, 1) # 定义一个最简单线性全连接层 ) def forward(self, x): y = self.layers(x) return y def Trainer(train_loader: DataLoader, model: LinearNetWork): criterion = nn.MSELoss() # 定义一个均方误差 optimizer = torch.optim.SGD(model.parameters(), lr=0.03) # 定义一个优化器 for i in range(epoch): model.train() for x, y in train_loader: optimizer.zero_grad() # 采用梯度下降,每次训练都需要将梯度信息清零 x, y = x.to(device), y.to(device) pred = model(x) loss = criterion(pred, y) print(\"loss=\", loss.detach().item()) loss.backward() # 梯度回退 optimizer.step() model = LinearNetWork(2).to(device) # 因为我们总共就两个变量,所以我们传入的特征信息为2 Trainer(trainLoader, model) print(model.state_dict()) 这样我们一个最简单的神经网络已经构成,我们执行上述代码查看网络每层的信息: ","date":"2023-11-09","objectID":"/linear/:0:2","tags":["pytorch","mechine learning"],"title":"pytorch实现线性拟合","uri":"/linear/"},{"categories":["机器学习之路"],"content":"总结 总的来说,这次这个任务还是比较简单的,我们构造一个简单的神经网络,完成了最简单的线性拟合的问题,我们可以在这里面一窥机器学习的基本过程。我们需要获取数据、数据处理、构造网络、进行训练、调整参数,然后不断循环往复,从而得到一个加好的结果。 ","date":"2023-11-09","objectID":"/linear/:0:3","tags":["pytorch","mechine learning"],"title":"pytorch实现线性拟合","uri":"/linear/"},{"categories":null,"content":"个人介绍 出生于2002年6月,喜欢go语言,LOL的蒟蒻。 目前在华北电力大学就读软件工程本科学业。 目前正在学习强化学习,希望能够通过编写个人博客来增加我学习的动力,以及记录我学习的过程。 博客会更新什么 本科以及之后研究生学习的过程和结果 go语言相关的内容,会包括最新特性,以及我觉得有用的东西 docker应用示例,我希望通过几个简短的章节能够让你了解docker如何部署一个项目 或许还会有一些每周心得体会什么的? 我也希望能够有人在阅读我的博客之后,发送email(yizhigopher@163.com)和我交流,希望能够在各位大佬变得更强,无限进步。 ","date":"2023-11-08","objectID":"/about/:0:0","tags":null,"title":"About","uri":"/about/"},{"categories":null,"content":"这是我的第一份博客,用于测试 package main import \"fmt\" func main(){ fmt.Println(\"Hello World\") } $$ \\sum_{i=0}^{100}i = 5050 $$ ","date":"2023-11-08","objectID":"/first_post/:0:0","tags":["hugo"],"title":"First_post","uri":"/first_post/"}] \ No newline at end of file diff --git a/index.xml b/index.xml index 211b70d..a93667c 100644 --- a/index.xml +++ b/index.xml @@ -1 +1 @@ -yizhigopher的博客http://plutolove233.github.io/变得更强,无线进步Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Fri, 08 Nov 2024 22:39:44 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70Go指针、函数、结构体、接口以及方法http://plutolove233.github.io/go-basic2/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/go-basic2/指针 和C语言一样,Go中也存在指针,一般采用如下方式来获取变量的地址: 1 2 a := 12 var ptr *int = &amp;a 如果我们想要获取该指针变量指向地址对应的内容时,我Go基本运算符、流程控制、数组与切片以及字典http://plutolove233.github.io/go-basic/Fri, 08 Nov 2024 15:24:06 +0800yizhigopherhttp://plutolove233.github.io/go-basic/上一章节我们已经简单介绍了一个最简单的go程序以及关于变量以及常量的定义。本章节将会继续极少go的基础知识。 基本运算符 go的基础运算符包含 数Hello Go!http://plutolove233.github.io/go-hello/Wed, 30 Oct 2024 10:16:11 +0800yizhigopherhttp://plutolove233.github.io/go-hello/在完成了上个章节的Go编译器安装后,本章节将介绍Go的基础语法,并通过几个例子进行展示。 Hello World 学习每个语言的第一步永远是学会如何在控制台打印😊如何实现多个个容器之间的通讯http://plutolove233.github.io/docker-connection/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/docker-connection/为了进行多个容器之间通讯的实验,首先我们需要创建两个服务,分别打包成不同的镜像,并通过docker-compose进行容器编排。本次实验的项Go语言环境安装http://plutolove233.github.io/go-install/Tue, 08 Oct 2024 15:47:15 +0800yizhigopherhttp://plutolove233.github.io/go-install/在本节中,我们将首先简单介绍下如何安装Go语言环境,以开启Go语言学习之路!我们将简单介绍在Windows环境,Linux环境以及Mac环境Normalizing Flow介绍http://plutolove233.github.io/nf-introduce/Sat, 06 Jan 2024 14:08:15 +0800yizhigopherhttp://plutolove233.github.io/nf-introduce/归一化流基本内容 什么是标准化流:基于一系列可逆变换,生成样本对应的分布 标准化流的基本原理: 变量替换:$p_x(x)=p_z(f_\theta阿里云PAI平台搭建pytorch-cuda11.4环境http://plutolove233.github.io/install/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/install/创建实例 在阿里云平台上创建实例: 其中我们镜像选择为公共的Ubuntu20.04镜像,当然你也可以选择其他配置好的镜像从而简化之后的步骤。 我们go语言小技巧--编译约束http://plutolove233.github.io/tips-1/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/tips-1/简介 我们能在go代码中添加一段注释,用来表示一种编译约束 1 //go:build [tags] 通过这个并且配合go build -tags=&quot;...&quot;的方式,就能实容器运行方式http://plutolove233.github.io/docker-run/Thu, 30 Nov 2023 14:37:10 +0800yizhigopherhttp://plutolove233.github.io/docker-run/如何运行容器 在之前的几篇文章中,我们学习了如何使用docker的指令以及如何进行容器打包,接下来我们就需要了解,该如何运行容器。 最简单的方式 \ No newline at end of file +yizhigopher的博客http://plutolove233.github.io/变得更强,无线进步Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Sun, 10 Nov 2024 20:11:24 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/在插件中找到Todo Tree,点击设置按钮 找到在settings.json中编辑更多 将上述代码复制到settings.json中即可。 1 2 3vscode Go环境设置http://plutolove233.github.io/go/Sun, 10 Nov 2024 20:11:24 +0800yizhigopherhttp://plutolove233.github.io/go/首先你需要按照这个教程 安装好Go环境。 之后在vscode插件商城中,搜寻Go,选择第一个进行安装。 安装好插件后,按下Ctrl+Shift+PGo指针、函数、结构体、接口以及方法http://plutolove233.github.io/go-basic2/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/go-basic2/指针 和C语言一样,Go中也存在指针,一般采用如下方式来获取变量的地址: 1 2 a := 12 var ptr *int = &amp;a 如果我们想要获取该指针变量指向地址对应的内容时,我Go基本运算符、流程控制、数组与切片以及字典http://plutolove233.github.io/go-basic/Fri, 08 Nov 2024 15:24:06 +0800yizhigopherhttp://plutolove233.github.io/go-basic/上一章节我们已经简单介绍了一个最简单的go程序以及关于变量以及常量的定义。本章节将会继续极少go的基础知识。 基本运算符 go的基础运算符包含 数Hello Go!http://plutolove233.github.io/go-hello/Wed, 30 Oct 2024 10:16:11 +0800yizhigopherhttp://plutolove233.github.io/go-hello/在完成了上个章节的Go编译器安装后,本章节将介绍Go的基础语法,并通过几个例子进行展示。 Hello World 学习每个语言的第一步永远是学会如何在控制台打印😊如何实现多个个容器之间的通讯http://plutolove233.github.io/docker-connection/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/docker-connection/为了进行多个容器之间通讯的实验,首先我们需要创建两个服务,分别打包成不同的镜像,并通过docker-compose进行容器编排。本次实验的项Go语言环境安装http://plutolove233.github.io/go-install/Tue, 08 Oct 2024 15:47:15 +0800yizhigopherhttp://plutolove233.github.io/go-install/在本节中,我们将首先简单介绍下如何安装Go语言环境,以开启Go语言学习之路!我们将简单介绍在Windows环境,Linux环境以及Mac环境Normalizing Flow介绍http://plutolove233.github.io/nf-introduce/Sat, 06 Jan 2024 14:08:15 +0800yizhigopherhttp://plutolove233.github.io/nf-introduce/归一化流基本内容 什么是标准化流:基于一系列可逆变换,生成样本对应的分布 标准化流的基本原理: 变量替换:$p_x(x)=p_z(f_\theta阿里云PAI平台搭建pytorch-cuda11.4环境http://plutolove233.github.io/install/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/install/创建实例 在阿里云平台上创建实例: 其中我们镜像选择为公共的Ubuntu20.04镜像,当然你也可以选择其他配置好的镜像从而简化之后的步骤。 我们go语言小技巧--编译约束http://plutolove233.github.io/tips-1/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/tips-1/简介 我们能在go代码中添加一段注释,用来表示一种编译约束 1 //go:build [tags] 通过这个并且配合go build -tags=&quot;...&quot;的方式,就能实 \ No newline at end of file diff --git a/page/2/index.html b/page/2/index.html index 91dc6cc..c2b02d8 100644 --- a/page/2/index.html +++ b/page/2/index.html @@ -14,11 +14,11 @@ -

Normalizing Flow介绍

Normalizing Flow介绍

归一化流基本内容 什么是标准化流:基于一系列可逆变换,生成样本对应的分布 标准化流的基本原理: 变量替换:$p_x(x)=p_z(f_\theta

容器运行方式

如何运行容器 在之前的几篇文章中,我们学习了如何使用docker的指令以及如何进行容器打包,接下来我们就需要了解,该如何运行容器。 最简单的方式
基本操作 在上节,我们已经安装好docker,但是就如同写代码一样,我们安装好了相关环境,但是并没有代码能够让我们运行,我们又不会写代码(自己
\ No newline at end of file diff --git a/page/3/index.html b/page/3/index.html index 621cfac..84ed73d 100644 --- a/page/3/index.html +++ b/page/3/index.html @@ -14,7 +14,8 @@ -

如何利用GitHub的Action实现hugo项目自动化部署

pytorch实现线性拟合

Cancel文章标签分类 -

All Posts

2024

如何实现多个个容器之间的通讯 diff --git a/posts/index.xml b/posts/index.xml index b07ac93..60e856d 100644 --- a/posts/index.xml +++ b/posts/index.xml @@ -1 +1 @@ -All Posts - yizhigopher的博客http://plutolove233.github.io/posts/All Posts | yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Fri, 08 Nov 2024 22:39:44 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70Go指针、函数、结构体、接口以及方法http://plutolove233.github.io/go-basic2/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/go-basic2/指针 和C语言一样,Go中也存在指针,一般采用如下方式来获取变量的地址: 1 2 a := 12 var ptr *int = &amp;a 如果我们想要获取该指针变量指向地址对应的内容时,我Go基本运算符、流程控制、数组与切片以及字典http://plutolove233.github.io/go-basic/Fri, 08 Nov 2024 15:24:06 +0800yizhigopherhttp://plutolove233.github.io/go-basic/上一章节我们已经简单介绍了一个最简单的go程序以及关于变量以及常量的定义。本章节将会继续极少go的基础知识。 基本运算符 go的基础运算符包含 数Hello Go!http://plutolove233.github.io/go-hello/Wed, 30 Oct 2024 10:16:11 +0800yizhigopherhttp://plutolove233.github.io/go-hello/在完成了上个章节的Go编译器安装后,本章节将介绍Go的基础语法,并通过几个例子进行展示。 Hello World 学习每个语言的第一步永远是学会如何在控制台打印😊如何实现多个个容器之间的通讯http://plutolove233.github.io/docker-connection/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/docker-connection/为了进行多个容器之间通讯的实验,首先我们需要创建两个服务,分别打包成不同的镜像,并通过docker-compose进行容器编排。本次实验的项Go语言环境安装http://plutolove233.github.io/go-install/Tue, 08 Oct 2024 15:47:15 +0800yizhigopherhttp://plutolove233.github.io/go-install/在本节中,我们将首先简单介绍下如何安装Go语言环境,以开启Go语言学习之路!我们将简单介绍在Windows环境,Linux环境以及Mac环境Normalizing Flow介绍http://plutolove233.github.io/nf-introduce/Sat, 06 Jan 2024 14:08:15 +0800yizhigopherhttp://plutolove233.github.io/nf-introduce/归一化流基本内容 什么是标准化流:基于一系列可逆变换,生成样本对应的分布 标准化流的基本原理: 变量替换:$p_x(x)=p_z(f_\theta阿里云PAI平台搭建pytorch-cuda11.4环境http://plutolove233.github.io/install/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/install/创建实例 在阿里云平台上创建实例: 其中我们镜像选择为公共的Ubuntu20.04镜像,当然你也可以选择其他配置好的镜像从而简化之后的步骤。 我们go语言小技巧--编译约束http://plutolove233.github.io/tips-1/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/tips-1/简介 我们能在go代码中添加一段注释,用来表示一种编译约束 1 //go:build [tags] 通过这个并且配合go build -tags=&quot;...&quot;的方式,就能实容器运行方式http://plutolove233.github.io/docker-run/Thu, 30 Nov 2023 14:37:10 +0800yizhigopherhttp://plutolove233.github.io/docker-run/如何运行容器 在之前的几篇文章中,我们学习了如何使用docker的指令以及如何进行容器打包,接下来我们就需要了解,该如何运行容器。 最简单的方式 \ No newline at end of file +All Posts - yizhigopher的博客http://plutolove233.github.io/posts/All Posts | yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Sun, 10 Nov 2024 20:11:24 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/在插件中找到Todo Tree,点击设置按钮 找到在settings.json中编辑更多 将上述代码复制到settings.json中即可。 1 2 3vscode Go环境设置http://plutolove233.github.io/go/Sun, 10 Nov 2024 20:11:24 +0800yizhigopherhttp://plutolove233.github.io/go/首先你需要按照这个教程 安装好Go环境。 之后在vscode插件商城中,搜寻Go,选择第一个进行安装。 安装好插件后,按下Ctrl+Shift+PGo指针、函数、结构体、接口以及方法http://plutolove233.github.io/go-basic2/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/go-basic2/指针 和C语言一样,Go中也存在指针,一般采用如下方式来获取变量的地址: 1 2 a := 12 var ptr *int = &amp;a 如果我们想要获取该指针变量指向地址对应的内容时,我Go基本运算符、流程控制、数组与切片以及字典http://plutolove233.github.io/go-basic/Fri, 08 Nov 2024 15:24:06 +0800yizhigopherhttp://plutolove233.github.io/go-basic/上一章节我们已经简单介绍了一个最简单的go程序以及关于变量以及常量的定义。本章节将会继续极少go的基础知识。 基本运算符 go的基础运算符包含 数Hello Go!http://plutolove233.github.io/go-hello/Wed, 30 Oct 2024 10:16:11 +0800yizhigopherhttp://plutolove233.github.io/go-hello/在完成了上个章节的Go编译器安装后,本章节将介绍Go的基础语法,并通过几个例子进行展示。 Hello World 学习每个语言的第一步永远是学会如何在控制台打印😊如何实现多个个容器之间的通讯http://plutolove233.github.io/docker-connection/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/docker-connection/为了进行多个容器之间通讯的实验,首先我们需要创建两个服务,分别打包成不同的镜像,并通过docker-compose进行容器编排。本次实验的项Go语言环境安装http://plutolove233.github.io/go-install/Tue, 08 Oct 2024 15:47:15 +0800yizhigopherhttp://plutolove233.github.io/go-install/在本节中,我们将首先简单介绍下如何安装Go语言环境,以开启Go语言学习之路!我们将简单介绍在Windows环境,Linux环境以及Mac环境Normalizing Flow介绍http://plutolove233.github.io/nf-introduce/Sat, 06 Jan 2024 14:08:15 +0800yizhigopherhttp://plutolove233.github.io/nf-introduce/归一化流基本内容 什么是标准化流:基于一系列可逆变换,生成样本对应的分布 标准化流的基本原理: 变量替换:$p_x(x)=p_z(f_\theta阿里云PAI平台搭建pytorch-cuda11.4环境http://plutolove233.github.io/install/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/install/创建实例 在阿里云平台上创建实例: 其中我们镜像选择为公共的Ubuntu20.04镜像,当然你也可以选择其他配置好的镜像从而简化之后的步骤。 我们go语言小技巧--编译约束http://plutolove233.github.io/tips-1/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/tips-1/简介 我们能在go代码中添加一段注释,用来表示一种编译约束 1 //go:build [tags] 通过这个并且配合go build -tags=&quot;...&quot;的方式,就能实 \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index b01cc19..1871111 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -1 +1 @@ -http://plutolove233.github.io/todotree/2024-01-22T14:48:37+08:00weekly0.5http://plutolove233.github.io/categories/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/tags/golang/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/categories/golang%E4%B9%8B%E8%B7%AF/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/go-basic2/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/posts/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/tags/study/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/tags/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/go-basic/2024-11-08T15:24:06+08:00weekly1http://plutolove233.github.io/go-hello/2024-10-30T10:16:11+08:00weekly0.9http://plutolove233.github.io/tags/docker/2024-10-29T19:44:43+08:00weekly0.9http://plutolove233.github.io/categories/docker/2024-10-29T19:44:43+08:00weekly0.9http://plutolove233.github.io/tags/go/2024-10-29T19:44:43+08:00weekly0.9http://plutolove233.github.io/docker-connection/2024-10-29T19:44:43+08:00weekly0.9http://plutolove233.github.io/go-install/2024-10-08T15:47:15+08:00weekly0.6http://plutolove233.github.io/tags/extension/2024-01-22T14:48:37+08:00weekly0.5http://plutolove233.github.io/tags/vscode/2024-01-22T14:48:37+08:00weekly0.5http://plutolove233.github.io/categories/vscode%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E8%AE%BE%E7%BD%AE/2024-01-22T14:48:37+08:00weekly0.5http://plutolove233.github.io/nf-introduce/2024-01-06T14:08:15+08:00weekly0.5http://plutolove233.github.io/tags/cuda/2023-12-14T15:11:01+08:00weekly0.5http://plutolove233.github.io/categories/cuda/2023-12-14T15:11:01+08:00weekly0.5http://plutolove233.github.io/tags/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/2023-12-14T15:11:01+08:00weekly0.5http://plutolove233.github.io/install/2023-12-14T15:11:01+08:00weekly0.5http://plutolove233.github.io/categories/golang%E5%B0%8F%E6%8A%80%E5%B7%A7/2023-12-04T19:13:11+08:00weekly0.5http://plutolove233.github.io/tips-1/2023-12-04T19:13:11+08:00weekly0.5http://plutolove233.github.io/tags/tips/2023-12-04T19:13:11+08:00weekly0.5http://plutolove233.github.io/docker-run/2023-11-30T14:37:10+08:00weekly0.5http://plutolove233.github.io/docker-cmd/2023-11-14T21:11:15+08:00weekly0.5http://plutolove233.github.io/docker-introduce/2023-11-14T19:45:12+08:00weekly0.5http://plutolove233.github.io/tags/github/2023-11-12T15:39:14+08:00weekly0.5http://plutolove233.github.io/categories/hugo/2023-11-12T15:39:14+08:00weekly0.5http://plutolove233.github.io/workflow/2023-11-12T15:39:14+08:00weekly0.5http://plutolove233.github.io/tags/%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2/2023-11-12T15:39:14+08:00weekly0.5http://plutolove233.github.io/tags/dqn/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/cliffwalking/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/tags/pytorch/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/tags/rl/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/categories/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/tags/math/2023-11-10T15:24:04+08:00weekly0.5http://plutolove233.github.io/concept/2023-11-10T15:24:04+08:00weekly0.5http://plutolove233.github.io/tags/mechine-learning/2023-11-09T21:59:54+08:00weekly0.5http://plutolove233.github.io/linear/2023-11-09T21:59:54+08:00weekly0.5http://plutolove233.github.io/about/2023-11-08T18:58:39+08:00weekly0.5http://plutolove233.github.io/first_post/2023-11-08T18:18:13+08:00weekly0.5http://plutolove233.github.io/tags/hugo/2023-11-08T18:18:13+08:00weekly0.5 \ No newline at end of file +http://plutolove233.github.io/todotree/2024-01-22T14:48:37+08:00weekly0.5http://plutolove233.github.io/categories/2024-11-10T20:11:24+08:00weekly1http://plutolove233.github.io/tags/golang/2024-11-10T20:11:24+08:00weekly1http://plutolove233.github.io/posts/2024-11-10T20:11:24+08:00weekly1http://plutolove233.github.io/tags/2024-11-10T20:11:24+08:00weekly1http://plutolove233.github.io/go/2024-11-10T20:11:24+08:00weekly1http://plutolove233.github.io/categories/vscode%E6%8F%92%E4%BB%B6%E9%85%8D%E7%BD%AE%E8%AE%BE%E7%BD%AE/2024-11-10T20:11:24+08:00weekly1http://plutolove233.github.io/2024-11-10T20:11:24+08:00weekly1http://plutolove233.github.io/categories/golang%E4%B9%8B%E8%B7%AF/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/go-basic2/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/tags/study/2024-11-08T22:39:44+08:00weekly1http://plutolove233.github.io/go-basic/2024-11-08T15:24:06+08:00weekly1http://plutolove233.github.io/go-hello/2024-10-30T10:16:11+08:00weekly0.9http://plutolove233.github.io/tags/docker/2024-10-29T19:44:43+08:00weekly0.9http://plutolove233.github.io/categories/docker/2024-10-29T19:44:43+08:00weekly0.9http://plutolove233.github.io/tags/go/2024-10-29T19:44:43+08:00weekly0.9http://plutolove233.github.io/docker-connection/2024-10-29T19:44:43+08:00weekly0.9http://plutolove233.github.io/go-install/2024-10-08T15:47:15+08:00weekly0.6http://plutolove233.github.io/tags/extension/2024-01-22T14:48:37+08:00weekly0.5http://plutolove233.github.io/tags/vscode/2024-01-22T14:48:37+08:00weekly0.5http://plutolove233.github.io/nf-introduce/2024-01-06T14:08:15+08:00weekly0.5http://plutolove233.github.io/tags/cuda/2023-12-14T15:11:01+08:00weekly0.5http://plutolove233.github.io/categories/cuda/2023-12-14T15:11:01+08:00weekly0.5http://plutolove233.github.io/tags/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/2023-12-14T15:11:01+08:00weekly0.5http://plutolove233.github.io/install/2023-12-14T15:11:01+08:00weekly0.5http://plutolove233.github.io/categories/golang%E5%B0%8F%E6%8A%80%E5%B7%A7/2023-12-04T19:13:11+08:00weekly0.5http://plutolove233.github.io/tips-1/2023-12-04T19:13:11+08:00weekly0.5http://plutolove233.github.io/tags/tips/2023-12-04T19:13:11+08:00weekly0.5http://plutolove233.github.io/docker-run/2023-11-30T14:37:10+08:00weekly0.5http://plutolove233.github.io/docker-cmd/2023-11-14T21:11:15+08:00weekly0.5http://plutolove233.github.io/docker-introduce/2023-11-14T19:45:12+08:00weekly0.5http://plutolove233.github.io/tags/github/2023-11-12T15:39:14+08:00weekly0.5http://plutolove233.github.io/categories/hugo/2023-11-12T15:39:14+08:00weekly0.5http://plutolove233.github.io/workflow/2023-11-12T15:39:14+08:00weekly0.5http://plutolove233.github.io/tags/%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2/2023-11-12T15:39:14+08:00weekly0.5http://plutolove233.github.io/tags/dqn/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/cliffwalking/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/tags/pytorch/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/tags/rl/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/categories/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E4%B9%8B%E8%B7%AF/2023-11-10T20:48:46+08:00weekly0.5http://plutolove233.github.io/tags/math/2023-11-10T15:24:04+08:00weekly0.5http://plutolove233.github.io/concept/2023-11-10T15:24:04+08:00weekly0.5http://plutolove233.github.io/tags/mechine-learning/2023-11-09T21:59:54+08:00weekly0.5http://plutolove233.github.io/linear/2023-11-09T21:59:54+08:00weekly0.5http://plutolove233.github.io/about/2023-11-08T18:58:39+08:00weekly0.5http://plutolove233.github.io/first_post/2023-11-08T18:18:13+08:00weekly0.5http://plutolove233.github.io/tags/hugo/2023-11-08T18:18:13+08:00weekly0.5 \ No newline at end of file diff --git a/tags/extension/index.xml b/tags/extension/index.xml index 8215f0f..b9b8170 100644 --- a/tags/extension/index.xml +++ b/tags/extension/index.xml @@ -1 +1 @@ -extension - Tag - yizhigopher的博客http://plutolove233.github.io/tags/extension/extension - Tag - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Mon, 22 Jan 2024 14:48:37 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 \ No newline at end of file +extension - Tag - yizhigopher的博客http://plutolove233.github.io/tags/extension/extension - Tag - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Mon, 22 Jan 2024 14:48:37 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/在插件中找到Todo Tree,点击设置按钮 找到在settings.json中编辑更多 将上述代码复制到settings.json中即可。 1 2 3 \ No newline at end of file diff --git a/tags/golang/index.html b/tags/golang/index.html index a4a2bbc..180d7c2 100644 --- a/tags/golang/index.html +++ b/tags/golang/index.html @@ -8,7 +8,8 @@
Cancel
文章标签分类 -

 golang

2024

Go语言环境安装 diff --git a/tags/golang/index.xml b/tags/golang/index.xml index 809e504..7c000b0 100644 --- a/tags/golang/index.xml +++ b/tags/golang/index.xml @@ -1 +1 @@ -golang - Tag - yizhigopher的博客http://plutolove233.github.io/tags/golang/golang - Tag - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Fri, 08 Nov 2024 22:39:44 +0800Go指针、函数、结构体、接口以及方法http://plutolove233.github.io/go-basic2/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/go-basic2/指针 和C语言一样,Go中也存在指针,一般采用如下方式来获取变量的地址: 1 2 a := 12 var ptr *int = &amp;a 如果我们想要获取该指针变量指向地址对应的内容时,我Go基本运算符、流程控制、数组与切片以及字典http://plutolove233.github.io/go-basic/Fri, 08 Nov 2024 15:24:06 +0800yizhigopherhttp://plutolove233.github.io/go-basic/上一章节我们已经简单介绍了一个最简单的go程序以及关于变量以及常量的定义。本章节将会继续极少go的基础知识。 基本运算符 go的基础运算符包含 数Hello Go!http://plutolove233.github.io/go-hello/Wed, 30 Oct 2024 10:16:11 +0800yizhigopherhttp://plutolove233.github.io/go-hello/在完成了上个章节的Go编译器安装后,本章节将介绍Go的基础语法,并通过几个例子进行展示。 Hello World 学习每个语言的第一步永远是学会如何在控制台打印😊Go语言环境安装http://plutolove233.github.io/go-install/Tue, 08 Oct 2024 15:47:15 +0800yizhigopherhttp://plutolove233.github.io/go-install/在本节中,我们将首先简单介绍下如何安装Go语言环境,以开启Go语言学习之路!我们将简单介绍在Windows环境,Linux环境以及Mac环境go语言小技巧--编译约束http://plutolove233.github.io/tips-1/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/tips-1/简介 我们能在go代码中添加一段注释,用来表示一种编译约束 1 //go:build [tags] 通过这个并且配合go build -tags=&quot;...&quot;的方式,就能实 \ No newline at end of file +golang - Tag - yizhigopher的博客http://plutolove233.github.io/tags/golang/golang - Tag - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Sun, 10 Nov 2024 20:11:24 +0800vscode Go环境设置http://plutolove233.github.io/go/Sun, 10 Nov 2024 20:11:24 +0800yizhigopherhttp://plutolove233.github.io/go/首先你需要按照这个教程 安装好Go环境。 之后在vscode插件商城中,搜寻Go,选择第一个进行安装。 安装好插件后,按下Ctrl+Shift+PGo指针、函数、结构体、接口以及方法http://plutolove233.github.io/go-basic2/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/go-basic2/指针 和C语言一样,Go中也存在指针,一般采用如下方式来获取变量的地址: 1 2 a := 12 var ptr *int = &amp;a 如果我们想要获取该指针变量指向地址对应的内容时,我Go基本运算符、流程控制、数组与切片以及字典http://plutolove233.github.io/go-basic/Fri, 08 Nov 2024 15:24:06 +0800yizhigopherhttp://plutolove233.github.io/go-basic/上一章节我们已经简单介绍了一个最简单的go程序以及关于变量以及常量的定义。本章节将会继续极少go的基础知识。 基本运算符 go的基础运算符包含 数Hello Go!http://plutolove233.github.io/go-hello/Wed, 30 Oct 2024 10:16:11 +0800yizhigopherhttp://plutolove233.github.io/go-hello/在完成了上个章节的Go编译器安装后,本章节将介绍Go的基础语法,并通过几个例子进行展示。 Hello World 学习每个语言的第一步永远是学会如何在控制台打印😊Go语言环境安装http://plutolove233.github.io/go-install/Tue, 08 Oct 2024 15:47:15 +0800yizhigopherhttp://plutolove233.github.io/go-install/在本节中,我们将首先简单介绍下如何安装Go语言环境,以开启Go语言学习之路!我们将简单介绍在Windows环境,Linux环境以及Mac环境go语言小技巧--编译约束http://plutolove233.github.io/tips-1/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/tips-1/简介 我们能在go代码中添加一段注释,用来表示一种编译约束 1 //go:build [tags] 通过这个并且配合go build -tags=&quot;...&quot;的方式,就能实 \ No newline at end of file diff --git a/tags/index.html b/tags/index.html index e1af9e9..22dfdd8 100644 --- a/tags/index.html +++ b/tags/index.html @@ -8,5 +8,5 @@
Cancel
文章标签分类 -
\ No newline at end of file diff --git a/tags/index.xml b/tags/index.xml index 8da17bb..92f1189 100644 --- a/tags/index.xml +++ b/tags/index.xml @@ -1 +1 @@ -Tags - Tag - yizhigopher的博客http://plutolove233.github.io/tags/Tags - Tag - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Fri, 08 Nov 2024 22:39:44 +0800golanghttp://plutolove233.github.io/tags/golang/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/tags/golang/studyhttp://plutolove233.github.io/tags/study/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/tags/study/dockerhttp://plutolove233.github.io/tags/docker/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/tags/docker/gohttp://plutolove233.github.io/tags/go/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/tags/go/extensionhttp://plutolove233.github.io/tags/extension/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/tags/extension/vscodehttp://plutolove233.github.io/tags/vscode/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/tags/vscode/cudahttp://plutolove233.github.io/tags/cuda/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/tags/cuda/安装教程http://plutolove233.github.io/tags/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/tags/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/tipshttp://plutolove233.github.io/tags/tips/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/tags/tips/githubhttp://plutolove233.github.io/tags/github/Sun, 12 Nov 2023 15:39:14 +0800yizhigopherhttp://plutolove233.github.io/tags/github/ \ No newline at end of file +Tags - Tag - yizhigopher的博客http://plutolove233.github.io/tags/Tags - Tag - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Sun, 10 Nov 2024 20:11:24 +0800golanghttp://plutolove233.github.io/tags/golang/Sun, 10 Nov 2024 20:11:24 +0800yizhigopherhttp://plutolove233.github.io/tags/golang/studyhttp://plutolove233.github.io/tags/study/Fri, 08 Nov 2024 22:39:44 +0800yizhigopherhttp://plutolove233.github.io/tags/study/dockerhttp://plutolove233.github.io/tags/docker/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/tags/docker/gohttp://plutolove233.github.io/tags/go/Tue, 29 Oct 2024 19:44:43 +0800yizhigopherhttp://plutolove233.github.io/tags/go/extensionhttp://plutolove233.github.io/tags/extension/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/tags/extension/vscodehttp://plutolove233.github.io/tags/vscode/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/tags/vscode/cudahttp://plutolove233.github.io/tags/cuda/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/tags/cuda/安装教程http://plutolove233.github.io/tags/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/Thu, 14 Dec 2023 15:11:01 +0800yizhigopherhttp://plutolove233.github.io/tags/%E5%AE%89%E8%A3%85%E6%95%99%E7%A8%8B/tipshttp://plutolove233.github.io/tags/tips/Mon, 04 Dec 2023 19:13:11 +0800yizhigopherhttp://plutolove233.github.io/tags/tips/githubhttp://plutolove233.github.io/tags/github/Sun, 12 Nov 2023 15:39:14 +0800yizhigopherhttp://plutolove233.github.io/tags/github/ \ No newline at end of file diff --git a/tags/vscode/index.xml b/tags/vscode/index.xml index 84ad58d..f0367f5 100644 --- a/tags/vscode/index.xml +++ b/tags/vscode/index.xml @@ -1 +1 @@ -vscode - Tag - yizhigopher的博客http://plutolove233.github.io/tags/vscode/vscode - Tag - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Mon, 22 Jan 2024 14:48:37 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 \ No newline at end of file +vscode - Tag - yizhigopher的博客http://plutolove233.github.io/tags/vscode/vscode - Tag - yizhigopher的博客Hugo -- gohugo.iozh-CNyizhigopher@163.com (yizhigopher)yizhigopher@163.com (yizhigopher)Mon, 22 Jan 2024 14:48:37 +0800Todotree插件设置http://plutolove233.github.io/todotree/Mon, 22 Jan 2024 14:48:37 +0800yizhigopherhttp://plutolove233.github.io/todotree/在插件中找到Todo Tree,点击设置按钮 找到在settings.json中编辑更多 将上述代码复制到settings.json中即可。 1 2 3 \ No newline at end of file diff --git a/todotree/index.html b/todotree/index.html index fb10134..08d6c37 100644 --- a/todotree/index.html +++ b/todotree/index.html @@ -1,5 +1,5 @@ Todotree插件设置 - yizhigopher的博客 -

Contents

Todotree插件设置

Contents -
 1
+

在插件中找到Todo Tree,点击设置按钮

./todo-plugin.png

找到在settings.json中编辑更多

./todo-setting.png

将上述代码复制到settings.json中即可。

 1
  2
  3
  4
@@ -161,5 +161,5 @@
             "iconColour": "#d65d8e",
         },
     },
-

将上述代码复制到settings.json中即可。

\ No newline at end of file diff --git a/todotree/index.md b/todotree/index.md index e3cb0b0..8a7cfd6 100644 --- a/todotree/index.md +++ b/todotree/index.md @@ -1,6 +1,15 @@ # Todotree插件设置 +在插件中找到Todo Tree,点击设置按钮 + +![](./todo-plugin.png) + +找到在`settings.json`中编辑更多 + +![](./todo-setting.png) + +将上述代码复制到`settings.json`中即可。 ```json     "todo-tree.regex.regex": "((%|#|//|