go 学习 (二):基本语法

旧时模样 提交于 2019-12-02 23:25:56

数据类型

 


序号
类型和描述
1 布尔型
布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
2 数字类型
整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
3 字符串类型:
字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
4 派生类型:
包括:
  • (a) 指针类型(Pointer)
  • (b) 数组类型
  • (c) 结构化类型(struct)
  • (d) Channel 类型
  • (e) 函数类型
  • (f) 切片类型
  • (g) 接口类型(interface)
  • (h) Map 类型

 

 

数字类型

 

序号类型和描述
1 uint8
无符号 8 位整型 (0 到 255)
2 uint16
无符号 16 位整型 (0 到 65535)
3 uint32
无符号 32 位整型 (0 到 4294967295)
4 uint64
无符号 64 位整型 (0 到 18446744073709551615)
5 int8
有符号 8 位整型 (-128 到 127)
6 int16
有符号 16 位整型 (-32768 到 32767)
7 int32
有符号 32 位整型 (-2147483648 到 2147483647)
8 int64
有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

 

浮点型

 

序号类型和描述
1 float32
IEEE-754 32位浮点型数
2 float64
IEEE-754 64位浮点型数
3 complex64
32 位实数和虚数
4 complex128
64 位实数和虚数

 

其他数字类型 

 

序号类型和描述
1 byte
类似 uint8
2 rune
类似 int32
3 uint
32 或 64 位
4 int
与 uint 一样大小
5 uintptr
无符号整型,用于存放一个指针

 

 

 变量: 全局变量、局部变量、形式参数

 

// 第一种声明变量方式: 指定变量类型,进行初始化或使用默认值var boolean1 bool       // 声明单个变量
var num1, num2 int     // 声明多个相同类型的变量​// 第二种声明变量方式: 系统根据 值 自行判定变量类型var num4 = 5// 第三种声明变量方式: 省略 var,若 := 左侧未声明新的变量,则产生编译错误str3 := "u_u"



​常量:类型仅可为 布尔型、数字型(整型、浮点型、复数型)、字符串型;多行字符串使用 `` 定义

  • &variable :获取变量的内存地址,每个变量都拥有地址,指针的值就是地址。
  • 已存在的变量,不可再对其使用初始化声明 :=
  • 声明的局部变量必须在其代码块中使用,全局变量可不必
  • `_`  空白标识符,用于抛弃值,是一个只写变量

 

运算符

算术运算符描述
+ 相加
- 相减
* 相乘
/ 相除
% 求余
++ 自增
-- 自减

 

关系运算符描述
== 检查两个值是否相等,如果相等返回 True 否则返回 False。
!= 检查两个值是否不相等,如果不相等返回 True 否则返回 False。
> 检查左边值是否大于右边值,如果是返回 True 否则返回 False。
< 检查左边值是否小于右边值,如果是返回 True 否则返回 False。
>= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。
<= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。

 

 

 

逻辑运算符描述
&& 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False。
|| 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False。
! 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True。

 

 

赋值运算符描述
= 简单的赋值运算符,将一个表达式的值赋给一个左值
+= 相加后再赋值
-= 相减后再赋值
*= 相乘后再赋值
/= 相除后再赋值
%= 求余后再赋值
<<= 左移后赋值
>>= 右移后赋值
&= 按位与后赋值
^= 按位异或后赋值
|= 按位或后赋值

 

其他运算符描述
& 返回变量存储地址
* 指针变量。

 

分支循环语句

if 语句

if condition {
    // do something
}

// condition 为 布尔类型

 

if-else 语句

if condition {
    // do something
} else {
    // do something
}

// if 为真即成立,执行 if代码块;否则执行 else代码块

 

if-else if-else 语句

if condition1 {
    // do something
} else if condition2 {
    // do something else
}else {
    // catch-all or default
}

 

if 的特殊姿势

if err := Connect(); err != nil {
    fmt.Println(err)
    return
}

// Connect() 为带有返回的函数,此条件先获取函数的返回值,再根据这个返回值进行判断

 

switch 语句

var a = "hello"
switch a {
case "hello":
    fmt.Println(1)
case "world":
    fmt.Println(2)
default:
    fmt.Println(0)
}

 


 // 一分支多值

var a = "mum"
switch a {
case "mum", "daddy":
    fmt.Println("family")
}


// 分支表达式
var r int = 11
switch {
case r > 10 && r < 20:
    fmt.Println(r)
}注意:
每个 switch 只能有一个 default 分支

  switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。

  switch 语句执行的过程从上至下,直到找到匹配项,匹配项后面也不需要再加 break。

switch 默认情况下 case 最后自带 break 语句,匹配成功后就不会执行其他 case,如果我们需要执行后面的 case,可以使用 fallthrough 。

 

select 语句

select {
    case communication clause  :
       statement(s);      
    case communication clause  :
       statement(s); 
    // 可以定义任意数量的 case
    default : // 可选 
       statement(s);
}

//  select 随机执行一个可运行的 case。如果没有 case 可运行,它将阻塞,直到有 case 可运行。
  • 每个 case 都必须是一个通信
  • 所有 channel 表达式都会被求值
  • 所有被发送的表达式都会被求值
  • 如果任意某个通信可以进行,它就执行,其他被忽略。
  • 如果有多个 case 都可以运行,Select 会随机公平地选出一个执行。其他不会执行。 
    否则:
    1. 如果有 default 子句,则执行该语句。
    2. 如果没有 default 子句,select 将阻塞,直到某个通信可以运行;Go 不会重新对 channel 或值进行求值。

 

Go 没有三目运算符,所以不支持 ?: 形式的条件判断

 

for 循环

 

break 语句

 

 

continue 语句

 

goto 语句

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!