国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

??
yii2源碼學習筆記(二十),yii2源碼學習筆記
? ??? ?? PHP ???? yii2源碼學習筆記(二十),yii2源碼學習筆記_PHP教程

yii2源碼學習筆記(二十),yii2源碼學習筆記_PHP教程

Jul 12, 2016 am 08:49 AM
yii2 。 ???? ? ?? ?? ~? ?? ??? ??

yii2源碼學習筆記(二十),yii2源碼學習筆記

Widget類是所有部件的基類。yii2\base\Widget.php

<span>  1</span> <?<span>php
</span><span>  2</span> <span>/*</span><span>*
</span><span>  3</span> <span> * @link </span><span>http://www.yiiframework.com/</span>
<span>  4</span> <span> * @copyright Copyright (c) 2008 Yii Software LLC
</span><span>  5</span> <span> * @license </span><span>http://www.yiiframework.com/license/</span>
<span>  6</span>  <span>*/</span>
<span>  7</span> 
<span>  8</span> <span>namespace</span> yii\<span>base</span><span>;
</span><span>  9</span> 
<span> 10</span> <span>use Yii;
</span><span> 11</span> <span>use ReflectionClass;
</span><span> 12</span> 
<span> 13</span> <span>/*</span><span>*
</span><span> 14</span> <span> * Widget is the base class for widgets.
</span><span> 15</span> <span> * Widget是所有小部件的基類
</span><span> 16</span> <span> * @property string $id ID of the widget. 小部件標識
</span><span> 17</span> <span> * @property \yii\web\View $view The view object that can be used to render views or view files. Note that the
</span><span> 18</span> <span> * type of this property differs in getter and setter. See [[getView()]] and [[setView()]] for details.
</span><span> 19</span> <span> * 用于渲染視圖或視圖文件的視圖對象 在getter 和 setter中是不同的
</span><span> 20</span> <span> * @property string $viewPath The directory containing the view files for this widget. This property is
</span><span> 21</span> <span> * read-only. 包含此控件的視圖文件目錄
</span><span> 22</span> <span> *
</span><span> 23</span> <span> * @author Qiang Xue <qiang.xue@gmail.com>
</span><span> 24</span> <span> * @since 2.0
</span><span> 25</span>  <span>*/</span>
<span> 26</span> <span>class</span><span> Widget extends Component implements ViewContextInterface
</span><span> 27</span> <span>{
</span><span> 28</span>     <span>/*</span><span>*
</span><span> 29</span> <span>     * @var integer a counter used to generate [[id]] for widgets.
</span><span> 30</span> <span>     * @internal 用于生成widget ID的計數(shù)器
</span><span> 31</span>      <span>*/</span>
<span> 32</span>     <span>public</span> <span>static</span> $counter = <span>0</span><span>;
</span><span> 33</span>     <span>/*</span><span>*
</span><span> 34</span> <span>     * @var string the prefix to the automatically generated widget IDs.
</span><span> 35</span> <span>     * @see getId() 自動生成的前綴
</span><span> 36</span>      <span>*/</span>
<span> 37</span>     <span>public</span> <span>static</span> $autoIdPrefix = <span>'</span><span>w</span><span>'</span><span>;
</span><span> 38</span>     <span>/*</span><span>*
</span><span> 39</span> <span>     * @var Widget[] the widgets that are currently being rendered (not ended). This property
</span><span> 40</span> <span>     * is maintained by [[begin()]] and [[end()]] methods. 目前正在渲染的小部件
</span><span> 41</span> <span>     * @internal
</span><span> 42</span>      <span>*/</span>
<span> 43</span>     <span>public</span> <span>static</span> $stack =<span> [];
</span><span> 44</span> 
<span> 45</span> 
<span> 46</span>     <span>/*</span><span>*
</span><span> 47</span> <span>     * Begins a widget.  開始一個部件
</span><span> 48</span> <span>     * This method creates an instance of the calling class. It will apply the configuration
</span><span> 49</span> <span>     * to the created instance. A matching [[end()]] call should be called later.
</span><span> 50</span> <span>     * 將應(yīng)用配置文件創(chuàng)建調(diào)用類的實例,與[end()]方法相對應(yīng)
</span><span> 51</span> <span>     * @param array $config name-value pairs that will be used to initialize the object properties
</span><span> 52</span> <span>     * 用于初始化屬性的參數(shù)
</span><span> 53</span> <span>     * @return static the newly created widget instance 靜態(tài)新創(chuàng)建的部件實例
</span><span> 54</span>      <span>*/</span>
<span> 55</span>     <span>public</span> <span>static</span> function begin($config =<span> [])
</span><span> 56</span> <span>    {
</span><span> 57</span>         $config[<span>'</span><span>class</span><span>'</span>] = get_called_class();<span>//</span><span>后期靜態(tài)綁定類的名稱</span>
<span> 58</span>         <span>/*</span><span> @var $widget Widget </span><span>*/</span>
<span> 59</span>         $widget = Yii::createObject($config);<span>//</span><span>通過類名和傳入的配置,實例化調(diào)用類</span>
<span> 60</span>         <span>static</span>::$stack[] = $widget;<span>//</span><span>將對象放入正在渲染的部件堆棧中</span>
<span> 61</span> 
<span> 62</span>         <span>return</span><span> $widget;
</span><span> 63</span> <span>    }
</span><span> 64</span> 
<span> 65</span>     <span>/*</span><span>*
</span><span> 66</span> <span>     * Ends a widget.   結(jié)束小部件
</span><span> 67</span> <span>     * Note that the rendering result of the widget is directly echoed out.渲染結(jié)果是直接呼應(yīng)的
</span><span> 68</span> <span>     * @return static the widget instance that is ended. 靜態(tài)結(jié)束的部件實例。
</span><span> 69</span> <span>     * @throws InvalidCallException if [[begin()]] and [[end()]] calls are not properly nested
</span><span> 70</span>      <span>*/</span>
<span> 71</span>     <span>public</span> <span>static</span><span> function end()
</span><span> 72</span> <span>    {
</span><span> 73</span>         <span>if</span> (!empty(<span>static</span>::$stack)) {<span>//</span><span>正在呈現(xiàn)的小部件堆棧中存在調(diào)用類實例</span>
<span> 74</span>             $widget = array_pop(<span>static</span>::$stack);<span>//</span><span>從堆棧中刪除最后一個實例</span>
<span> 75</span>             <span>if</span> (get_class($widget) ===<span> get_called_class()) {
</span><span> 76</span>                 echo $widget->run(); <span>//</span><span>如果刪除的實例類名和當前調(diào)用類名相同,輸出小部件的內(nèi)容</span>
<span> 77</span>                 <span>return</span><span> $widget;
</span><span> 78</span>             } <span>else</span><span> {
</span><span> 79</span>                 <span>throw</span> <span>new</span> InvalidCallException(<span>"</span><span>Expecting end() of </span><span>"</span> . get_class($widget) . <span>"</span><span>, found </span><span>"</span><span> . get_called_class());
</span><span> 80</span> <span>            }
</span><span> 81</span>         } <span>else</span><span> {
</span><span> 82</span>             <span>throw</span> <span>new</span> InvalidCallException(<span>"</span><span>Unexpected </span><span>"</span> . get_called_class() . <span>'</span><span>::end() call. A matching begin() is not found.</span><span>'</span><span>);
</span><span> 83</span> <span>        }
</span><span> 84</span> <span>    }
</span><span> 85</span> 
<span> 86</span>     <span>/*</span><span>*
</span><span> 87</span> <span>     * Creates a widget instance and runs it.   創(chuàng)建一個部件實例,并運行
</span><span> 88</span> <span>     * The widget rendering result is returned by this method. 返回部件渲染的結(jié)果。
</span><span> 89</span> <span>     * @param array $config name-value pairs that will be used to initialize the object properties
</span><span> 90</span> <span>     * 用于初始化對象屬性的參數(shù)
</span><span> 91</span> <span>     * @return string the rendering result of the widget. 控件的渲染結(jié)果。
</span><span> 92</span>      <span>*/</span>
<span> 93</span>     <span>public</span> <span>static</span> function widget($config =<span> [])
</span><span> 94</span> <span>    {
</span><span> 95</span>         ob_start(); <span>//</span><span>打開輸出緩沖區(qū)</span>
<span> 96</span>         ob_implicit_flush(<span>false</span>);<span>//</span><span>關(guān)閉絕對刷新</span>
<span> 97</span>         <span>/*</span><span> @var $widget Widget </span><span>*/</span>
<span> 98</span>         $config[<span>'</span><span>class</span><span>'</span>] = get_called_class(); <span>//</span><span>獲取調(diào)用類的類名</span>
<span> 99</span>         $widget = Yii::createObject($config);   <span>//</span><span>實例化類</span>
<span>100</span>         $<span>out</span> = $widget->run();<span>//</span><span>運行部件</span>
<span>101</span> 
<span>102</span>         <span>return</span> ob_get_clean() . $<span>out</span>; <span>//</span><span>返回內(nèi)部緩沖區(qū)的內(nèi)容,關(guān)閉緩沖區(qū)</span>
<span>103</span> <span>    }
</span><span>104</span> 
<span>105</span>     <span>private</span><span> $_id;
</span><span>106</span> 
<span>107</span>     <span>/*</span><span>*
</span><span>108</span> <span>     * Returns the ID of the widget. 返回插件的標識
</span><span>109</span> <span>     * @param boolean $autoGenerate whether to generate an ID if it is not set previously
</span><span>110</span> <span>     * 是否生成一個唯一標識,如果沒有設(shè)置
</span><span>111</span> <span>     * @return string ID of the widget. 部件唯一標識
</span><span>112</span>      <span>*/</span>
<span>113</span>     <span>public</span> function getId($autoGenerate = <span>true</span><span>)
</span><span>114</span> <span>    {
</span><span>115</span>         <span>if</span> ($autoGenerate && $<span>this</span>->_id === <span>null</span><span>) {
</span><span>116</span>             <span>//</span><span>如果標識為空,并且設(shè)置為允許自動生成標識,自動生成</span>
<span>117</span>             $<span>this</span>->_id = <span>static</span>::$autoIdPrefix . <span>static</span>::$counter++<span>;
</span><span>118</span> <span>        }
</span><span>119</span> 
<span>120</span>         <span>return</span> $<span>this</span>-><span>_id;
</span><span>121</span> <span>    }
</span><span>122</span> 
<span>123</span>     <span>/*</span><span>*
</span><span>124</span> <span>     * Sets the ID of the widget. 設(shè)置小部件標識
</span><span>125</span> <span>     * @param string $value id of the widget. 部件的標識。
</span><span>126</span>      <span>*/</span>
<span>127</span>     <span>public</span><span> function setId($value)
</span><span>128</span> <span>    {
</span><span>129</span>         $<span>this</span>->_id =<span> $value;
</span><span>130</span> <span>    }
</span><span>131</span> 
<span>132</span>     <span>private</span><span> $_view;
</span><span>133</span> 
<span>134</span>     <span>/*</span><span>*
</span><span>135</span> <span>     * Returns the view object that can be used to render views or view files.返回視圖對象
</span><span>136</span> <span>     * The [[render()]] and [[renderFile()]] methods will use
</span><span>137</span> <span>     * this view object to implement the actual view rendering.
</span><span>138</span> <span>     * [render()]和[renderFile()]方法用視圖對象實現(xiàn)實際的視圖顯示。
</span><span>139</span> <span>     * If not set, it will default to the "view" application component.
</span><span>140</span> <span>     * @return \yii\web\View the view object that can be used to render views or view files.
</span><span>141</span>      <span>*/</span>
<span>142</span>     <span>public</span><span> function getView()
</span><span>143</span> <span>    {
</span><span>144</span>         <span>if</span> ($<span>this</span>->_view === <span>null</span><span>) {
</span><span>145</span>             $<span>this</span>->_view = Yii::$app->getView();<span>//</span><span>如果視圖對象為空,調(diào)用getView()取得視圖對象實例</span>
<span>146</span> <span>        }
</span><span>147</span> 
<span>148</span>         <span>return</span> $<span>this</span>-><span>_view;
</span><span>149</span> <span>    }
</span><span>150</span> 
<span>151</span>     <span>/*</span><span>*
</span><span>152</span> <span>     * Sets the view object to be used by this widget. 設(shè)置當前部件調(diào)用的視圖對象實例
</span><span>153</span> <span>     * @param View $view the view object that can be used to render views or view files.
</span><span>154</span>      <span>*/</span>
<span>155</span>     <span>public</span><span> function setView($view)
</span><span>156</span> <span>    {
</span><span>157</span>         $<span>this</span>->_view = $view;<span>//</span><span>要用的視圖對象</span>
<span>158</span> <span>    }
</span><span>159</span> 
<span>160</span>     <span>/*</span><span>*
</span><span>161</span> <span>     * Executes the widget. 執(zhí)行部件
</span><span>162</span> <span>     * @return string the result of widget execution to be outputted.
</span><span>163</span> <span>     * 控件執(zhí)行的結(jié)果輸出。
</span><span>164</span>      <span>*/</span>
<span>165</span>     <span>public</span><span> function run()
</span><span>166</span> <span>    {
</span><span>167</span> <span>    }
</span><span>168</span> 
<span>169</span>     <span>/*</span><span>*
</span><span>170</span> <span>     * Renders a view.
</span><span>171</span> <span>     * The view to be rendered can be specified in one of the following formats:
</span><span>172</span> <span>     * 渲染一個視圖   實際調(diào)用View類中的同名方法 渲染的視圖可以用下列方式指定路徑
</span><span>173</span> <span>     * - path alias (e.g. "@app/views/site/index");
</span><span>174</span> <span>     * - absolute path within application (e.g. "//site/index"): the view name starts with double slashes.
</span><span>175</span> <span>     *   The actual view file will be looked for under the [[Application::viewPath|view path]] of the application.
</span><span>176</span> <span>     * - absolute path within module (e.g. "/site/index"): the view name starts with a single slash.
</span><span>177</span> <span>     *   The actual view file will be looked for under the [[Module::viewPath|view path]] of the currently
</span><span>178</span> <span>     *   active module.
</span><span>179</span> <span>     * - relative path (e.g. "index"): the actual view file will be looked for under [[viewPath]].
</span><span>180</span> <span>     *
</span><span>181</span> <span>     * If the view name does not contain a file extension, it will use the default one `.php`.
</span><span>182</span> <span>     *
</span><span>183</span> <span>     * @param string $view the view name.   視圖名
</span><span>184</span> <span>     * @param array $params the parameters (name-value pairs) that should be made available in the view.
</span><span>185</span> <span>     * 在視圖中可用的參數(shù)
</span><span>186</span> <span>     * @return string the rendering result. 渲染結(jié)果
</span><span>187</span> <span>     * @throws InvalidParamException if the view file does not exist.
</span><span>188</span>      <span>*/</span>
<span>189</span>     <span>public</span> function render($view, $<span>params</span> =<span> [])
</span><span>190</span> <span>    {
</span><span>191</span>         <span>//</span><span>調(diào)用view類中的render渲染指定的視圖</span>
<span>192</span>         <span>return</span> $<span>this</span>->getView()->render($view, $<span>params</span>, $<span>this</span><span>);
</span><span>193</span> <span>    }
</span><span>194</span> 
<span>195</span>     <span>/*</span><span>*
</span><span>196</span> <span>     * Renders a view file. 渲染一個視圖文件 同上
</span><span>197</span> <span>     * @param string $file the view file to be rendered. This can be either a file path or a path alias.
</span><span>198</span> <span>     * @param array $params the parameters (name-value pairs) that should be made available in the view.
</span><span>199</span> <span>     * @return string the rendering result.
</span><span>200</span> <span>     * @throws InvalidParamException if the view file does not exist.
</span><span>201</span>      <span>*/</span>
<span>202</span>     <span>public</span> function renderFile($file, $<span>params</span> =<span> [])
</span><span>203</span> <span>    {
</span><span>204</span>         <span>return</span> $<span>this</span>->getView()->renderFile($file, $<span>params</span>, $<span>this</span><span>);
</span><span>205</span> <span>    }
</span><span>206</span> 
<span>207</span>     <span>/*</span><span>*
</span><span>208</span> <span>     * Returns the directory containing the view files for this widget. 返回視圖文件路徑
</span><span>209</span> <span>     * The default implementation returns the 'views' subdirectory under the directory containing the widget class file.
</span><span>210</span> <span>     * @return string the directory containing the view files for this widget.
</span><span>211</span>      <span>*/</span>
<span>212</span>     <span>public</span><span> function getViewPath()
</span><span>213</span> <span>    {
</span><span>214</span>         $<span>class</span> = <span>new</span> ReflectionClass($<span>this</span><span>);
</span><span>215</span>         <span>//</span><span>取得部件類文件的目錄,拼接為視圖目錄</span>
<span>216</span>         <span>return</span> dirname($<span>class</span>->getFileName()) . DIRECTORY_SEPARATOR . <span>'</span><span>views</span><span>'</span><span>;
</span><span>217</span> <span>    }
</span><span>218</span> }

