go learning (II): Basic syntax

type of data

 


No.
Type and Description
1 Boolean
Boolean values can only be constants true or false. A simple example: var b bool = true.
2 Digital type
integer and floating-point type int float32, float64, Go language support integer and floating point numbers, and support complex, wherein the position calculation using complement.
3 String Type:
string is a sequence of characters of the character string of fixed length connected. Go strings are connected by a single byte. Go byte language string using UTF-8 encoding of a Unicode text identifier.
4 Derived types:
including:
  • (A) pointer type (the Pointer)
  • (B) an array type
  • (C) structured type (struct)
  • (D) Channel Type
  • (E) the type of function
  • (F) slice type
  • (G) type of interface (interface)
  • (H) Map Types

 

 

Digital Type

 

No. Type and Description
1 uint8
unsigned 8-bit integers (0 to 255)
2 uint16
unsigned 16-bit integers (0 to 65535)
3 uint32
unsigned 32-bit integers (0 to 4,294,967,295)
4 uint64
unsigned 64-bit integers (0 to 18446744073709551615)
5 int8
Signed 8-bit integer (-128 to 127)
6 int16
signed 16-bit integer (-32768 to 32767)
7 int32
signed 32-bit integer (-2147483648 to 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 语句

 

Guess you like

Origin www.cnblogs.com/hsmwlyl/p/11767094.html