老鸟一周玩转go语法--周二

1.常量是一个简单值【只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型】的标识符,在程序运行时,不会被修改的量,因此定义时就得赋予初始值,所以可以省略类型,由编译器进行推断。多个类型的声明可以简写为:const c_name1, c_name2 = value1, value2。常量表达式的值在编译期计算,而不是在运行期。

2.常量还可以用作枚举:const ( Unknown = 0 Female = 1 Male = 2 ).可以用len(), cap(), unsafe.Sizeof()函数计算表达式的值。常量表达式中,函数必须是内置函数,否则编译不过.

iota,特殊常量,可以认为是一个可以被编译器修改的常量。iota 在 const关键字出现时将被重置为 0,const 中每新增一行常量声明将使 iota 计数一次,同行不增。批量声明的常量,除了第一个外其它的常量右边的初始化表达式都可以省略,如果省略初始化表达式则表示使用前面常量的初始化表达式,对应的常量类型也是一样的。

3.运算符,没啥特别的。

4.go的条件语句中的条件不用()。Go 没有三目运算符,所以不支持 ?: 形式的条件判断。

5.Go 语言的 For 循环有 3 种形式,只有其中的一种使用分号。且都不加()。要停止无限循环,可以在命令窗口按下ctrl-c 。

         和 C 语言的 for 一样:for init; condition; post { }

        和 C 的 while 一样:for condition { }

        和 C 的 for(;;) 一样:for { }

range 循环,这种格式的循环可以对字符串、数组、切片等进行迭代输出元素。支持获取索引,类似for-each。

        循环支持break,continue,goto等循环控制语句。

6.函数声明告诉了编译器函数的名称,返回类型,和参数。注意类型在后面。

func function_name( [parameter list] ) [return_types] {
   函数体
}

6.1 默认情况下,Go 语言使用的是值传递,即在调用过程中不会影响到实际参数。

6.2 

6.3 匿名函数的优越性在于可以直接使用函数内的变量,不必申明。 

7.数组的声明 要有数组名称,数量类型。如var balance [10]float32  数组的长度不可改变。

7.1  var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0},支持简便语法。

支持指定下标来初始化元素:balance := [5]float32{1:2.0,3:7.0}

var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0},var balance = []float32{1000.0, 2.0, 3.4, 7.0, 50.0}支持推断长度。

7.2 如果你想向函数传递数组参数,你需要在函数定义时,声明形参为数组,我们可以通过以下两种方式来声明:设定数组大小[必须传一样数量的]、未设定数组大小[就是切片]。此外,在函数体中无法修改传入的数组的内容,因为函数内操作的只是所传入数组的一个副本

8. 什么是指针?指向了一个值的内存地址变量称为指针变量,故内存地址就是指针。类似于变量和常量,在使用指针前你需要声明指针。var var_name *var-type

 

声明了整型指针数组:var ptr [MAX]*int;

指向指针的指针变量声明格式如下:var ptr **int;

向函数传递指针,只需要在函数定义的参数上设置为指针类型。func swap(x *int, y *int) {}

 9.结构体定义需要使用 type 和 struct 语句。一旦定义了结构体类型,它就能用于变量的声明

 

 

使用结构体指针访问结构体成员,也使用 "." 操作符: 

10.数组的长度不可改变,切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。切片是一种灵活,功能强悍的内置类型("动态数组")

10.1 通过一个切片赋值另一个切片,使用的引用,二者会相互影响。拷贝切片的 copy 方法和向切片追加新元素的 append 方法

11.Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对。

12.Map 是一种无序的键值对的集合。Map 通过 key 来快速检索数据,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

12.1如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对,make完成了初始化。建议直接使用 := 进行声明和赋值。

 13.类型转换用于将一种数据类型的变量转换为另外一种类型的变量。type_name(expression)

14.接口,把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。通过new()函数,创建实例

 15.go的错误处理机制

 16.Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。

goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。同一个程序中的所有 goroutine 共享同一个地址空间。

 16.1 通道(channel)是用来传递数据的一个数据结构。

通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。

 16.2

声明一个通道很简单,我们使用chan关键字即可,通道在使用前必须先创建:

ch := make(chan int)

注意:默认情况下,通道是不带缓冲区的。发送端发送数据,同时必须有接收端相应的接收数据。

通道可以设置缓冲区,通过 make 的第二个参数指定缓冲区大小:ch := make(chan int, 100)

注意:如果通道不带缓冲,发送方会阻塞直到接收方从通道中接收了值。如果通道带缓冲,发送方则会阻塞直到发送的值被拷贝到缓冲区内;如果缓冲区已满,则意味着需要等待直到某个接收方获取到一个值。接收方在有值可以接收之前会一直阻塞。

range可以遍历通道。close()可以关闭通道。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值