![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Golang
文章平均质量分 73
分享Golang知识
西瓜味儿的小志
这个作者很懒,什么都没留下…
展开
-
golang的GMP原理
在学习 golang 的 GMP 原理前,你可能需要了解一下关于进程、线程以及协程的知识,可以先瞅瞅这篇之前的这篇文章。文章地址:golang的并发编程 1、G、M、P都代表什么意思Processor处理器,其中包含了运行 goroutine 的资源,如果线程想运行 goroutine,那必须先获取 P,P 中还包含了可运行的 G 队列。 2、GMP模型golang 中线程是运行 goroutine 的实体,调度器的作用是把可运行的 goroutine 分配到工作线程上。原创 2021-07-26 16:44:46 · 4877 阅读 · 0 评论 -
golang的并发编程
一、进程、线程、协程、并发、并行1、进程、线程、协程1.1 进程:对操作系统来说,进程是资源分配的最小单位,程序启动时,操作系统就会给这个程序分配一块内存空间,对于程序本身而言它认为这是一整块连续的内存空间,称为虚拟内存空间,而实际上落实到操作系统内核时通常是一块块的内存碎片。一个进程大小可能是几个G,进程之间切换开销较大,进程可以实现操作系统的并发。这片虚拟内存空间,可以划分为内核空间和用户空间,它们相互隔离,程序即使崩溃了,内核空间也不会受到影响。进程运行在内核空间时称为内核态,运行在用户空间原创 2021-07-26 15:54:34 · 3030 阅读 · 0 评论 -
golang的接口
一、接口是什么、为什么需要接口是什么:接口(interface)是一组仅包含方法名、参数、返回值的未具体实现的方法的集合。接口只定义规范而不去实现,细节由具体的对象来实现。golang中接口是一种抽象的类型。为什么:大多情况下,一些数据可能包含不同的类型,但是可能会有一个或者多个共同点,这些共同点就是抽象的基础。Go的接口类似c++的多态,接口相当于实现一个父类,然后派生类具体实现父类的虚函数,最后通过父类指针指向不同的派生类对象去调用那个派生类对象的虚函数,从而实现多态。举例说明一下,比如三角形,四边原创 2021-07-15 16:33:45 · 9821 阅读 · 2 评论 -
如何通过GoLand进行Debug
如何通过GoLand调试go程序?可以分两种情况:第一种是普通不需要传参数的程序的调试第二种是需要传一些参数才能运行的程序的调试 1、不需要传参数的程序如何Debug先随便写一个简单的程序如下:func main() { a := 1 b := 2 val := a + b fmt.Println(val)}假设我们现在要调试这个程序,如何搞呢?首先先打个断点然后点击一下绿色箭头会出现下面这样接着点击那个绿色小虫子就可以开启原创 2021-07-07 11:41:06 · 20139 阅读 · 4 评论 -
golang的方法
1、方法定义及使用go中的方法是一个包含了接受者的函数,接受者可以是命名类型或结构体类型的一个值或者一个指针,语法格式如下:func (variable_name variable_data_type) function_name() [return_type]{ /* 函数体*/} 示例:type User struct { Name string Email string} //定义一个方法func (u User) Notify() {原创 2021-07-05 18:42:19 · 332 阅读 · 0 评论 -
golang的函数
1、函数定义及调用格式:func function_name( [parameter list] ) [return_types] { 函数体} 定义解析:func: func 声明一个函数function_name:函数名称,函数名和参数列表一起构成了函数的签名parameter list:参数列表。参数列表指定的是参数类型、顺序、及参数个数。参数可选,函数可以不包含参数return_types:返回类型原创 2021-06-30 15:14:52 · 596 阅读 · 0 评论 -
golang的流程控制之range
range 用于在循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)中的元素。数组、切片中 range 返回元素的索引和索引对应的值,集合中返回 key-value 对。格式:for key, value := range data { } 可以忽略不想要的返回值,也可以用 “_” 这个特殊变量。func main() { m := map[string]int{"a": 1, "b": 2} for k, v := ra原创 2021-06-28 11:37:53 · 276 阅读 · 0 评论 -
golang的map
map是一种无序的基于key-value的数据结构,Go语言中map是引用类型,必须初始化才能使用。1、map的定义定义: map[KeyType]ValueType其中,KeyType表示键的类型,ValueType表示对应值的类型。map类型变量默认初始值为 nil,要使用make()函数分配内存。语法 : make(map[KeyType]ValueType, [cap])其中,cap为map的容量,参数不是必须给的。2、map的基本用法func main() { var m原创 2021-06-21 14:49:19 · 22963 阅读 · 0 评论 -
golang的流程控制之switch
switch 语句中的每一个 case 分支都是唯一的,从上至下逐一测试,直到匹配为止。Go中 switch 语句case匹配项后面不需要加 break。默认 case 最后自带 break ,匹配成功后不会执行其他 case,如果需要执行后面的 case,可以用 fallthrough 。golang中的switch语句能干嘛?1、用作等值判断switch var1 { case val1: ... case val2: ... defaul原创 2021-06-24 19:49:24 · 812 阅读 · 0 评论 -
golang的new和make
Go中对于引用类型的变量,在使用的时候既要声明它,也要为它分配内存空间,否则值就没办法存储。对于值类型的声明不需要分配内存空间,因为在声明的时候已经默认分配好了。Go语言中 new 和 make 是内建的两个函数,主要用来分配内存。go中的值类型和引用类型:值类型分别有:int系列、float系列、bool、string、数组和结构体引用类型有:指针、slice切片、管道channel、接口interface、map、函数等值类型的特点是:变量直接存储值,内存通常在栈中分配引用类型的特点是:变原创 2021-06-07 20:32:56 · 764 阅读 · 0 评论 -
golang的byte、rune和字符串
1、byte和rune类型byte,占用1个字节,即8 个比特位,它和 uint8 类型本质上没有区别,它表示的是 ACSII 表中的一个字符先定义两个 byte 类型和 uint8 类型的变量 a 和 bfunc main() { var a byte = 65 var b uint8 = 66 fmt.Printf("a 的值: %c \nb 的值: %c", a, b)}在 ASCII 表中,字母 A 的ASCII 的为 65 ,字母 B 的ASCII 为 66,原创 2021-06-21 15:12:18 · 1479 阅读 · 0 评论 -
golang的结构体struct
Go语言中基础数据类型可以表示事物的基本属性,但是当要表达事物的全部或部分属性时,用单一的基本数据类型无法满足需求,Go中提供了一种自定义数据类型,可以封装多个基本数据类型,该数据类型叫结构体,英文名struct。Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。不过 Go语言可以通过struct来实现面向对象。 1、结构体的定义使用type和struct关键字定义结构体,具体如下:type 类型名 struct { 字段名 字段类型 字段名 字原创 2021-06-22 15:42:50 · 838 阅读 · 0 评论 -
golang的切片和数组
一、golang数组数组的定义var a [len]int,如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。数组可以通过下标进行访问,下标是从0开始,最后一个元素下标是:len-1,遍历数组一般有以下两种方式:for i := 0; i < len(a); i++ {}for index, v := range a {}ps:数组支持比较,支持 “==”、"!=" 操作符,比较数组类型以及数组中的每一个元素,类型不同不能进行比较。func原创 2021-06-04 20:05:52 · 1982 阅读 · 3 评论