返回顶部
扩大
缩小

人外有人天外有天

Go基础语法篇

变量、内建变量类型、常量与枚举、条件语句、循环、函数、指针

语法

变量

组成:以字母或下划线开头,由一个或多个字母、数字、下划线

使用:先定义在使用;声明后必须使用否则会编译错误,若想忽略参见空白字符_用法

作用域

变量可以在三个地方声明:局部变量(函数内定义)、全局变量(函数外定义)、形式参数(函数定义中)

局部变量:作用域在函数体内,参数和返回值变量也是局部变量

全局变量:首字母大写全局变量可在包甚至外部包(被导出后)使用

形式参数:会作为函数的局部变量来使用

声明方式:var

第一种,指定变量类型,声明后若不赋值,使用默认值         

第二种,根据值自行判定变量类型(类型推断Type inference  

第三种,使用:=定义变量 只能在函数内使用,否则会报错

多变量声明

第一种,以逗号分隔,声明与赋值分开,若不赋值,存在默认值
第二种,直接赋值,下面的变量类型可以是不同的类型
第三种,集合类型可放在函数内,或直接放在包内;使用var()集中定义变量
注:相同代码块不可对同名变量使用:=进行初始化声明(已经存在),可对其重新赋值
注:变量必须定义之后使用,定义了必须使用

_空白标识符

只写变量,不能得到其值。
用途:
1)声明后不想使用所有,比如不需要从一个函数得到所有值
2)并行赋值

常量

数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型

注:不曾使用的常量,在编译的时候,是不会报错的

const identifier [type] = value
显式类型定义: const b string = "abc"
隐式类型定义: const b = "abc"

特点

常量定义枚举类型,Go无枚举关键字
Const数值可作为各种类型使用
使用iota表示自增值
Go语言大小写有含义,常量不需要全部大写
常量组中如不指定类型和初始化值,则与上一行非空常量右值相同

iota

特殊常量,可以认为是一个可以被编译器修改的常量
在每一个const关键字出现时,被重置为0,然后再下一个const出现之前,每出现一次iota,其所代表的数字会自动增加1
iota 可以被用作枚举值
注意:
如果中断iota自增,则必须显式恢复。且后续自增值按行序递增
自增默认是int类型,可以自行进行显示指定类型
数字常量不会分配存储空间,无须像变量那样通过内存寻址来取值,因此无法获取地址

例子:

内建变量类型

bool

布尔型的值只可以是常量 true 或者 false

Numeric Types

int8,int16,int32,int64,int   (注:int根据系统32还是64决定)

int8 有符号 8 位整型 (-128 到 127)
int16 有符号 16 位整型 (-32768 到 32767)
int32 有符号 32 位整型 (-2147483648 到 2147483647)
int64 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

uint8,uint16,uint32,unint64,unit

uint8 无符号 8 位整型 (0 到 255)
uint16 无符号 16 位整型 (0 到 65535)
uint32 无符号 32 位整型 (0 到 4294967295)
uint64 无符号 64 位整型 (0 到 18446744073709551615)
int 与 unit 都是 32位或者64位
uintptr 无符号整型,用于存放一个指针

float32,float64

float32  IEEE-754 32位浮点型数
float64  IEEE-754 64位浮点型数

complex64,complex128

complex64 32 位实数和虚数
complex128 64 位实数和虚数

byte  类似unit8

rune  类似int32  (注:Go中没有char )

string

一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的,字节使用UTF-8编码标识Unicode文本。

分支循环

if 语句

If的条件里可以赋值;赋值的变量作用域在该if语句

语法:

switch语句

switch会自动break 除非使用fallthrough(必须在某个case最后一行,否则编译器会报错)

注:如果switch没有表达式,它会匹配true,Go里面switch默认相当于每个case最后带有break,匹配成功后不会自动下面语句

switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际存储的变量类型。

例子:

select语句

类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。

循环语句

for是唯一的循环语句。(Go没有while循环)

for条件里可省略初始条件,结束条件。  for 初始条件; 循环条件; 结束条件 { } ,初始化语句只执行一次

for循环条件可选:for condition { }  相当于while 。注:for { } 相当于死循环,效果等同于for(;;)

注意:在for循环中声明的变量仅在循环范围内可用。因此,i不能在外部访问循环。

for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环

break:跳出循环体。break语句用于在结束其正常执行之前突然终止for循环。

continue:跳出一次循环。continue语句用于跳过for循环的当前迭代。

goto:可以无条件地转移到过程中指定的行。

函数

函数返回多个值时可以起名字,仅用于非常简单函数(对调用者无区别)

可变参

定义 func myfunc(arg ...int) {} 函数体中变量arg是一个int的slice

参数传递

Go语言函数参数传递也存在:值传递和引用传递

比如: func add1(a *int) int 定义了一个引用传递,其返回值是 return *a 使用方法是 x := add1(&x0) 

闭包

Go支持匿名函数,可作为闭包

匿名函数

指针

指针作为接收者:

工程目录结构:

atomic.go学习

 

读取文件

 

打印文件

打印跨行字符串

branch.go

convertToBin

 func.go学习

 

 

 basic.go

 triangle_test.go

输出是:

 

posted on 2018-07-24 10:51  笔记是研究的开始  阅读(580)  评论(0编辑  收藏  举报

导航