go

go


第八单元(Go数据类型)

<h1>一、Go基本语法</h1> <h3></h3> <ul> <li> <p>Go标记 Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号</p> </li> <li>标识符 标识符用来命名变量、类型等程序实体,由字母,数字,下划线组成 第一个字符必须是字母或下划线而不能是数字</li> <li>关键字 Go 代码中会使用到的 25 个关键字或保留字</li> </ul> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=fc594f159a9f84e21b98dc55c0e2b3e9&amp;file=file.png" alt="" /></p> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=8aabf411f30601815407f67c228a0e4b&amp;file=file.png" alt="" /></p> <pre><code class="language-go">package main //第一行指明这个文件属于哪个包 import "fmt" //这个程序需要使用 那些 包 func main() { //main 函数是每一个`可执行程序所必须包含的` /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!") }</code></pre> <h1>二、Go数据类型</h1> <pre><code>数据类型并不神秘 人类世界对万事万物都有种类划分,例如: 哺乳动物 人、猫、马、鸭嘴兽....等等 蔬菜 西红柿、波菜、茄子....等等 水果 西瓜、桃子、苹果....等等 上面这些都有类型,当然数据也是有类型的 数据类型:就是对数据分类的一个划分而已 数据类型的出现是为了把数据分成所需内存大小不同的数据, 编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存</code></pre> <hr /> <h2>Go 语言按类别有以下几种数据类型:</h2> <ul> <li><strong>布尔型</strong> 布尔型的值只可以是常量 true 或者 false。一个简单的例子:```go var b bool = true <pre><code></code></pre></li> <li> <p><strong>数字类型</strong> 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数</p> </li> <li> <p><strong>字符串类型</strong> 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本</p> </li> <li> <p><strong>派生类型</strong></p> <p>(a) 指针类型(Pointer) (b) 数组类型 (c) 结构化类型(struct) (d) Channel 类型 (e) 函数类型 (f) 切片类型 (g) 接口类型(interface) (h) Map 类型</p> </li> </ul> <hr /> <pre><code class="language-go">package main import "fmt" func main(){ //var 变量名 变量类型 = "变量值" var id int var name string = "超级无敌黑欧巴" var flag = true var v1,v2,v3 int f:="9.9" fmt.Println(id) //打印数据 fmt.Println(name) fmt.Println(flag) v1 = 200 v2 = 300 v3 = 400 fmt.Println(v1); fmt.Println(v2); fmt.Println(v3); fmt.Println(f); var a string = "you will" //或: var b, c int = 1,2 }</code></pre> <h1>三、变量</h1> <h4>什么是变量</h4> <blockquote> <p>变量是计算机内存中存储数据的标识符,根据变量名称可以获取到内存中存储的数据</p> </blockquote> <h4>1. 变量的定义</h4> <pre><code class="language-go">var a string = "you will" //或: var b, c int = 1,2</code></pre> <h4>2.变量的声明</h4> <p>第一种:指定变量类型,如果没有初始化,则变量默认为零值。其中 数值类型(包括 complex64/128)–&gt;0 布尔类型 —&gt; false 字符串类型 ----&gt;&quot;&quot;(空字符串) 其他几种类型 ----&gt;nil</p> <p>第二种:根据值自行判定变量类型</p> <pre><code class="language-go">var d = true //可以根据值推断 变量d 为 bool 类型</code></pre> <p>第三种:省略var 使用 :=(用于局部变量的声明)</p> <pre><code class="language-go">age := 18</code></pre> <h1>四、常量</h1> <blockquote> <p>什么是常量:在整个运行过程中,值固定不变的量称为常量</p> <p>常量是一个简单值的标识符,在程序运行时,不会被修改。</p> <p>常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型</p> </blockquote> <h4>常量的定义</h4> <pre><code class="language-go">显式类型定义: const b string = "abc" 隐式类型定义: const b = "abc" (编译器可以根据变量的值来推断其类型) const ( Unknown = 0 Female = 1 Male = 2 ) //数字 0、1 和 2 分别代表未知性别、女性和男性</code></pre> <h4>特殊的常量</h4> <pre><code class="language-go">iota,特殊常量,可以认为是一个可以被编译器修改的常量 </code></pre> <p>iota,特殊常量,可以认为是一个可以被编译器修改的常量。</p> <p>iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。</p> <p>iota 可以被用作枚举值:</p> <pre><code>第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式: const ( a = iota b c ) </code></pre> <h2>数组和切片</h2> <pre><code>之前存储数据使用一个变量,只能存储一个数值。如果要存储新的值,只能覆盖原有的值。如果想要存储多个值只能定义多个变量,我们可以将这些多个值存储到同时存储到一个容器里面,也就是数组</code></pre> <p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=b34b47636cf9163e992545d21f7ad79f&amp;file=file.png" alt="" /></p> <p>数组声明的语法格式为: var 数组名称 [长度]数据类型</p> <p>数组只能用来存储一组相同类型的数据结构。</p> <p>数组需要通过下标来访问,并且有长度和容量 。</p> <p>//数组定义 var arr [5]int //数组访问使用下标来访问 arr[0]=1 arr[1]=2</p> <p>//通过下标直接获取数组数值 fmt.Print(arr[2])</p> <p>数组有长度限制,访问和复制不能超过数组定义的长度,否则就会下标越界。 数组的长度,用内置函数 len()来获取。</p> <p>数组的容量,用内置函数 cap()来获取。</p> <p>fmt.Println(“数组的长度为:”,len(arr))//数组中实际存储的数据量 fmt.Println(“数组的容量为:”,cap(arr))//容器中能够存储的最大数据量 因为数组是定长的 所以长度和容量是相同的 使用range 不需要操作下标,每次循环自动获取元素中的下标和对应的值。如果到达数组的末尾,自动结束循环。</p> <h4>数组的遍历</h4> <pre><code>使用for range 进行循环数组中的元素,依次打印数组中的元素 `使用range 不需要操作下标,每次循环自动获取元素中的下标和对应的值。如果到达数组的末尾,自动结束循环。`</code></pre> <pre><code>arr := [5]int{1,2,3,4,5} //range方式循环数组 for index,value:=range arr{ fmt.Println(index,value) }</code></pre> <p>2,可以通过 for循环 配合下标来访问数组中的元素。</p> <pre><code>arr := [5]int{1,2,3,4,5} //for循环 for i:=0; i&lt;len(arr);i++{ fmt.Println(arr[i]) }</code></pre> <h2>切片</h2> <p>作为容器的一种,数组能够存储一组特定类型的数据,但是缺点是数组是定长的。系统根据定义的固定的长度,开辟了固定的内存大小所以不能改变大小</p> <h4>如何声明一个切片</h4> <p>与数组不同的是,不需要指定[] 里面的长度 。 语法:var 切片名字 [] 数据类型</p> <pre><code>//声明一个切片slice var slice []int //使用make函数来创建切片 slice :=make([]int,3,5)//长度为3 容量为5 容量如果省略 则默认与长度相等也为3 fmt.Println(slice)//[0,0,0] fmt.Println(len(slice),cap(slice))//长度3,容量5 </code></pre> <h4>切片追加</h4> <blockquote> <p>切片中追加一个元素时,使用内置函数append() 方法追加在切片的末尾。 例如切片slice[3] 长度为3 所以下标只能为0, 1, 2 。如果继续添加就可以使用用内置函数append在切片尾部追加内容。 语法 slice=append(slice,elem1,elem2)</p> </blockquote> <h4>切片扩容</h4> <pre><code>package main import ( "fmt" ) func main() { s1 := make([]int, 0, 3) fmt.Printf("地址%p,长度%d,容量%d\n", s1, len(s1), cap(s1)) s1 = append(s1, 1, 2) fmt.Printf("地址%p,长度%d,容量%d\n", s1, len(s1), cap(s1)) s1 = append(s1, 3, 4, 5) fmt.Printf("地址%p,长度%d,容量%d\n", s1, len(s1), cap(s1)) //地址0xc000010540,长度0,容量3 //地址0xc000010540,长度2,容量3 //地址0xc00000e4b0,长度5,容量6 }</code></pre>

页面列表

ITEM_HTML