基础组成
包声明
引入包
fmt.Println("hello world") 会在输出后面自动添加上换行符 \n
fmt 包实现了格式化 IO (输入/输出)的函数
函数
func main() 是程序开始执行的函数。不过当有 init() 函数时,则会先执行 init() 函数。
变量
语句& 表达式
当一个标识符以大写字母开头时,那么使用这种标识符的对象则可以被外部包的代码所使用,这被称之为导出。类似于面向对象中的 Public。如果标识符以小写字母开头时,则对包外是不可见的,对包内是可见并可用的。类似于面向对象中的 protected 。
注释
注意:{ 不可以单独放一行。
语言基础语法
标记
go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。
行分隔符
go 程序中,一行代表一个语句的结束。如果打算多个语句放在同一行,则必须使用 ; 隔开(不过不推荐使用这种方式)。
标识符
一个标识符可以有一个或多个字母或数字,下划线组成的序列。但第一个字符必须是字母或者下划线,不可以是数字。
字符串连接
字符串使用 + 连接
空格
变量的声明必须使用空格隔开。
使用适当的空格可以让程序更易阅读。
变量和运算符中加空格,使程序更美观。
格式化字符串
使用 fmt.Sprintf() 函数格式化字符串并赋值给新字符串
数据数据类型
数据类型用于声明函数和变量。
数据类型的出现是为了数据分成所需内存大小不同的数据。编程的时候需要用大数据时才会申请大内存,就可以充分利用内存。
按类型区分,有以下几种类型
数字类型
字符串类型
布尔类型
派生类型
语言变量
变量来源于数学。是计算机中能储存计算结果或表示值抽象概念。
变量可以通过变量名访问。
语言变量名一般由字母,数字和下划线组成。首字母不可以是数字。
变量声明
声明变量的形式一般使用 var 关键字。
var identifier type
指定变量类型,如果没有初始化,则变量默认为零值(零值即变量没有做初始化时系统默认给的值)。
数值类型为 0
字符串类型为""(空字符串)
布尔类型为 false
以下类型为 nil
var a *int
var a []int
var a map[string] int
var a chan int
var a func(string) int
var a error // error 是接口
根据值自动判定变量类型
var v_name = value
省略 var ,注意 := 的左侧没有声明新的变量,就会产生编译错误。
v_name := value
多变量声明
var v_name1,v_name2 int
// 因式分解关键字的写法多用于声明全局变量时
var (
v_name1 int
v_name2 string
)
var v_name1,v_name2 = value1,value2
v_name1,vname2 := value1,value2 // 不带声明格式的只能在函数体内出现
值类型和引用类型
int ,float,string,bool 这些基本类型都是属于值类型,使用这些类型的变量直接指向存在于内存的值。
你可以通过 &i 获取变量 i 的内存地址。值类型的变量的值存储在栈中。
GO 语言中你必须使用所有被声明的变量。全局变量可以只声明不使用。
空白标识符 _ 被用于抛弃值。_ 实际上是一个只写变量,你不能得到他的值。
语言常量
常量是一个简单的标识符。在程序运行中,不会被修改的量。
常量的数据类型只可以是字符串类型,数字类型和布尔类型。
声明格式
const identifier [type]= value
常量还可以用作枚举.
const (
STATUS_YES = 1
STATUS_NO = 0
)
常量还可以用 len() caps()等函数计算表达式的值。常量表达式中,常量必须是函数。
iota
iota 是一个特殊常量。可以认为是一个可以被编译器修改的常量。
iota 在 const 关键字出现时将重置为 0,const 关键字每新增一行常量声明将使 iota 计数一次。
语言运算符
算术运算符
运算符 描述
+ 加法运算符
- 减法运算符
* 乘法运算符
/ 除法运算符
% 除法运算符
++ 自增
-- 自减
关系运算符
运算符 描述
== 比较两个值是否相等 ,返回布尔类型
!= 是否不相等 ,返回布尔类型
> 是否大于 ,返回布尔类型
< 是否小于 ,返回布尔类型
>= 是否大于等于 ,返回布尔类型
<= 是否小于等于 ,返回布尔类型
逻辑运算符
运算符 描述
&& 逻辑 AND 运算符 ,返回布尔类型
|| 逻辑 OR 运算符 ,返回布尔类型
! 逻辑 NOT 运算符 ,返回布尔类型
位运算符
假定 A 为60,B 为13:
运算符 描述 实例
& 按位与运算符 (A & B) 结果为 12 ,二进制为 0000 1100
| 按位或运算符 (A | B) 结果为 61 ,二进制为 0011 1101
^ 按位异运算符 (A ^ B) 结果为 49 ,二进制为 0011 0001
<< 左移算符 A << 2 结果为 240 ,二进制为 1111 0000
>> 右移异运算符 A >> 2 结果为 15 ,二进制为 0000 1111
赋值运算符
运算符 描述
= 赋值运算符,将一个表达式得值赋予左值
+= 相加后在赋值
-= 相减后在赋值
*= 相乘后在赋值
/= 相除后在赋值
%= 取余后在赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
|= 按位或后赋值
^= 按位异后赋值
其它运算符
运算符 描述
& 返回变量的存储地址
* 指针变量
条件语句
语句 描述 注意
if 语句 if 语句 由一个布尔表达式后紧跟一个或多个语句组成。
if..else 嵌套语句 if 语句 后可以使用可选的 else 语句, else 语句中的表达式在布尔表达式为 false 时执行。
if 嵌套语句 你可以在 if 或 else if 语句中嵌入一个或多个 if 或 else if 语句。
switch 语句 switch 语句用于基于不同条件执行不同动作。 执行过程从上到下,直到找到匹配项,匹配项后面也不用加 break。如果我们需要执行后面的 case 可以使用fallthrough
select 语句 select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。
发表评论 取消回复