8 函数
8 函数
函数是组织好的、可重复使用的、用于执行指定任务的代码块
Go 中支持函数、匿名函数和闭包,并且函数在Go中属于”一等公民”
函数定义
具体格式:
```gofunc 函数名(参数)(返回值){
函数体
}
123456789101112 * **函数名**:*字母、数字、下划线*组成。在**同一个包内**,函数名不能重复 * **参数**:由 *参数变量和参数变量* 的类型组成,多个参数使用**逗号**隔开 * **返回值**:由 *返回值变量和其类型* 组成,也**可以只写返回值类型**,**多个返回值必须用`()`包裹**,并用逗号隔开 * **函数体**:实现指定功能的代码块* 示例: * ```go func intSum(x int, y int) int { return x +y }
函数的参数和返回值都是可选的
函数的调用
定义函数后,使用函数名()调用函数
调用有返回值的函数时,可以不接收其返回值
参数类型简写
函数参数列表 中,若相邻变量的参数相同,则可以省略左边的类型*
123fu ...
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 中的数据都是成对出现
示例
```goscoreMap := make(map[string]int, 8)scoreMap[“小明”] = 90fmt.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 []stringvar b = []int{}var c = []bool{false, true}12345678910111213141516171819202122232425262728293031323334 #### 切片的长度和容量* 切片拥有自己的长度和容量: * `len()` 求长度 * `cap()` 求容量#### 切片的表达式* 切片表达式 从`字符串、数组、指向数组或切片的指针` 构造 子字符串或切片* 两种变体 * 指定`low`和`h ...
5 Array
5 Array 数组
同一种数据类型的集合
Go 中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变
语法:var a [3]int
数组定义
var name [size]T
size 必须是常量
长度是数组类型的一部分,定义后不可变
不同长度,不可相互赋值
数组可以使用下标访问,0 - size-1
若越界,会触发访问越界,panic
数组的初始化方法一
可以使用 初始化列表 设置数组元素的值
```govar a [3]int //数组元素初始化为int类型的0var b = [3]int{1,2} //使用指定的初始值完成成初始化var c = [3]string{“北京”,”上海”} //指定的值完成初始化12345678910 #### 方法二* 我们可以让编译器根据初始值的个数自行推断长度 * ```go var a = [...]int{1,2} var b = [...]string{"s ...
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 条件判断格式
```goif 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.Println(" ...
3 运算符
3 运算符Go 内置运算符:
算术运算符
关系运算符
逻辑运算符
位运算符
赋值运算符
算术运算符
运算符
+
相加
-
相减
*
相乘
/
相除
%
求余
注意:++和--是Go中单独的语句,而非运算符
关系运算符
运算符
描述
==
是否相等
!=
是否不相等
>
左边值是否大于右边值
>=
左边值是否大于等于右边值
<
左边值是否小于右边值
<=
左边值是否小于等于右边值
逻辑运算符
运算符
描述
&&
逻辑AND运算符
||
逻辑OR运算符
!
逻辑NOT运算符
位运算符
位运算符 对整数在内存中的二进制位 进行操作
运算符
描述
&
参与运算的两数各对应的二进制位 相与(两位均为1 才为1)
|
参与运算的两数各对应的二进制位 相或(两位有一个为1 就为1)
^
参与运算的两数各对应的二进制位 相异或(两位相异 则为1)
<<
左移n位,即乘以2^n
>>
右移n位,即除以2^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 := 0xff ...
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 : 模块被引入后,首先加载的文件,默认为inde ...