8 函数
8 函数 函数是组织好的、可重复使用的、用于执行指定任务的代码块 Go 中支持函数、匿名函数和闭包,并且函数在Go中属于”一等公民” 函数定义 具体格式: func 函数名(参数)(返回值){ 函数体 } 123456789101112 * **函数名**:*字母、数字、下划线*组成。在**同一个包内**,函数名不能重复 * **参数**:由 *参数变量和参数变量* 的类型组成,多个参数使用**逗号**隔开 * **返回值**:由 *返回值变量和其类型* 组成,也**可以只写返回值类型**,**多个返回值必须用`()`包裹**,并用逗号隔开 * **函数体**:实现指定功能的代码块* 示例: * ```go func intSum(x int, y int) int { return x +y } 函数的参数和返回值都是可选的 函数的调用 定义函数后,使用函数名()调用函数 调用有返回值的函数时,可以不接收其返回值 参数类型简写 函数参数列表 中,若相邻变量的参数相同,则可以省略左边的类型 1...
7 map
7 map 无序的基于key-value的数据结构 内部使用散列表(hash)实现 Go 中的map是引用类型,必须初始化才能使用 map 定义 Go 中map基本语法 map[KeyType]ValueType KeyType : 键的类型 ValueType :键对应的值得类型 默认初始值:nil 需要使用make 分配内存 make(map[KeyType]ValueType, [cap]) cap :容量,可省略。但应该在初始化时指定一个合适的容量 map 基本使用 map 中的数据都是成对出现 示例 scoreMap := make(map[string]int, 8) scoreMap["小明"] = 90 fmt.Println(scoreMap) fmt.Println(scoreMap["小明"]) 12345678* map 支持在声明时,列表初始化 * ```go userInfo := map[string]string{ "username": &q...
6 切片
6 切片 数组长度是固定的,数组的长度也属于类型的一部分,有许多局限性 例如,函数传参时只能支持一种数组类型 例如,不能再继续向数组中添加元素 Slice 是一个拥有相同类型元素的可变长度序列 是基于数组类型做的一层封装 十分灵活,支持自动扩容 切片是一个 引用类型,不支持直接比较,只能和nil比较 内部结构包含 地址、长度、容量 一般用于快速的操作一块数据集合 切片的定义 基本语法:var name []T name : 变量名 T : 切片中的元素类型 示例: var a []string var b = []int{} var c = []bool{false, true} 12345678910111213141516171819202122232425262728293031323334 #### 切片的长度和容量* 切片拥有自己的长度和容量: * `len()` 求长度 * `cap()` 求容量#### 切片的表达式* 切片表达式 从`字符串、数组、指向数组或切片的指针` 构造 子字符串或切片* 两种变体 * 指定`low`...
5 Array
5 Array 数组 同一种数据类型的集合 Go 中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变 语法:var a [3]int 数组定义 var name [size]T size 必须是常量 长度是数组类型的一部分,定义后不可变 不同长度,不可相互赋值 数组可以使用下标访问,0 - size-1 若越界,会触发访问越界,panic 数组的初始化方法一 可以使用 初始化列表 设置数组元素的值 var a [3]int //数组元素初始化为int类型的0 var b = [3]int{1,2} //使用指定的初始值完成成初始化 var c = [3]string{"北京","上海"} //指定的值完成初始化 12345678910 #### 方法二* 我们可以让编译器根据初始值的个数自行推断长度 * ```go var a = [...]int{1,2} var b = [.....
Lab 0
Lab 0[toc] ucore运行环境:X86 硬件模拟器,QEMU、VirtualBox、VMware Player ucore开发环境:GCC的gcc、gas、ld和MAKE,或集成开发环境Eclipse-CDT 分析源代码:understand 软件开发版本管理:GIT、SVN 比较文件和目录的不同,发现不同实验中的差异性和进行文件合并操作:meld、kdiff3、UltraCompare 调试(debug)发现设计中得出错误:gdb(配合QEMU)等调试工具软件 1 安装一个操作系统的开发过程: Bootloader+toy ucore: 理解操作系统启动前的硬件状态和要做的准备工作,了解运行操作系统的外设硬件支持,操作系统如何加载到内存中,理解两类中断—“外设中断”,“陷阱中断”,内核态和用户态的区别; **物理内存管理:**理解x86分段/分页模式,了解操作系统如何管理物理内存; **虚拟内存管理:**理解OS虚存的基本原理和目标,以及如何结合页表+中断处理(缺页故障处理)来实现虚存的目标,如何实现基于页的内存替换算法和替换过程; **内核线程管理:*...
4 流程控制
4 流程控制 流程控制是每种语言控制逻辑走向和执行次序的重要部分 Go 中有if 和 for, 而switch 和 goto主要是为了简化代码、降低重复代码而生,属于扩展类的流程控制 if else分支结构if 条件判断的基本写法 if 条件判断格式 if expr1{ block1 }else if expr2{ block2 }else { block3 } 12345678910111213141516171819202122232425 * ==注意:==Go 规定,`if`的**左括号**必须与`if expr`放于同一行;**右括号必须与下一个语句在同一行**#### if 条件判断特殊写法* 可以在 if 表达式前添加一个执行语句,再根据变量值判断 * 示例: * ```go package main import "fmt" func main() { if score := 65; score >= 90 { fmt.Pri...
3 运算符
3 运算符Go 内置运算符: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算术运算符 运算符 + 相加 - 相减 * 相乘 / 相除 % 求余 注意:++和--是Go中单独的语句,而非运算符 关系运算符 运算符 描述 == 是否相等 != 是否不相等 > 左边值是否大于右边值 >= 左边值是否大于等于右边值 < 左边值是否小于右边值 <= 左边值是否小于等于右边值 逻辑运算符 运算符 描述 && 逻辑AND运算符 || 逻辑OR运算符 ! 逻辑NOT运算符 位运算符 位运算符 对整数在内存中的二进制位 进行操作 运算符 描述 & 参与运算的两数各对应的二进制位 相与(两位均为1 才为1) | 参与运算的两数各对应的二进制位 相或(两位有一个为1 就为1) ^ 参与运算的两数各对应的二进制位 相异或(两位相异 则为1) << 左移n位...
2 基本数据类型
2 基本数据类型整型、浮点型、布尔型、字符串 数组、切片、结构体、函数、map、通道等 2.1 整型分为两个大类: 长度:int8, int16, int32, int64 int16: short类型 int64: long 类型 无符号:uint8,uint16, uint32, uint64 uint8: byte型 2.1.1 特殊整型 特殊整型 uint : 32为操作系统上是uint32 int : 32位操作系统上是int32 uintptr : 无符号整型,用于存放一个指针 注意:使用int和uint需要考虑不同平台的差异 注意:获取对象的长度的内建len()函数,返回的长度可以根据不同的平台的字节长度变化 实际使用中,切片或map元素数量可以用int表示 涉及二进制传输、读写文件的结构描述时,不要使用int和uint 2.1.2 数字字面量语法(Number literals syntax)便于开发者以二进制、八进制、十六进制浮点数的格式 定义数字 v := 0b001: 二进制的001 v := 0o77: 八进制的77 v := 0...
1 变量和常量
1 变量和常量
Hexo LearningNote
Hexo 博客最全详细(🗡) 参考博客 环境搭建的准备 Node.js 的安装和准备 关于Node.js和npm的介绍: 参考博客 npm 是 javascript 的包管理工具 npm 与 Node.js 一起发布 npm 更新频率快,需单独更新npmnpm install npm@latest -g 安装包:安装对应的包至当前目录,并创建node_modules文件,下载包进去 npm install <package_name package.json: 可以知道项目中用了什么包 基本的package.json文件:至少包含 包名 name 版本信息 version 创建 package.json npm init : 初始化package.json文件 运行后,如实回答基本信息 主要字段含义: name : 模块名, version: 模块版本信息 description:关于模块功能简单描述,若为空,默认葱当前目录的README.md或者README读取第一行作为默认值 main : 模块被引入后,首先加载的文件,默认为i...













