一. Go语言的结构
在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。
Go 语言的基础组成有以下几个部分:
包声明 引入包 函数 变量 语句 & 表达式 注释
通过简单的代码看本质
/**
1. Go语言结构 包声明 引入包 函数 变量 语句&表达式 注释
*/
// 我是单行注释
/**
我是多行注释
*/
// 包声明 package main 定义了包名,表示可以独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包
package 语言结构
// 引入包 fmt 包实现了格式化 IO(输入/输出)的函数
import "fmt"
// 函数 开始执行的函数,这里要注意一点,如果有init()函数,它将会先于main函数执行
func main() {
// 变量
var a string = "我是字符串";
// 语句 输入一串字符串到控制台,它会自动进行换行
fmt.Println(a)
}
二. 基本数据类型
1.布尔类型
true false
2.数字类型
整型 int 浮点型 float32、float64,
3.字符串类型
string
4.派生类型
(a) 指针类型(Pointer) (b) 数组类型 (c) 结构化类型(struct) (d) Channel 类型 (e) 函数类型 (f) 切片类型 (g) 接口类型(interface) (h) Map 类型
三. 定义变量
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。 声明变量的一般形式是使用 var 关键字 var identifier type 变量名在前 类型在后 这个有所不同
定义变量分为四种
指定变量类型
根据值自行判定变量类型
最简体
聚合声明
/**
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。
声明变量的一般形式是使用 var 关键字
var identifier type 变量名在前 类型在后 这个有所不同
定义变量分为四种
1. 指定变量类型
2. 根据值自行判定变量类型
3. 最简体
4. 聚合声明
*/
package main
import "fmt"
// 定义具体变量 使用默认初值
func variableDefaultValue() {
var a int // 0
var b string // ""
var c bool // false
fmt.Println(a, b, c)
}
// 定义变量,赋初值
func variableInitialValue() {
var a, b int = 1, 2
var s string = "www.lhdyx.cn"
fmt.Println(a, b, s)
}
// 类型推断
func variableTypeDeduction() {
var a, b, c, d = 1, 2, true, "www.lhdyx.cn"
fmt.Println(a, b, c, d)
}
// 最简定义变量方式
func variableShorter() {
a, b, c, d := 3, 2, true, "hi"
fmt.Println(a, b, c, d)
}
// 聚合调用
func variablePolymerization() {
var a, b, c string
a, b, c = "1","2","3"
fmt.Println(a, b, c)
}
// 依次调用
func main() {
variableDefaultValue()
variableInitialValue()
variableTypeDeduction()
variableShorter()
variablePolymerization()
}
四. 常量与枚举
常量是一个简单值的标识符,在程序运行时,不会被修改的量。 常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。 常量的定义格式:const identifier [type] = value常量分为两种
指定类型定义: const b string = "abc"
推断类型定义: const b = "abc"
/**
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
常量的定义格式:const identifier [type] = value
常量分为两种
1. 指定类型定义: const b string = "abc"
2. 推断类型定义: const b = "abc"
*/
package main
import "fmt"
// 常量
func consts() {
// 单个常量
const A string = "1"
// 多个常量
const B, C, D string = "2", "3", "4"
// 推断定义常量
const E = 1
fmt.Println(A, B, C, D, E)
}
// 枚举
func enums() {
// 使用常量枚举
const (
Unknown = 0
Female = 1
Male = 2
)
fmt.Println(Unknown, Female, Male) // 0 1 2
// 使用 iota 块来实现自增枚举
// iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),
// const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)
const (
a = iota
b
c
)
fmt.Println(a,b,c)
}
// 依次调用
func main() {
consts()
enums()
}
五. 运算符
Go 语言内置的运算符有:算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符
/**
Go 语言内置的运算符有:
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
其他运算符
*/
package main
import "fmt"
// 算术运算符
func arithmeticOperator() {
var a int = 20;
var b int = 10;
var c int
// 相加
c = a + b
fmt.Println(c)
// 相减
c = a - b
fmt.Println(c)
// 相乘
c = a * b
fmt.Println(c)
// 相除
c = a / b
fmt.Println(c)
// 求余
c = a % b
fmt.Println(c)
// 自增
a++
fmt.Println(a)
// 自减
b--
fmt.Println(b)
}
// 关系运算符
func relationalOperator() {
var a int = 20;
var b int = 10;
// 检查两个值是否相等,如果相等返回 True 否则返回 False
fmt.Println(a == b)
// 检查两个值是否不相等,如果不相等返回 True 否则返回 False
fmt.Println(a != b)
// 检查左边值是否大于右边值,如果是返回 True 否则返回 False
fmt.Println(a > b)
// 检查左边值是否小于右边值,如果是返回 True 否则返回 False
fmt.Println(a < b)
// 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False
fmt.Println(a >= b)
// 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False
fmt.Println(a <= b)
}
// 逻辑运算符
func logicalOperators() {
var a bool = true
var b bool = false
// 逻辑 AND 运算符。 如果两边的操作数都是 True,则条件 True,否则为 False
fmt.Println(a && b)
// 逻辑 OR 运算符。 如果两边的操作数有一个 True,则条件 True,否则为 False
fmt.Println(a || b)
// 逻辑 NOT 运算符。 如果条件为 True,则逻辑 NOT 条件 False,否则为 True
fmt.Println(!(a && b))
}
// 位运算符
// 位运算符对整数在内存中的二进制位进行操作
func bitOperator() {
// 假定 A = 60; B = 13; 其二进制数转换为
var a uint = 60 /* 60 = 0011 1100 */
var b uint = 13 /* 13 = 0000 1101 */
var c uint = 0
// 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与
c = a & b /* 12 = 0000 1100 */
fmt.Println(c)
// 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或
c = a | b /* 61 = 0011 1101 */
fmt.Println(c)
// 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。
c = a ^ b /* 49 = 0011 0001 */
fmt.Println(c)
// 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。
c = a << 2 /* 240 = 1111 0000 */
fmt.Println(c)
// 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。
c = a >> 2 /* 15 = 0000 1111 */
fmt.Println(c)
}
// 赋值运算符
func assignmentOperator() {
var a int = 21
var c int
// 简单的赋值运算符,将一个表达式的值赋给一个左值
c = a
fmt.Println(c)
// 相加后再赋值 c += a 等于 c = c + a
c += a
fmt.Println(c)
// 相减后再赋值 c -= a 等于 c = c - a
c -= a
fmt.Println(c)
// 相乘后再赋值 c *= a 等于 c = c * a
c *= a
fmt.Println(c)
// 相除后再赋值 c /= a 等于 c = c / a
c /= a
fmt.Println(c)
c = 200;
// 左移后赋值 c <<= a 等于 c = c << a
c <<= 2
fmt.Println(c)
// 右移后赋值 c >>= a 等于 c = c >> a
c >>= 2
fmt.Println(c)
// 按位与后赋值 c &= a 等于 c = c & a
c &= 2
fmt.Println(c)
// 按位异或后赋值 c ^= a 等于 c = c ^ a
c ^= 2
fmt.Println(c)
// 按位或后赋值 c |= a 等于 c = c | a
c |= 2
fmt.Println(c)
}
// 其他运算符
func otherOperators() {
var a int = 4
var b int32
var c float32
var ptr *int
/* 运算符实例 */
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
/* & 和 * 运算符实例 */
// &返回变量存储地址
ptr = &a /* 'ptr' 包含了 'a' 变量的地址 */
fmt.Println(a)
// *是一个指针变量
fmt.Println(*ptr)
}
// 依次调用
func main() {
arithmeticOperator()
relationalOperator()
logicalOperators()
bitOperator()
assignmentOperator()
otherOperators()
}
源码下载: https://github.com/LiHaodong888/GoLearn