这几天学了Go语言的结构体、切片、映射、数组、函数闭包。接下来分类进行总结,自己做总结,也希望能帮助到那些想学go的同学。

一、结构体

1.结构体通用格式:

type 结构体名 struct{

数据 数据类型

}

示例代码:

//学习结构体
package mainimport "fmt"//结构体格式 type Structname struct{data}
type Vertex struct {X intY int
}//输出结构体
func main()  {fmt.Println(Vertex{1,3})
}

2.结构体指针 :

结构体指针有点类似于C++的指针类型,表示地址。但是一个很重要的区别在于:Go语言的结构体指针连接的形式采用的是.进行连接,而非->形式或者(*).形式。

示例代码:

//结构体指针
package mainimport ("fmt"
)type Vertex struct{X intY int
}//指针的重点在于,直接用p.X 而非p->x 或者(*p).X形式,这点要记住
func main(){v:=Vertex{1,3}p:=&v //传递地址给pp.X = 1e9fmt.Println(p.X)
}

3.结构体地址返回

用&可以返回结构体地址,但是一个重点在于结构体取地址不返回具体的地址。

 示例代码:

package mainimport "fmt"type Vertex struct {X,Y int
}//设置变量
var(v1 = Vertex{1,2}v2 = Vertex{X:1} //Y就被隐性赋值为0v3 = Vertex{}p = &Vertex{1,2} //p为该结构体地址m = 1f = &v1
)//结构体不返回具体的地址
func main(){fmt.Println(v1,p,f)
}

4.结构体内的值修改

可以直接修改里面的值,用取地址的形式和.的形式都可以

示例代码:

package mainimport "fmt"type Vertex struct {X intY int
}func main(){//可以修改结构体的值,类似于c++v:=Vertex{1,2}v.X = 3fmt.Println(v.X)
}

结构体方面暂时先总结到这,等后续应用到再总结。

二、切片

1.切片格式:

[切片元素个数]切片类型{

具体数据

}

示例代码:

//go语言
package mainimport "fmt"func main(){//数组参数中间需要加,names := [4]string{"Jons","Paud","ss","dd",}fmt.Println(names)
}

2.切片文法:

切片文法的数据在于它的数据类型可以支持多种,包括int、bool、struct等多种类型

示例代码:

//切片文法
package mainimport "fmt"func main(){q:=[]int{2,3,1,4,4} //他会自动识别fmt.Println(q)r:=[]bool{true,false,true,true,false}fmt.Println(r)//可以用结构体作为它的数据类型s:=[]struct{i intb bool}{{2, true},{3, false},{5, true},{7, true},{11, false},{13, true},}fmt.Println(s)
}

3.求切片长度、容量

切片长度即为有包含数据的长度,切片容量指的是切片的大小。

切片长度只跟初始位置相关。其中切片长度和容量均为0时,则该切片==nil

示例代码:

//切片的长度于容量
package mainimport "fmt"func printSlice(s[]int){fmt.Printf("len = %d cap=%d %v\n",len(s),cap(s),s)
}func main(){s:=[]int{2,3,5,7,11,13}printSlice(s)s=s[:0]printSlice(s)s = s[:4]printSlice(s)s = s[3:]printSlice(s)
}

4.range用法:

切片中的range有点类似于for的遍历,主要作用在于遍历切片中的每个数据

示例代码:

package mainimport "fmt"var pow = []int{1,2,4,56,6}
//range循环切片映射时,返回值param1:下标,2:下表对应参数
func main(){for i,v:=range pow{fmt.Printf("%d:%d\n",i,v)}
}

range返回值第二个值时可以省略的

示例代码:

package mainimport ("fmt"
)func main(){pow:=make([]int,10)for i:=range pow{pow[i] = 1 << uint(i) //2的0次方啥的,类似于二进制表达}for _, value := range pow {fmt.Printf("%d\n", value)}
}

三、go指针:

1.表达形式:

go指针的表达形式通常为&数据。表达数据的地址,这点如果学了C++的应该会更有理解。

*相当于取该地址的值,适用于大部分数据类型,结构体有点特殊,上面代码有讲到。

示例代码:

//学习go指针
package mainimport "fmt"func main(){i,j:=42,2701p:=&i //把i的地址赋给pfmt.Println(*p)*p = 21fmt.Println(i)p = &j*p = *p/37fmt.Println(j)
}

四、数组

1.数组格式:

var 数组名[数组个数]数据类型={具体数据}

示例代码:

//学习数组
package mainimport "fmt"func main()  {var a[2]stringa[0] = "Hello World"a[1] = "Bing"fmt.Println(a[1])fmt.Println(a) //直接返回数组的形式 中间没有句号primes := [7]int{2, 3, 5, 7, 11, 13} //后半部分中[7]表示数组的长度,如果后面数据低于这个,自动赋值0fmt.Println(primes)
}

2.make用法:

make主要用来创建数组的:语法: a:=make([]int,5) //表示创建长度为5的类型为int的数组

示例代码:

package mainimport "fmt"func main(){a:=make([]int,5) //create a array that length = 5printSlice("a",a)b:=make([]int,0,5)printSlice("b",b)c:=b[:2]printSlice("c",c)d:= c[2:5]printSlice("d",d)
}func printSlice(s string,x[]int){fmt.Printf("%s len=%d cap = %d %v \n",s,len(x),cap(x),x)
}

五、映射(map)

映射有点类似于C++的字典。

1.语法:var m map[string]int //表示的是 创建一个映射名为m的 key类型为string val类型为int的数据集

示例代码:

//学习映射
package mainimport "fmt"type Vertex struct {Lat,Long float64
}var m map[string]Vertexfunc main() {m = make(map[string]Vertex)m["Bell Labs"] = Vertex{49.22,-888,}fmt.Println(m["Bell Labs"])
}

六、函数:

函数可以以另一个函数作为返回值:

示例代码:

package mainimport ("fmt""math"
)func compute(fn func(float64,float64) float64)float64{return fn(3,4)
}func main()  {hypot := func(x,y float64)float64 {return math.Sqrt(x*x + y*y)}fmt.Println(hypot(5,12))fmt.Println(hypot(5,12))fmt.Println(compute(hypot))fmt.Println(compute(math.Pow))
}

剩余的有一块关于闭包函数的 本人还未完全理解,待理解之后补上,总体的基础基本上讲解完毕,希望对大家有用,当然也有不足,毕竟我也是刚学习几天。

Go语言学习Day04相关推荐

  1. C++语言学习(十二)——C++语言常见函数调用约定

    C++语言学习(十二)--C++语言常见函数调用约定 一.C++语言函数调用约定简介 C /C++开发中,程序编译没有问题,但链接的时候报告函数不存在,或程序编译和链接都没有错误,但只要调用库中的函数 ...

  2. 微软提出CLIPBERT:通过稀疏采样的视频语言学习

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家带来经典或 ...

  3. c语言错误的等式,C语言学习中几个常见典型错误分析.docx

    C语言学习中几个常见典型错误分析 打开文本图片集 摘要:C语言是一门优秀,应用广泛的结构化程序设计语言,是中职计算机.机电和电子技术等专业一门理论和实践相结合的课程,教学实践中,学生常觉得c语言难学, ...

  4. 二级C语言学习宝典下载,二级C语言学习宝典

    二级C语言学习宝典app是一款专注于全国二级计算机等级C语言学习所开发的应用软件,它能够给你带来全新的功能板块,让你轻松掌握超多优质的考试训练,享受到手机端做题刷题的畅快体验,让你轻松备考,而且在该软 ...

  5. php7做了哪些优化,PHP语言学习之PHP7做了哪些优化

    本文主要向大家介绍了PHP语言学习之PHP7做了哪些优化,通过具体的内容向大家展示,希望对大家学习php语言有所帮助. 一  zval使用栈内存 在Zend引擎和扩展中,经常要创建一个PHP的变量,底 ...

  6. C语言学习趣事_之_大数运算_加法

    C语言学习趣事_大数运算_之加法 1.引子    在C语言中,因为预定义的自然数类型的大小是有上下限度的,这就决定了在进行数的运算的时候,必然受到限制,同时因为C语言是最接近汇编的一种程序设计语言,并 ...

  7. 攻破c语言笔试与机试难点,如何攻破C语言学习、笔试与机试的难点.doc

    如何攻破C语言学习.笔试与机试的难点 第一节??C语言编程中的几个基本概念1.1? ?? ?#include< >与#include" "? 1.? ?#include ...

  8. c语言 浮点型数据怎么存放,C语言学习之浮点型数据存储

    C语言学习之浮点型数据 浮点数 浮点型数据分为单精度浮点型(float)和双精度浮点型(double). 单精度(float) 单精度浮点值 取值范围:1.2E-38 到 3.4E+38 精度:6 位 ...

  9. r语言electricity数据集_R语言学习10-查看数据

    当我们处理一个新的数据集的时候,第一件事就是要对数据做一个了解.数据的格式是什么?数据的维度是多少?变量名是什么? 变量如何存储? 是否缺少数据? 数据中是否有任何缺陷? 本次课将学习如何使用R的内置 ...

最新文章

  1. centos7.6基础
  2. 使用swagger实现在线api文档自动生成 在线测试api接口
  3. NOIP2015普及组第1题 45 金币 方法三(python3实现)
  4. 10月24日见!iQOO Neo 855版官宣:跑分不输骁龙855Plus
  5. 阿里云上运行Docker版本的PostgreSQL
  6. k1658停运到什么时候_2021年春运就要开始啦!快来看看各大快递的停运时间吧
  7. 傅立叶变换的深入理解(转帖)
  8. PS如何快速抠头发丝
  9. Protoss and Zerg(第十五届浙江大学宁波理工学院程序设计大赛H)
  10. 盐于律己,甜以待人(*╹▽╹*)
  11. Whitelabel Error Page(一)
  12. 解决下载github-production-release-asset-2e65be.s3.amazonaws.com上release文件慢的问题
  13. html字体播放,html-字体
  14. “华为杯”研究生数学建模竞赛2004年-【华为杯】C题:汽车千车故障数的预测与分析(附优秀论文)
  15. iOS开发——加载、滑动翻阅大量图片解决方案详解 .
  16. Access比较和逻辑运算符。
  17. 安全合规--51--基于国内法律法规的企业数据合规体系建设经验总结(九)
  18. 【GIT】源仓库新建分支如何同步到fork的自有仓库
  19. 网络安全-DNS欺骗与钓鱼网站
  20. (车内网IDS-CAN)读书笔记——Scission

热门文章

  1. 手把手带你阅读Mybatis源码(二)执行篇
  2. Java多线程学习二十四:阻塞队列包含哪些常用的方法?add、offer、put 等方法的区别?
  3. oracle+10g+cpu补丁,Oracle 10g打补丁(p5490848_10202_LINUX)
  4. JVM学习-垃圾回收器
  5. 如何快速成长为技术大牛?阿里资深技术专家的经验告诉你
  6. vue-i18n和ElementUI国际化使用
  7. Linux分区之parted命令
  8. python初学 数据分叉情况下的函数递归
  9. mongodb 权限设置--用户名、密码、端口
  10. exif_imagetype() 函数在linux下的php中不存在