?

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1137258.htmlTechArticleyii2源碼學習筆記(二十),yii2源碼學習筆記 Widget類是所有部件的基類。yii2\base\Widget.php 1 ? php 2 /* * 3 * @link http://www.yiiframework.com/ 4 * @copyri...
? ????? ??
? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

? AI ??

Undresser.AI Undress

Undresser.AI Undress

???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover

AI Clothes Remover

???? ?? ???? ??? AI ?????.

Video Face Swap

Video Face Swap

??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

???

??? ??

???++7.3.1

???++7.3.1

???? ?? ?? ?? ???

SublimeText3 ??? ??

SublimeText3 ??? ??

??? ??, ???? ?? ????.

???? 13.0.1 ???

???? 13.0.1 ???

??? PHP ?? ?? ??

???? CS6

???? CS6

??? ? ?? ??

SublimeText3 Mac ??

SublimeText3 Mac ??

? ??? ?? ?? ?????(SublimeText3)

???

??? ??

?? ????
1747
16
Cakephp ????
1600
56
??? ????
1542
28
PHP ????
1400
31
???
Xiaohongshu ??? ???? ?? Xiaohongshu ??? ???? ?? Mar 21, 2024 pm 08:12 PM

Xiaohongshu ??? ???? ?? Xiaohongshu ??? ??? ??? ? ????. ???? ???? Xiaohongshu ?? ?? ??? ?? ??? ??? ???? ?????. ???! Xiaohongshu ?? ???? Xiaohongshu ?? ?? ?? 1. ?? Xiaohongshu ?? ?? ?? ???? ???? ??? ??? ?? [Me]? ???? ?? ???? ?????. 2. ?? ?? ? ???? ??? ?? ?? ???? ?????. 3. ?? ???? ???? ??? ??? ?? [? 3?]? ?????. 4. ????? ?? ???? ??? ???? [??]? ???? ?????.

Xiaohongshu? ??? ??? ??? ?? ??? ?? ???? ?? ?? ??? ?? ? ?? ??? ?????? Xiaohongshu? ??? ??? ??? ?? ??? ?? ???? ?? ?? ??? ?? ? ?? ??? ?????? Mar 21, 2024 pm 09:30 PM

Xiaohongshu ????? ?? ??? ??? ??? ??? ???? ??? ??? ? ?? ?? ????. ?? ??? ?? ?? ????? ????? ????. ?? ??, ??? ??? ?? ???? ?? ???? "?????? ??? ??? ??? ?? ??? ?? ????"?? ??? ???? ??? ??? ??????. 1. Xiaohongshu?? ??? ??? ??? ?? ??? ?? ???? ??, ???? ????. ??? ??? ?? ???? ???? ?? ???? ???? ????. ?? ??? ??? ?? ?? ?? ??? ?? ??? ? ????. ?? ??? ???? ?? ????. Xiaohongshu ?? ?? "?" → "??" → "?? ???"? ???? ??? ?? ??? ? ? ????. ????? ??? ??? ??? ?? ?? ? ????. 3.?? ?????. ??? ??

Xiaohongshu? ??? ?? ??? ???? ?? Xiaohongshu? ??? ?? ??? ???? ??? ?? ???? Xiaohongshu? ??? ?? ??? ???? ?? Xiaohongshu? ??? ?? ??? ???? ??? ?? ???? Mar 12, 2024 am 10:40 AM

Xiaohongshu ??? ?? ??? ???? ?? Xiaohongshu ???? ???? ??? ???? ??? ? ?? ?? ??? ??? ? ? ?? ??? ? ??? ?? ?? ? ?? ?? ??? ?? ???? ?? ????. ? ???? ?? ?? ??? ????, ??? ???? ??, ??? ??? ???? ?? ??? ? ? ????. ? ?? ??? ?? ??? ?? ???? ?? ? ?? ??? ?? ???? ??? ??? ? ?? ?????. ???? ???? ???? ???? ?? ?? ??? ??? ??? ? ????. ??? ?? ??? ???? ??? ???????. ???? ??? ?? ??? ???? ?? ??? ?????? ?? ???. ? ????? ?????

jQuery AJAX ?? 403 ??? ???? ??? ?????? jQuery AJAX ?? 403 ??? ???? ??? ?????? Feb 23, 2024 pm 04:27 PM

jQueryAJAX ?? 403 ??? ???? ??? ?????? ? ??????? ??? ? jQuery? ?? ??? ??? ??? ? ?????. ??? ??? jQueryAJAX? ??? ? ???? ???? ?????? ???? ?? ?? 403? ??? ? ????. ?? ????? ?? ? ?? ???? ?? ????? ??? ???? ??? ????. ? ????? jQueryAJAX ?? 403 ??? ???? ??? ???? ???? ?? ??? ?????. 1. ???

C ??? ??? ???: ?????? ???? ???? C ??? ??? ???: ?????? ???? ???? Feb 24, 2024 pm 11:21 PM

C ?? ??? ??: ?????? ???? ?? ? ???? ?? ???? ??? ?????? ?? ??? ?? ??? ?????. ?? ????? ?? ??? C ??? ?? ???????? ??? ?? ????. C ??? ???, ??? ? ??? ?? ??? ?? ???? ????? ??? ???? ? ?? ??? C ?????. ? ????? C ?? ??? ??? C ?? ??? ?? ?????? ???? ???? ??? ?? ?????. ??, C ?? ??? ??? ???? ????. C??? ?? ????? ??? ??

???? ??? ???? ??? ?? ?????? ???? ??? ???? ??? ?? ?????? Mar 19, 2024 pm 08:52 PM

Word?? ??? ??? ??? ? ?? ??? ???? ?? ??? ????. ?? ???? Word?? ??? ???? ??? ??? ??? ????? Word?? ??? ???? ??? ?? ????? ???? ?????? ??????. ??? ? ????? ??? ??? ????. ?? ????? Word ?????? ? ?? ????? ??? ?? ?? ??? ???? ?? ??? ??? ?????. ?? ?? ?? ?????. 2. [??]? ??? ?, ???? [??]? ?????. ?? ??? ??? ?? ?? 3. ??? [? ?? ??]? ?????. ?? ??? ??? ?? ?? 4. [??]? ??? ? ?? ??? ?????. ?? ??? ??? ?? ??? ??:

PHP ??? ?? ??? ?? ? ???? ?? ????? ???? ??? ?????? PHP ??? ?? ??? ?? ? ???? ?? ????? ???? ??? ?????? Mar 11, 2024 am 10:54 AM

PHP ??? ?? ??? ?? ? ???? ?? ????? ???? ??? ?????? PHP? ?? ? ???? ???? ? ????? ???? ?? ? ???? ?????. ???? PHP ??? ???? ??? ? ?? ?? PHP ??? ???? ??? ? ?? HTML ???? ????? ?? ?????. ??? ??? PHP ??? ?? ??? ???? ?? ????? ?? ???? ?? ?? ????. ? ????? PHP ??? ?? ??? ?? ? ???? ?? ????? ???? ??? ?????. PHP??? ??? ??? ? ????.

Go ??? ?? ??? ???? ???? Go ??? ?? ??? ???? ???? Mar 27, 2024 pm 05:03 PM

??: Go ??? ?? ??? ???? ????. Go ??? ???? ???? ????? ??? ????? ?????. Go ???? main ??? ?? ????, ?? Go ????? ????? ????? main ??? ???? ???. ? ???? Go ??? ?? ??? ???? ??? ??? ???? ???? ?? ??? ?????. 1. ?? Go ?? ?? ??? ???? ???. ?? ????(https://golang.org)? ????? ???.

See all articles