第二章 程序结构

  1. 名称

go中的函数、变量、常量、类型、语句标签和名称遵循一个简单的规则:名称的开头是一个字母或下划线,后面跟任意的字符、数字和下划线。

go有25个关键字,不能用作名称。

break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 

go有30多个内置预申明常量、类型、函数

名称的作用域越大,使用越长的名称

  1. 声明

函数的声明包括一个名字、参数列表、返回值和函数体。

  1. 变量

var name type = expression

类型和表达式可以省略一个。如表达式省略,初值由类型零值决定数字-0,布尔值是false,字符串是“”,对于接口和引用类型(slice、指针、map、通道函数)是nil,对于数组或结构体符合类型,零值是其所有元素的零值。

初始值可以是字面量或者任何表达式。包级别的初始化在main开始之前进行、局部变量的初始化和声明一样在函数执行期间进行。

在局部变量的声明和初始化都使用短声明。var声明通常用在跟初始化表达式类型不一致的局部变量,或者用于后面才对变量赋值的情况。

    i, j := 0, 1
    var b, f, s = true, 2.2, "four"

短变量声明最少声明一个

  1. 指针

变量是存储值得地方,指针的值是变量的地址。

var x int //表达式&x 获取一个指向整型变量的指针,它的类型是整型指针(*int)。
//如果值叫做p,我们说p指向x,或者p包含x的地址
p := &x 
*p = 2 

因为*p代表一个变量,所以出现在赋值操作符的左边

代表变量的表达式,是唯一一个可以用&符的表达式

指针类型的零值是nil, 指针可以比较的,当两指针指向同一变量,或者都为nil时候,才相等。

指针包含了一个变量的地址,可以改在函数中通过该指针来更新变量的值。

func incr(p *int) int {
*p++ //只改变p指向的变量的值,不改变p指针
return *p
}
v := 1
incr(&v) //output v=2
fmt.Println(&v) //v is 3

变量的别名: 对变量取地址、复制指针都是为原变量创建了别名

引用类型也会创建别名: slice map chan 、 结构体 数组 接口

指针是flag的重要技术

var n = flag.Bool("n", false, "omit trailing line") //命令行标志参数、 默认值、提示信息
flag.Parse
  1. new函数

调用内建函数new创建新变量。new(T)初始化为对应类型的零值,返回变量的地址。每次调用new函数返回一个不一样地址。

6.变量的生命周期

for t := 0.0; t < cycles*2*math.Pi; t += res {
    x := math.Sin(t)
    y := math.Sin(t*freq + phase)
    img.SetColorIndex(size+int(x*size+0.5), size+int(y*size+0.5),
        blackIndex)
}

函数的有右小括弧也可以另起一行缩进,同时为了防止编译器在行尾自动插入分号而导致的编译

错误,可以在末尾的参数变量后面显式插入逗号

for t := 0.0; t < cycles*2*math.Pi; t += res {
    x := math.Sin(t)
    y := math.Sin(t*freq + phase)
    img.SetColorIndex(
        size+int(x*size+0.5), size+int(y*size+0.5),
        blackIndex, // 最后插入的逗号不会导致编译错误,这是Go编译器的一个特性
    ) // 小括弧另起一行缩进,和大括弧的风格保存一致
}

系统在堆上分配全局变量,栈上分配局部变量。

7、赋值操作

count[x] *= scale
v++
v--

nil可以赋值给接口类型和引用类型

  1. 类型的声明

type定义一个新的命名类型

T(x)将x值转换为T类型命名类型的地层类型决定了它的结构和表达式

  1. 包和文件

  1. 导入

  1. 包的初始化

func init() {/*....*/}

10.作用域

语法块:由大括号围起来的一个语句序列

词法块:没有显式的包含在大括号中的代码

控制流标签:外层函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值