go
Zenith_Lee
原东风快递程序员,现某不知名高校本科生 永久退出CSDN,本博客不再更新回复
展开
-
goroutine 协程
Go 协程是什么goroutine是Go语言并行设计的核心。goroutine说到底就是线程,但是它比线程更小,十几个 goroutine 可能体现在底层就是五六个线程,Go 语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4~5KB),当然会根据相应的数据伸缩。也正因为如此,可同时运行成千上万个并发任务。goroutine比thread更易用、更高效、更轻便。Go 协程(goroutine)相比于线程(thread)的优势相比线程而言,Go 协转载 2020-10-18 15:57:03 · 291 阅读 · 0 评论 -
接口(interface)
5-1 接口什么是接口在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。在 Go 语言中,接口就是方法签名(Method Signature)的集合。当一个类型定义了接口中的所有方法,我们称它实现了该接口。这与面向对象编程(OOP)的说法很类似。接口指定了一个类型应该具有的方法,并由该类型决定如何实现这些方法。例如,WashingMachine 是一个含有 Cleaning() 和 Drying() 两个转载 2020-10-18 15:55:06 · 347 阅读 · 0 评论 -
结构体
什么是结构体结构体是用户定义的类型,表示若干个字段(Field)的集合。有时应该把数据整合在一起,而不是让这些数据没有联系。这种情况下可以使用结构体。例如,一个职员有 firstName、lastName 和 age 三个属性,而把这些属性组合在一个结构体 employee 中就很合理。结构体的声明type Employee struct { firstName string lastName string age int}在上面的代码片段里,声明了一个结转载 2020-10-18 15:54:19 · 179 阅读 · 0 评论 -
方法(Object)
2-3 方法什么是方法方法其实就是一个函数,在 func 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。下面就是创建一个方法的语法。func (t Type) methodName(parameter list) {}上面的代码片段创建了一个接收器类型为 Type 的方法 methodName。方法示例让我们来编写一个简单的小程序,它会在结构体类型上创建一个方法并调用它。package mainimport转载 2020-10-18 15:52:17 · 149 阅读 · 0 评论 -
Go语言的map
什么是mapmap 是在 Go 中将值(value)与键(key)关联的内置类型。通过相应的键可以获取到值。类似与Python中的字典。如何创建map通过向 make 函数传入键和值的类型,可以创建 map。make(map[type of key]type of value) 是创建 map 的语法。personSalary := make(map[string]int)上面的代码创建了一个名为 personSalary 的 map,其中键是 string 类型,而值是 int 类型。map转载 2020-10-18 15:51:02 · 5446 阅读 · 0 评论 -
Array和Slices
4-1 Array和Slices数组数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 interface{} 类型数组,可以包含任意类型)数组的声明一个数组的表示形式为 [n]T。n 表示数组中元素的数量,T 代表每个元素的类型。元素的数量 n 也是该类型的一部分(稍后我们将详细讨论这一点)。可以使用不同的方式来声明数组,让我们一个一个的来看。package mainimp转载 2020-10-18 15:49:54 · 149 阅读 · 0 评论 -
4-2 可变参数函数
什么是可变参数函数可变参数函数是一种参数个数可变的函数。语法如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最后一个参数。请注意只有函数的最后一个参数才允许是可变的。通过一些例子理解可变参数函数如何工作你是否曾经想过 append 函数是如何将任意个参数值加入到切片中的。这样 append 函数可以接受不同数量的参数。func append(slice []Type, elems ...Type) []Type上面是 append 函数的定义。在定义中 el转载 2020-10-08 21:17:54 · 197 阅读 · 0 评论 -
4-1 数组和切片
数组数组是同一类型元素的集合。例如,整数集合 5,8,9,79,76 形成一个数组。Go 语言中不允许混合不同类型的元素,例如包含字符串和整数的数组。(译者注:当然,如果是 interface{} 类型数组,可以包含任意类型)数组的声明一个数组的表示形式为 [n]T。n 表示数组中元素的数量,T 代表每个元素的类型。元素的数量 n 也是该类型的一部分(稍后我们将详细讨论这一点)。可以使用不同的方式来声明数组,让我们一个一个的来看。package mainimport ( "fmt")转载 2020-10-07 21:36:26 · 161 阅读 · 0 评论 -
3-3 Go语言的switch语句
switch 是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据匹配情况执行相应的代码块。它可以被认为是替代多个 if else 子句的常用方式。看代码比文字更容易理解。让我们从一个简单的例子开始,它将把一个手指的编号作为输入,然后输出该手指对应的名字。比如 0 是拇指,1 是食指等等。package mainimport ( "fmt")func main() { finger := 4 switch finger { case 1:转载 2020-10-03 20:30:32 · 160 阅读 · 0 评论 -
3-2 Go语言的循环
循环语句是用来重复执行某一段代码。for 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环。for循环语法for initialisation; condition; post { }初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 true ,则 {} 内的循环体将执行,接着执行 post 语句。post 语句将在每次成功循环迭代后执行。在执行 post 语句后,条件将被再次检查。如果为 true, .转载 2020-10-03 19:45:11 · 211 阅读 · 0 评论 -
3-1 Go的if-else语句
if 是条件语句。if 语句的语法是if condition { }如果 condition 为真,则执行 { 和 } 之间的代码。不同于其他语言,例如 C 语言,Go 语言里的 { } 是必要的,即使在 { } 之间只有一条语句。if 语句还有可选的 else if 和 else 部分。if condition { } else if condition {} else {}if-else 语句之间可以有任意数量的 else if。条件判断顺序是从上到下。如果 if 或 els转载 2020-10-02 21:45:02 · 122 阅读 · 0 评论 -
2-2 Go语言的包(package)
到目前为止,我们看到的 Go 程序都只有一个文件,文件里包含一个 main 函数和几个其他的函数。在实际中,这种把所有源代码编写在一个文件的方法并不好用。以这种方式编写,代码的重用和维护都会很困难。而包(Package)解决了这样的问题。包用于组织 Go 源代码,提供了更好的可重用性与可读性。由于包提供了代码的封装,因此使得 Go 应用程序易于维护。例如,假如我们正在开发一个 Go 图像处理程序,它提供了图像的裁剪、锐化、模糊和彩色增强等功能。一种组织程序的方式就是根据不同的特性,把代码放到不同的包中。转载 2020-10-02 12:15:51 · 171 阅读 · 0 评论 -
2-1 Go的函数(function)
什么是函数就像数学中的函数y=f(x)y = f(x)y=f(x)数学中的函数由输入xxx,输出yyy,以及算法fff组成而Go语言的函数与数学的函数类似,是一块执行特定任务的代码(类比数学函数中的算法fff)。一个函数是在输入源(类比数学函数中的输入xxx)基础上,通过执行一系列的算法,生成预期的输出(类比数学函数中的输入yyy)。声明一个函数在Go语言中声明函数可以用关键字funcfunc function1(value int) int{ // 在此处填写函数体 return v转载 2020-09-28 21:05:24 · 127 阅读 · 0 评论 -
1-9 Go语言的Channel
1-9 Go语言的Channel Silce Map 和 ArrayChannelChannel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。它的操作符是箭头 <-,其中箭头指向哪,数据就流向哪。ch <- v // 发送值v到Channel ch中v := <-ch // 从Channel ch中接收数据,并将数据赋值给vchannel变量必须先创建后使用,创建channel方法如下原创 2020-09-21 17:57:43 · 298 阅读 · 0 评论 -
1-8 自定义类型
1-8 自定义类型可将类型分为命名和未命名两⼤类。命名类型包括 bool、int、string 等,⽽ array、slice、map 等和具体元素类型、⻓度等有关,属于未命名类型。具有相同声明的未命名类型被视为同⼀类型。被视为同一类型的原则具有相同基类型的指针。具有相同元素类型和长度的array具有相同元素类型的slice具有相同键值类型的map具有相同元素类型和传送方向的channel具有相同字段序列 (字段名、类型、标签、顺序) 的匿名struct签名相同 (参数和返回值,不包括参原创 2020-09-21 17:41:08 · 133 阅读 · 0 评论 -
1-7 指针
1-7 指针在go语言中定义指针时,支持指针类型 *T,指针的指针 **T,以及包含包名前缀的 *.T。指针的特性默认值 nil,没有 NULL 常量。操作符 “&” 取变量地址,"*" 透过指针访问目标对象。不支持指针运算,不支持 “->” 运算符,直接用 “.” 访问目标成员。package mainimport "fmt"func main() { type data struct { a int } var d = data{1234} var p原创 2020-09-20 20:04:47 · 131 阅读 · 0 评论 -
1-6 字符串
1-6 字符串在Go语言里面,字符串属于不可变数值类型,也就是是当变量的值发生改变时,其内存地址发生改变。在Go语言内部字符串是使用指针指向UTF-8数组。当然,与不可变数值类型相反,可变数值类型的意思就是,当变量的值发生改变时,其内存地址不发生改变。默认值是空字符串 “”。用索引号访问某字节,如 s[i]。不能用序号获取字节元素指针,&s[i] 非法。不可变类型,无法修改字节数组。字节数组尾部不包含 NULL使用 “`” 定义不做转义处理的原始字符串,支持跨行s := ` a原创 2020-09-19 21:24:01 · 211 阅读 · 0 评论 -
1-5 类型转换
1-5 类型转换不支持隐式类型转换,即便是从窄向宽转换也不行。var b byte = 100 // var n int = b // Error: cannot use b (type byte) as type int in assignment var n int = int(b) // 显式转换使用括号避免优先级错误*Point(p) // 相当于 *(Point(p)) (*Point)(p) <-chan int(c)原创 2020-09-18 21:36:58 · 150 阅读 · 0 评论 -
1-4 常量
1-4 常量代码实现package mainimport ( "fmt" "math" "unsafe")const x, y int = 1, 2 // 多常量初始化const s = "Hello, World!" // 类型推断const ( // 常量组 a, b = 10, 100 c bool = false n = 5000 f = unsafe.Sizeof(b))原创 2020-09-18 20:51:25 · 141 阅读 · 0 评论 -
1-3 变量
1-3 变量代码实现package mainimport "fmt"func main() { var a string = "initial" //定义字符串 fmt.Println(a) var b, c int = 1, 2 //定义两个整型变量 fmt.Println(b, c) var d = true //定义一个布尔型变量 fmt.Println(d) var e int原创 2020-09-17 21:19:19 · 133 阅读 · 0 评论 -
1-2 数据类型与运算
1-2 数据类型与运算代码实现package mainimport "fmt"func main() { fmt.Println("go" + "lang") //字符串的"+"运算 fmt.Println("1+1 =", 1+1) //整型的"+"运算 fmt.Println("7.0/3.0 =", 7.0/3.0) //浮点的"运算" fmt.Println(true && fal原创 2020-09-17 20:54:46 · 295 阅读 · 0 评论 -
1-1 go语言的helloworld
1-1 go语言的helloworldgo的helloworld实现package main //使用main库import "fmt" //导入fmt包func main() { fmt.Println("hello world") //调用Println输出helloworld}代码解释:声明主包,在Go语言里面一个包是一组方法的集合引入基本的f原创 2020-09-17 20:43:05 · 1381 阅读 · 0 评论