GO语言从入门到达人--GO语言圣经--入门
1.Go的一些基本规范
<ul><li>GO是编译型语言。Go的工具链讲程序的源文件转变为机器相关的原生二进制</li><li>GO原生地支持Unicode,支持任何国家的语言。</li><li>GO语言其实由三部分组成 : 1.声明自己属于哪个包 package main2.导入其他包 import (“fmt”)
3.程序本身 func main(){ 代码块 }
一般import后面是组成函数 – func 函数 const 常量 var 变量 type 类型
GO语言不适用分号进行结尾。</li></ul>
GO语言的" { "是不可以单独一行的,必须与func保持一致
总结一下:
GO语言的规范相对于比较固定,每次代码运行前都会由gofmt包进行代码规范检测,目前goland里面自带这种包,所以我们写出来通过编译的GO语言代码,都是通过规范的。
1.2命令行参数
举一个例子
var 关键字声明了两个string类型的变量s sep,GO语言声明变量时候,如果没有给定不过初始值。系统会默认给定初始值
1.数字类型默认值 0
2.字符串类型默认值 “”
GO语言中是不存在类似于C语言的 i操作,而for语言是GO语言唯一的for循环语句
那如果我想在GO语言使用while语句怎么办呢?
<pre><code class="lang-go hljs"><span class="token keyword">for</span><span class="token punctuation">{</span> <span class="token punctuation">}</span><span class="token comment">//这就while语句</span> <span class="token keyword">for</span><span class="token punctuation">{</span> <span class="token punctuation">}</span><span class="token comment">//这也是一个死循环,可以通过break return语句进行终止</span> </code></pre>变量的声明方式
<pre><code class="lang-go hljs"> <span class="token keyword">var</span> s<span class="token punctuation">,</span>sep <span class="token builtin">string</span> <span class="token keyword">var</span> s <span class="token operator">=</span> <span class="token string">""</span> sep<span class="token operator">:=</span><span class="token string">""</span> <span class="token keyword">var</span> s <span class="token builtin">string</span> <span class="token operator">=</span> <span class="token string">""</span> </code></pre>程序结构
如果一个函数名称是大写的是可以导出的,如果名称小写就是私有的简单粗暴
<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">const</span> freezingF<span class="token punctuation">,</span>bollingF <span class="token operator">=</span> <span class="token number">32.0</span><span class="token punctuation">,</span><span class="token number">212.0</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%g℉=%g℃"</span><span class="token punctuation">,</span>freezingF<span class="token punctuation">,</span><span class="token function">fToc</span><span class="token punctuation">(</span>freezingF<span class="token punctuation">)</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"%g℉=%g℃"</span><span class="token punctuation">,</span>bollingF<span class="token punctuation">,</span><span class="token function">fToc</span><span class="token punctuation">(</span>bollingF<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">fToc</span><span class="token punctuation">(</span> f <span class="token builtin">float64</span><span class="token punctuation">)</span><span class="token builtin">float64</span><span class="token punctuation">{</span> <span class="token keyword">return</span><span class="token punctuation">(</span>f <span class="token operator">-</span> <span class="token number">32</span><span class="token punctuation">)</span> <span class="token operator">*</span><span class="token number">5</span> <span class="token operator">/</span> <span class="token number">9</span> <span class="token punctuation">}</span> </code></pre>声明一个函数的简单程序
变量
零值机制保障了所有的变量是良好的定义,GO里面不存在未初始化的变量
:= 局部变量尽量使用这个声明
指针
指针的值指向的是一个地址,一个指针指示值所保存的位置,不是所有值都是有地址,但是所有变量都有
输出p就是x的地址 *p则是指针的值
第一次输出结果与第二次输出结果是不一样,说明指针的地址是不断变化的
关于flag命令行的简单介绍</li></ul><pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"flag"</span> <span class="token string">"fmt"</span> <span class="token string">"strings"</span> <span class="token punctuation">)</span> <span class="token keyword">var</span> n <span class="token operator">=</span> flag<span class="token punctuation">.</span><span class="token function">Bool</span><span class="token punctuation">(</span><span class="token string">"n"</span><span class="token punctuation">,</span><span class="token boolean">false</span><span class="token punctuation">,</span><span class="token string">"omit tralling newline"</span><span class="token punctuation">)</span> <span class="token keyword">var</span> sep <span class="token operator">=</span> flag<span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token string">"s"</span><span class="token punctuation">,</span><span class="token string">" "</span><span class="token punctuation">,</span><span class="token string">"separator"</span><span class="token punctuation">)</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> flag<span class="token punctuation">.</span><span class="token function">Parse</span><span class="token punctuation">(</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Print</span><span class="token punctuation">(</span>strings<span class="token punctuation">.</span><span class="token function">Join</span><span class="token punctuation">(</span>flag<span class="token punctuation">.</span><span class="token function">Args</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token operator">*</span>sep<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">if</span> <span class="token operator">!</span><span class="token operator">*</span>n<span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre>
flag.Bool判断是不是和预设值的命令参数匹配,如果是false输出后面的值
flag.String判断参数是否与预设的值相匹配,如果不匹配,则输出后面的值
new函数
<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> p <span class="token operator">:=</span> <span class="token function">new</span><span class="token punctuation">(</span><span class="token builtin">int</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>p<span class="token punctuation">)</span> <span class="token operator">*</span>p <span class="token operator">=</span> <span class="token number">2</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token operator">*</span>p<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>new函数创建的是指针,和指针一样,new每次出来的地址都是不一样的
GO语言的GC机制
<blockquote>每个包级别的变量和其他方式的引用可以找到变量。如果变量路径不存在,那么变量变得
不可访问,因此它不会其他的计算过程。
变量的生命周期是通过它是否可达来确定的
赋值
左 = 右
多重赋值
x,y =y,x
类型声明
<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">type</span> Celsius <span class="token builtin">float64</span> <span class="token keyword">type</span> Fahrenheit <span class="token builtin">float64</span> <span class="token keyword">const</span> <span class="token punctuation">(</span> AbsoluteZeroC Celsius <span class="token operator">=</span> <span class="token operator">-</span><span class="token number">273.15</span> FreezingC Celsius <span class="token operator">=</span> <span class="token number">0</span> BollingC Celsius <span class="token operator">=</span> <span class="token number">100</span> <span class="token punctuation">)</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token function">CTof</span><span class="token punctuation">(</span>AbsoluteZeroC<span class="token punctuation">)</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token function">CTof</span><span class="token punctuation">(</span>FreezingC<span class="token punctuation">)</span><span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token function">CTof</span><span class="token punctuation">(</span>BollingC<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">CTof</span><span class="token punctuation">(</span>c Celsius<span class="token punctuation">)</span>Fahrenheit<span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token function">Fahrenheit</span><span class="token punctuation">(</span>c<span class="token operator">*</span><span class="token number">9</span><span class="token operator">/</span><span class="token number">5</span> <span class="token operator"> </span> <span class="token number">32</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>包和文件
导入的包名 都是从$GOPATH/src/目录下面导入的
包的初始化,在所有包的初始化完毕后,main包才初始化
简述了。。
基本数据
整数:int int uint uintptr,unintptr其大小并不明确但是足够存放完整指针,所以用于底层编程
当整型超出范围,编译器无法通过编译。
<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> apples <span class="token builtin">int16</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token keyword">var</span> orange <span class="token builtin">int64</span> <span class="token operator">=</span> <span class="token number">2</span> <span class="token keyword">var</span> fruit <span class="token operator">=</span> apples <span class="token operator"> </span> orange fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>fruit<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>这种写法是无法通过编译得,虽然是同样的int类型,但是位数不匹配,所以无法进行运算,但是我们将无法匹配得代码进行显示转换就可以进行运算了
<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">var</span> apples <span class="token builtin">int16</span> <span class="token operator">=</span> <span class="token number">1</span> <span class="token keyword">var</span> orange <span class="token builtin">int64</span> <span class="token operator">=</span> <span class="token number">2</span> <span class="token keyword">var</span> fruit <span class="token operator">=</span> <span class="token function">int</span><span class="token punctuation">(</span>apples<span class="token punctuation">)</span> <span class="token operator"> </span> <span class="token function">int</span><span class="token punctuation">(</span>orange<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>fruit<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>这就是可以的。
浮点数
GO具有两种大小的浮点数float32 float64,浮点值能方便地通过printf的谓词%g输出,该谓词会自动保持足够的精度,并选择简洁的方式,但是对于数据表,%e或%f的形式可能更适合
float32的有效数字大约有6位,float64的有效数字大约有15位,绝大多数情况下,优先选择float64
这种展示的结果就是true
字符串
字符串是不可变的字节序列,它可以包含任意的数据,包括0值字节
到底不可变意味着什么呢?
答:不可变意味着两个字符串能安全地共用一段底层内存,使得赋值任何长度字符串的开销都是低廉的。类似地,字符串s及其子串可以安全地公用数据,因此字串生成的开销都低廉,这两种情况下都没有分配新的内存
复数
real取得实部 imag取得虚部
这一章虽然东西很多,可是我懒得写了。。。
您可能感兴趣的文章:
想系统学习GO语言(Golang
go run main.go 参数_Go语言入门:Hello world
Golang笔记:语法,并发思想,web开发,Go微服务相关
Go 语言一本通
从零开始学习GO语言-搭建Go语言开发环境-快速开发入门第一个小程序
Go语言的主要特性和发展影响
[GO语言基础] 一.为什么我要学习Golang以及GO语言入门普及
Go 语言十年而立,Go2 蓄势待发
golang url 收集
Go语言发展历史、核心、特性及学习路线