go语言中数组使用的注意事项和细节
1、数组是多个 相同类型 的数据的组合,一个数组一旦声明/定义了,其 长度是固定的,不能动态变化 。
创新互联公司成立于2013年,我们提供高端网站建设公司、网站制作、成都网站设计公司、网站定制、全网营销推广、小程序设计、微信公众号开发、网站推广服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为围栏护栏企业提供源源不断的流量和订单咨询。
2、var arr []int 这时arr就是一个slice 切片 。
3、数组中的元素可以是任何数据类型,包括值类型和引用类型,但是 不能混用 。
4、数组创建后,如果没有赋值,有默认值如下:
数值类型数组: 默认值为 0
字符串数组: 默认值为 ""
bool数组: 默认值为 false
5、使用数组的步骤:
(1)声明数组并开辟空间
(3)给数组各个元素赋值
(3)使用数组
6、数组的下标是从0开始的。
7、数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr [5]int的有效下标为0~4.
8、Go的数组属于 值类型 ,在默认情况下是 值传递 ,因此会进行值拷贝。 数组间不会相互影响。
9、如想在其他函数中去修改原来的数组,可以使用 引用传递 (指针方式)。
10、长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度,看以下案例:
题1:编译错误,因为不能把[3]int类型传递给[]int类型,前者是数组,后者是切片;
题2:编译错误,因为不能把[3]int类型传递给[4]int类型;
题3:编译正确,因为[3]int类型传给[3]int类型合法。
Go 语言交叉编译和构建标签
现代应用支持多平台运行是一件稀松平常的事情,在 Go 语言里面,为了支持应用的多平台部署,给用户提供了方便的配置方式来轻松构建针对不同操作系统和平台的运行文件。
Go 的构建约束,即构建标签,是以 // go:build 为开始的行注释,如果是 1.16 或之前的版本,格式是 // +build 。跟此变更相关的 issue 可以参考 25348 。
构建标签必须出现在 package 子句之前。为了区分构建标签和包文档的描述注释,构建标签后面应该有一个空行。
构建标签由||, , !运算符以及括号来组合表达。运算符与 Go 中的含义相同。
例如,以下构建标签在满足 linux 和 386 约束,或者满足 darwin 而 cgo 不满足时构建文件:
//go:build (linux 386) || (darwin !cgo)
又如:仅在使用 cgo 时,且仅在 Linux 和 OS X 上构建文件: //go:build cgo (linux || darwin)
注意:1.17 及以后的表达格式里,一个文件有多个 //go:build 行是错误的。
在 1.16 及以前的版本,多行构建标签是允许的,并且组合方式是通过空格和逗号等来区分,空格符表示 OR,逗号表示 AND,感叹号表示 NOT。而多行之间则表示 OR。gofmt 命令将在遇到旧语法时添加等效的 //go:build 约束。如下是示例:
如果文件名在去除扩展名和可能的 _test 后缀后匹配以下任何模式, (例如:source_windows_amd64.go)其中 GOOS 和 GOARCH 分别代表任何已知的操作系统和体系结构值,那么认为该文件除了文件中的任何显式约束之外,具有这些术语的所表达的隐式构建标签。
除了官方提供的针对不同平台的内置标签,用户也可以使用自定义标签,例如 //go:build prod , 只需要在执行 go build 时显式带上标签名 go build --tags=prod 。
想要使文件构建时被忽略,可以使用: //go:build ignore ,其他任何没有被用来定义为标签的词也可以,但"ignore"是约定俗成的。)。Go 语言目前支持的系统和架构可以参考 官方文档 。
go中的struct
go和其他语言一样,可以申明新的“结构体”,struct可以作为其他类型的属性活字段的容器,定义方式如下:
type 关键字申明 person 为 struct 类型,person包含 name 属性和 age 属性,对应的类型为 string 和 int 。我们看看如何使用struct:
除了上面使用的方式使用 struct ,还有三种方式可以使用申明struct类型
完整是使用struct 例子
当我们创建结构体时,字段可以只有类型,而没有字段名。这样的字段称为匿名字段(Anonymous Field)。习惯上匿名字段叫内嵌,具名字段叫组合
上面我们申明了两个结构体 Student 和 Person ,其中 Student 组合了 Person 字段,那么 Student 包含了 Person 中的所有字段
从上面的例子可以看出来,struct 不仅可以将struct作为匿名字段,自定义类型、内置类型都可以作为匿名字段,也可以进行相应的函数操作。
这里我们有个问题,Person上有一个name属性,如果Student上也有一个name属性,那么我们怎么办呢?其实在go里面,最外层的属性具有有限的访问权限,当你通过Student.name访问的时候是访问Student上的属性。同理,我们可以通过Student.Person访问Person上的属性,如:
如果结构体的全部成员都是可以比较的,那么结构体也是可以比较的,那样的话两个结构体将可以使用 == 或 != 运算符进行比较,但不支持 或 。
golang结构体组合与“多态” 2021-08-06
如:
核心思想就是, 外层实现接口,通过递归嵌套将被实现的接口实例置于内层,从而达到外层定义,内层使用的效果 :
BaseBase和Derived都是外层结构体,在它们这一层实现了F2()。ori_impl_1以及ori_impl_2都是外层结构体实现的B接口实例,置于内层完成调用
struct中的字段可以不用给名称,这时称为匿名字段。匿名字段的名称强制和类型相同。例如:
如果struct中嵌套的struct类型是自己的指针类型,可以用来生成链表或二叉树等数据结构
例如,定义一个单链表数据结构
GO语言有哪些优势?怎样入门?
1、学习曲线
它包含了类C语法、GC内置和工程工具。这一点非常重要,因为Go语言容易学习,所以一个普通的大学生花一个星期就能写出来可以上手的、高性能的应用。在国内大家都追求快,这也是为什么国内Go流行的原因之一。
2、效率
Go拥有接近C的运行效率和接近PHP的开发效率,这就很有利的支撑了上面大家追求快速的需求。
3、出身名门、血统纯正
之所以说Go语言出身名门,是因为我们知道Go语言出自Google公司,这个公司在业界的知名度和实力自然不用多说。Google公司聚集了一批牛人,在各种编程语言称雄争霸的局面下推出新的编程语言,自然有它的战略考虑。而且从Go语言的发展态势来看,Google对它这个新的宠儿还是很看重的,Go自然有一个良好的发展前途。我们看看Go语言的主要创造者,血统纯正这点就可见端倪了。
4、自由高效:组合的思想、无侵入式的接口
Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程以及函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。
5、强大的标准库
这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用。
6、部署方便:二进制文件、Copy部署
我相信这一点是很多人选择Go的最大理由,因为部署太方便了,所以现在也有很多人用Go开发运维程序。
7、简单的并发
它包含了降低心智的并发和简易的数据同步,我觉得这是Go最大的特色。之所以写正确的并发、容错和可扩展的程序如此之难,是因为我们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单。
8、稳定性
Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go
tool、gofmt、go test。
当前文章:go语言中的组合 go语言基本类型
网站URL:http://scgulin.cn/article/hjpsoj.html