Markdown 学习笔记(一) - 原生语法
回到文章目录
本文转载自 NX の 博客
Markdown 原生语法是 Markdown 最基础的支持。它以精简方便著称,上手快。不同编辑器的 Markdown 语法偶尔略有差异,不过渲染效果差异极大,可以选择自己喜欢的风格。
标题
使用#来设置标题,有多少个#就是第多少级标题
代码预览123456# 这是一级标题## 这是二级标题### 这是三级标题#### 这是四级标题##### 这是五级标题###### 这是六级标题见本文中的标题。
字体效果
原版中共有3种字体效果:加粗、倾斜、删除,可以相互叠加
代码预览12345**这是加粗的文字***这是倾斜的文字****这是斜体加粗的文字***~~这是加删除线的文字~~~~*这是斜体删除的文字*~~这是加粗的文字
这是倾斜的文字
这是斜体加粗的文字
这是加删除线的文字
这是斜体删除的文字
引用
使用>添加引用效果,允许嵌套
代码预览1> 这是引用的内容
12> 这是引用的内容> > 而且还可以嵌套引用
这是引用的内容
这是引用的内容
而且还可以嵌套引用
注:不同编辑器的引用差异较大。
列表
列 ...
Markdown 学习笔记(零) - 前言
前言
Markdown 是一种轻量级标记语言,它以纯文本形式(易读、易写、易更改)编写文档,并最终以 HTML 格式发布。Markdown 也可以理解为将以 Markdown 语法编写的语言转换成 HTML 内容的工具。
选择 Markdown 是因为 Markdown 可以认为是简化版的 HTML,使用 HTML 可以编写优美的文档,但 HTML 大量的标签并不是对于书写友好。Markdown 在最简化用户书写的情况下为用户提供了较为多样的文本格式。当然,如果需要,大多数 Markdown 编辑器都支持直接使用 HTML 语法。
Markdown 编辑器种类繁多,并没有十分统一的标准,不同编辑器的渲染效果也差异极大。同时不同编辑器支持各不相同的拓展,后面的文章将会介绍 Markdown 原生语法、LATEX 数学公式、Mermaid 绘图、Hexo 标签外挂,后三者均为拓展,支持的普及度和差异性也各不相同。
在开始之前请下载好你的 Markdown 编辑器,推荐使用:Typora — a markdown editor, markdown reader.
前置知识
本系列不需要任何前 ...
Golang 入门基础(八) - 包管理
回到文章目录
Golang 提供了包管理方式,方便项目的分类管理。
你可以理解为这是进阶版的 Get Start。
项目结构
flowchart TD
P("项目路径 - 项目名")
D1("包路径 - 包名")
D2("包路径 - 包名")
_1("...")
D0("包路径 src - 包名 main")
F11("源文件")
F12("源文件")
_2("...")
F21("源文件")
F22("源文件")
F23("源文件")
_3("...")
_4("...")
F01("源文件 main.go")
P --> D1 & D2 & _1 & D0
...
Golang 入门基础(七) - 类面向对象设计
回到文章目录
Golang 并不支持面向对象设计,但是它一些特性使许多面向对象的设计方法得以引入。
数据存储 - 结构体
对象是变量与函数的集合,在 Golang 中,变量对应结构体的字段、函数对应结构体的方法。在 Golang 中结构体存储了对象的所有变量。
详见 Golang 入门基础(三) - 内置数据类型(上) - 结构体类型
静态绑定 - 方法
对象是变量与函数的集合,在 Golang 中,变量对应结构体的字段、函数对应结构体的方法。在 Golang 中方法实现了对象到函数的静态绑定。
详见 Golang 入门基础(四) - 内置数据类型(下) - 方法
继承
Golang 中结构体支持继承,其继承同时继承其字段与方法。
详见 Golang 入门基础(三) - 内置数据类型(上) - 结构体类型 - 结构体类型的嵌套与继承
1234567891011121314151617181920package mainimport "fmt"type A struct { name string}func (a ...
Golang 入门基础(六) - 多线程开发
回到文章目录
Golang 原生支持多线程开发,因此多线程开发是学习 Golang 不可少的环节。
多线程相关语法
详见 Golang 入门基础(四) - 内置数据类型(下) - channel 类型
详见 Golang 入门基础(五) - 控制语句 - 条件控制语句 - select-case 语句
详见 Golang 入门基础(五) - 控制语句 - 特殊控制语句 - go 语句
多线程 Golang 解决方案
等待子线程结束
众所周知,主线程结束将结束所有子线程。其他语言提供了 wait 或 join 等方法等待子线程正常结束,在 Golang 中可以使用 channel 等待线程结束。
未等待结果
在下面这个案例中,你将会看到未等待子线程结束时,子线程未执行任何代码。因为在此情况下,主线程结束将立即杀死子线程。
1234567891011func thread() { for i := 0; i < 5; i++ { fmt.Println("Thread", i) time.Sleep(ti ...
Golang 入门基础(五) - 控制语句
回到文章目录
Golang 中的条件控制语句与 Clang 相似,但省去了许多不必要的附加符号,提供必要的精简方式。
条件控制语句
if-else 语句
与 Clang 不同的是 Golang 中的表达式都省去了 () 。
Usage 1:
1234567if <condition1> { <block1>} else if <condition2> { <block2>} else { <block0>}
Example:
123if returnValue == -1 { fmt.Println("Something Error.")}
12345if weight < 240 { fmt.Println("Weight OK!")} else { fmt.Println("Too weight.") ...
Golang 入门基础(四) - 内置数据类型(下)
回到文章目录
channel 类型
channel 用于进行多线程管道通信与同步。
定义 channel
1a := make(chan <type>, [<size>])
12a := make(chan int) // 无缓冲区的 int 通道b := make(chan int, 2) // 缓冲区大小为 2 的 int 通道
注意:channel也是引用数据类型,直接使用 var a chan int 是错误的,其没有构造 chan 结构。
channel 读写
channel 具有缓冲区大小,读写会对 channel 的缓冲区进行操作。当缓冲区为空时,读操作阻塞,知道新的写操作完成;当缓冲区为满时,写操作阻塞。
特殊地,当缓冲区大小为 0 时,所有读写操作都会阻塞等待直到 channel 的读写操作配对。
channel 写
1<channel> <- <data>
1a <- 1
channel 读
1<data> := <-<channel>
1x ...
Golang 入门基础(三) - 内置数据类型(上)
回到文章目录
指针类型
定义指针
123var a int = 10var p *int = &app := &a
空指针
默认值,空指针的值为 nil 。
访问指针
使用 *ptr 访问值,地址无法访问将产生运行错误。
结构体使用 name.attr 访问元素,在 Golang 中可以使用 ptr.attr 通过指针访问元素(Clang 是 ptr->attr)。
结构体类型
定义结构体
具名结构体
123456789type Book struct { name string author string}var a Book // 定义默认结构体var b = Book{"Golang 入门经典", "Unknown"} // 全部初始化var c = Book{name: "C++ 入门指南"} // 局部初始化d := Book{name: "鸟哥的 Linux 私房菜" ...
Golang 入门基础(二) - 变量与常量
回到文章目录
定义
var 定义变量
12345678var a int // var 定义变量var a int = 10 // var 设置初值var a = 10 // var 自动解析类型 (但不能解析为 int8 等)var a, b int = 1, 2 // var 定义同类型多变量var ( a int s string) // var 定义多变量
12345var ( a, b int = 1, 2 s, ss string pi = 3.1415926535 // float64)
const 定义常量
12345678const a int = 10 // 必须初始化const a = 10 // 自动解析常量类型const a, b int = 1, 2 // 定义同类型多常量const ( a int = 10 s string = "Hello World!" pi float64 = 3.1415926535)
:= 自动变量
123a := 1 // var a i ...
Golang 入门基础(一) - Get Start
回到文章目录
这是一个相对轻松的开始~
一个 Golang 主程序必须包含三个部分:包名、导包、主函数。在主函数和导包之间可能需要加上一些全局变量和函数的定义。
1234567package mainimport "fmt"func main() { fmt.Println("Hello World!")}
package main 定义包名,如果包名为 main ,其应该包含 func main() {} 否则不该包含。
import 有两种用法:
1import "fmt"
1234import ( "fmt" "time")