Go学习笔记01-语言

论坛 期权论坛     
选择匿名的用户   2021-5-22 22:24   227   0
<div class="blogpost-body" id="cnblogs_post_body">
<h2 id="articleHeader1">1.1 变量</h2>
<p>Go 是静态类型语言,不能在运行期改变变量类型。使用关键字 var 定义变量,自动初始化为零值。如果提供初始化值,可省略变量类型,由编译器自动推断。</p>
<pre class="hljs go"><span class="hljs-keyword">var x <span class="hljs-keyword">int
<span class="hljs-keyword">var f <span class="hljs-keyword">float32 &#61; <span class="hljs-number">1.6
<span class="hljs-keyword">var s &#61; <span class="hljs-string">&#34;abc&#34;</span></span></span></span></span></span></span></pre>
<p>在函数内部,可用更简略的 &#34;:&#61;&#34; 方式定义变量。</p>
<pre class="blockcode"><code class="language-css"><span class="hljs-selector-tag">func <span class="hljs-selector-tag">main() {
    <span class="hljs-attribute">x :&#61; <span class="hljs-number">123 // 注意检查,是定义新局部变量,还是修改全局变量。该方式容易造成错误。
}</span></span></span></span></code></pre>
<p>可一次定义多个变量。</p>
<pre class="hljs go"><span class="hljs-keyword">var x, y, z <span class="hljs-keyword">int
<span class="hljs-keyword">var s, n &#61; <span class="hljs-string">&#34;abc&#34;, <span class="hljs-number">123

<span class="hljs-keyword">var ( a <span class="hljs-keyword">int b <span class="hljs-keyword">float32 ) <span class="hljs-keyword">func main() { n, s :&#61; <span class="hljs-number">0x1234, <span class="hljs-string">&#34;Hello, World!&#34; <span class="hljs-built_in">println(x, s, n) }</span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p>多变量赋值时,先计算所有相关值,然后再从左到右依次赋值。</p>
<pre class="hljs fortran"><span class="hljs-keyword">data, i :&#61; [<span class="hljs-number">3]<span class="hljs-built_in">int{<!-- --><span class="hljs-number">0, <span class="hljs-number">1, <span class="hljs-number">2}, <span class="hljs-number">0 i, <span class="hljs-keyword">data[i] &#61; <span class="hljs-number">2, <span class="hljs-number">100 // (i &#61; <span class="hljs-number">0) -&gt; (i &#61; <span class="hljs-number">2), (<span class="hljs-keyword">data[<span class="hljs-number">0] &#61; <span class="hljs-number">100)</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p>特殊只写变量 &#34;_&#34;,用于忽略值占位。</p>
<pre class="hljs go"><span class="hljs-keyword">func test() (<span class="hljs-keyword">int, <span class="hljs-keyword">string) {
    <span class="hljs-keyword">return <span class="hljs-number">1, <span class="hljs-string">&#34;abc&#34; } <span class="hljs-keyword">func main() { _, s :&#61; test() <span class="hljs-built_in">println(s) }</span></span></span></span></span></span></span></span></pre>
<p>编译器会将未使用的局部变量当做错误。</p>
<pre class="hljs go"><span class="hljs-keyword">var s <span class="hljs-keyword">string <span class="hljs-comment">// 全局变量没问题。

<span class="hljs-keyword">func main() {
    i :&#61; <span class="hljs-number">0 <span class="hljs-comment">// Error: i declared and not used。(可使用 &#34;_ &#61; i&#34; 规避) }</span></span></span></span></span></span></pre>
<p>注意重新赋值与定义新同名变量的区别。</p>
<pre class="hljs go">s :&#61; <span class="hljs-string">&#34;abc&#34;
<span class="hljs-built_in">println(&amp;s)

s, y :&#61; <span class="hljs-string">&#34;hello&#34;, <span class="hljs-number">20 <span class="hljs-comment">// 重新赋值: 与前 s 在同一层次的代码块中,且有新的变量被定义。
<span class="hljs-built_in">println(&amp;s, y) <span class="hljs-comment">// 通常函数多返回值 err 会被重复使用。 { s, z :&#61; <span class="hljs-number">1000, <span class="hljs-number">30 <span class="hljs-comment">// 定义新同名变量: 不在同一层次代码块。 <span class="hljs-built_in">println(&amp;s, z) }</span></span></span></span></span></span></span></span></span></span></span></pre>
<p>输出:</p>
<pre class="hljs">0x2210230f30
0x2210230f30 20
0x2210230f18 30</pre>
<h2 id="articleHeader2">1.2 常量</h2>
<p>常量值必须是编译期可确定的数字、字符串、布尔值。</p>
<pre class="hljs go"><span class="hljs-keyword">const x, y <span class="hljs-keyword">int &#61; <span class="hljs-number">1, <span class="hljs-number">2 <span class="hljs-comment">// 多常量初始化
<span class="hljs-keyword">const s &#61; <span class="hljs-string">&#34;Hello, World!&#34; <span class="hljs-comment">// 类型推断 <span class="hljs-keyword">const ( <span class="hljs-comment">// 常量组 a, b &#61; <span class="hljs-number">10, <span class="hljs-number">100 c <span class="hljs-keyword">bool &#61; <span class="hljs-literal">false ) <span class="hljs-keyword">func main() { <span class="hljs-keyword">const x &#61; <span class="hljs-string">&#34;xxx&#34; <span class="hljs-comment">// 未使用局部常量不会引发编译错误。 }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></pre>
<p>不支持 1UL、2LL 这样的类型后缀。</p>
<p>在常量组中,如不提供类型和初始化值&#x
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP