
go基础语法
文章平均质量分 58
丁真的小马
这个作者很懒,什么都没留下…
展开
-
GO:并发 - 并发安全和锁
有时候在Go代码中可能会存在多个goroutine同时操作一个资源(临界区),这种情况会发生竞态问题(数据竞态)。var x int64var wg sync.WaitGroupfunc add() { for i := 0; i < 5000; i++ { x = x + 1 } wg.Done()}func main() { wg.Add(2) go add() go add() wg.Wait() fmt.Println(x)}一、互斥锁互斥锁是一原创 2022-01-24 19:31:38 · 170 阅读 · 0 评论 -
GO:并发 - channel
单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。如果说goroutine是Go程序并发的执行体,channel就是它们之间的连接。chan原创 2022-01-24 18:50:35 · 178 阅读 · 0 评论 -
GO:基础知识 - 接口
一、接口概念在Go语言中接口(interface)是一种类型,一种抽象的类型。interface是一组method的集合,接口做的事情就像是定义一个协议(规则),不关心对方是什么类型,只关心对方能做什么。在编码过程中更专注于对象的行为,提升代码的扩展性。二、接口的定义type 接口类型名 interface{ 方法名1( 参数列表1 ) 返回值列表1 方法名2( 参数列表2 ) 返回值列表2 …}其中:接口名:使用type将接口定义为自定义的类型名。Go语原创 2022-01-24 17:43:50 · 215 阅读 · 0 评论 -
GO:基础知识 - 结构体
Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。一、类型定义和类型别名自定义类型:在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型, Go语言中可以使用type关键字来定义自定义类型。例如://将MyInt定义为int类型type MyInt int类型别名:类型别名规定:TypeAlias只是Type的别名,本质上TypeAlias与Type是同一个类原创 2022-01-24 17:05:15 · 441 阅读 · 0 评论 -
GO:new和make
在Go语言中对于引用类型的变量,我们在使用的时候不仅要声明它,还要为它分配内存空间,否则我们的值就没办法存储。而对于值类型的声明不需要分配内存空间,是因为它们在声明的时候已经默认分配好了内存空间。要分配内存,就引出来今天的new和make。Go语言中new和make是内建的两个函数,主要用来分配内存。一、newnew是一个内置的函数,它的函数签名如下:func new(Type) *Type其中,Type表示类型,new函数只接受一个参数,这个参数是一个类型 *Type表原创 2022-01-24 16:11:22 · 445 阅读 · 0 评论 -
GO:基础知识 - 函数
一、函数定义Go语言中定义函数使用func关键字,具体格式如下:func 函数名(参数)(返回值){ 函数体}func intSum(x int, y int) int { return x + y}二、参数类型简写函数的参数中如果相邻变量的类型相同,则可以省略类型,例如:func intSum(x, y int) int { return x + y}可变参数可变参数是指函数的参数数量不固定。Go语言中的可变参数通过在参数名后加...来标识原创 2022-01-24 15:57:18 · 167 阅读 · 0 评论 -
GO:基础数据类型 - map
map是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。一、map定义map[KeyType]ValueTypemap类型的变量默认初始值为nil,需要使用make()函数来分配内存。语法为:make(map[KeyType]ValueType, [cap])其中cap表示map的容量,该参数虽然不是必须的,但是我们应该在初始化map的时候就为其指定一个合适的容量。二、map的基本使用map的创建func main()原创 2022-01-24 14:48:17 · 324 阅读 · 0 评论 -
GO:基础数据类型 - 切片
一、数组的局限因为数组的长度是固定的并且数组长度属于类型的一部分,所以数组有很多的局限性。 例如:func arraySum(x [3]int) int{ sum := 0 for _, v := range x{ sum = sum + v } return sum}这个求和函数只能接受[3]int类型,其他的都不支持。 再比如:a := [3]int{1, 2, 3}数组a中已经有三个元素了,我们不能再继续往数组a中添加新元素了。原创 2022-01-24 14:09:27 · 321 阅读 · 0 评论 -
GO:基础数据类型 - 数组
一、数组的定义数组是同一种数据类型元素的集合。 在Go语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。 基本语法:var 数组变量名 [元素数量]T比如:var a [5]int, 数组的长度必须是常量,并且长度是数组类型的一部分。一旦定义,长度不能变。 [5]int和[10]int是不同的类型。二、数组初始化方式一:初始化数组时可以使用初始化列表来设置数组元素的值。func main() { var testArray [3]int原创 2022-01-24 11:58:13 · 256 阅读 · 0 评论 -
GO:基础语法 - fmt总结
Print系列函数会将内容输出到系统的标准输出,区别在于Print函数直接输出内容 Printf函数支持格式化输出字符串 Println函数会在输出内容的结尾添加一个换行符func main(){ var n = 100 var s = “frz” //查看类型 fmt.Printf("%T\n",n) //查看值 fmt.Printf("%v\n",n) //查看二进制 fmt.Printf("%b\n",n) //查看十进制原创 2022-01-23 22:18:17 · 415 阅读 · 0 评论 -
GO:基本数据类型
一、整型整型分为以下两个大类:按长度分为:int8、int16、int32、int64对应的无符号整型:uint8、uint16、uint32、uint64其中,uint8就是我们熟知的byte型,int16对应C语言中的short型,int64对应C语言中的long型。...原创 2022-01-23 22:08:43 · 285 阅读 · 0 评论 -
GO:基础语法 - 变量声明
一、变量声明标准声明var 变量名 变量类型var name stringvar age intvar isOk bool推荐使用驼峰式变量名,studentName批量声明var ( a string b int c bool d float32)变量初始化Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0。 字符串变量的默认值为空..原创 2022-01-23 21:53:17 · 182 阅读 · 0 评论