![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go
shanghai_in_summer
这个作者很懒,什么都没留下…
展开
-
go语言的break、goto、continue语句
1、break配合“标签”使用,可跳出标签指定的那层循环,标签名区分大小写,若不使用会造成编译错误;func main() {LABEL1: for { for i := 0; i < 10; i++ { if i > 3 { break LABEL1 } fmt.Println(i) } }}// 运行结果0123// 注:...原创 2019-06-14 01:51:16 · 503 阅读 · 0 评论 -
go中的资源共享问题
1、原子函数 原子函数能够以加锁机制来同步访问整型变量和指针。2、atomic包的AddInt64函数会同步整型值的加法,方法是强制同一时刻只有一个goroutine运行并完成这个加法操作。当goroutine试图去调用任何原子函数时,这些goroutine都会自动根据所引用的变量做同步处理。例:var ( counter int64 wg sync.WaitGroup)func...原创 2019-08-01 09:31:05 · 138 阅读 · 0 评论 -
Go中的并发与并行
1、线程(thread)和进程(process):(1)进程 当运行一个应用程序(如一个IDE或者编辑器)的时候,操作系统会为这个应用程序启动一个进程。可以将这个进程看做一个包含了应用程序在运行中需要用到和维护的各种资源的容器。(2)线程 一个线程是一个执行空间,这个空间会被操作系统调度来运行函数中所写的代码。每个进程至少包含一个线程,每个进程的初始线程被称作主线程。(3)操作系统...转载 2019-07-24 09:32:12 · 211 阅读 · 0 评论 -
go中的包
1、所有go语言的程序都会组织成若干组文件,每组文件被称为一个包。2、所有的.go文件,除了空行和注释,都应该在第一行声明自己所属的包。每个包都在一个单独的目录里。同一个目录下的所有.go文件必须同一个包名。3、给包命名的惯例是使用包所在目录的名字。目录及包名应该全小写。4、go语言的编译程序会试图把main命名的包编译为二进制可执行文件。所有用go语言编译的可执行程序都必须有一个名叫...转载 2019-07-17 08:49:59 · 141 阅读 · 0 评论 -
go中的方法
1、方法是用户定义的类型的行为。方法是一种函数,在关键字func和方法名之间添加了一个参数,该参数被称作接受者;2、go语言中有两种类型的接受者:值接收者和指针接收者;3、(1)当使用值接收者声明方法,调用时会使用这个值的一个副本来执行。此时该类型的值不会被改变,例:type user struct { name string email string}func (u us...原创 2019-07-06 17:24:26 · 800 阅读 · 0 评论 -
go中的自定义类型
1、go中定义新类型的两种方法 (1)使用结构体关键字struct,例:type user struct { name string email string ext int}// 注意:定义结构体时各字段之间不用加逗号,定义结构体的变量时lisa := user{ name: "Lisa", email: "lisa@email.com", ext: 123,...转载 2019-07-04 09:23:18 · 1957 阅读 · 0 评论 -
go之嵌入类型
1、嵌入类型是将已有的类型直接声明在新的结构类型里。被嵌入的类型被称为新的外部类型的内部类型。2、通过嵌入类型,与内部类型相关的标识符(字段、方法)会提升到外部类型上。这些被提升的标识符就像直接声明在外部类型里的标识符一样,也是外部类型的一部分。外部类型也可以通过声明与内部类型标识符同名的标识符来覆盖内部标识符的字段或方法,例1:type user struct { name stri...转载 2019-07-09 09:30:33 · 270 阅读 · 0 评论 -
go中的数组
1、声明数组语法:var variable_name [SIZE] variable_type, 其中SIZE即为长度和容量,variable_type可以为“内置类型”,也可以为某种“结构类型”;2、若使用...替代数组的长度,Go语言会根据初始化时数组元素的数量来确定该数组的长度:b := [...]int{1,2,3,4,5,6,7,8}fmt.Printf("length: %...转载 2019-06-25 01:43:21 · 1399 阅读 · 0 评论 -
go中的切片Slice
1、切片是一种引用类型,当引用改变其中元素的值时,其他所有引用都会改变该值func main(){ a := []byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'} s1 := a[3:7] s2 := s1[0:5] s2[1] = 97 fmt.Println(string(a)) fmt.Println(string...原创 2019-06-27 10:19:52 · 137 阅读 · 0 评论 -
go中的map
1、map的创建和初始化 (1)使用make函数,例:dict := make(map[string]int); (2)使用映射字面量,例:dict := map[stringstring{"Red":"Hong", "Orange":"Huang"},即初始化。2、可通过声明一个未初始化的映射来创建一个值为nil的映射。nil映射不能用于存储键值对,否则,会产生一个语言运...原创 2019-07-02 02:07:04 · 97 阅读 · 0 评论 -
go中的interface
1、interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口;2、interface可以被任意的对象实现,一个对象可以实现任意多个interface;3、任意的类型都实现了空interface(interface{}),也就是包含0个method的interface;4、对于一个interface的变量,该变量可以存储实现这个interface...转载 2019-06-18 02:03:23 · 200 阅读 · 0 评论 -
go之interface变量存储的类型
如何反向知道interface变量里面实际保存了的是哪个类型的对象呢?目前常用的有两种方法:1、value, ok = element.(T),这里value就是变量的值,ok是一个bool类型,element是interface变量,T是断言的类型。如果element里面确实存储了T类型的数值,那么ok返回true,否则返回false。package mainimpo...转载 2019-06-21 02:14:02 · 957 阅读 · 0 评论 -
go中的数组Array
1、定义数组的格式: var <varName> [n]<type>;2、数组的定义和赋值:func main() { var a [5]int fmt.Println(a) var b = [3]string{"ab"} fmt.Println(b) var c = [10]int{9:2} //将第10个元素赋值为2 fmt.Println(c)...原创 2019-06-15 14:02:07 · 91 阅读 · 0 评论 -
go中的常量
1、常量的定义格式:const identifier [type] = value;2、多个相同类型的声明可以简写为:const c_name1, c_name2 = value1, value2;3、常量枚举:const ( Unknown = 0 Female = 1 Male = 2)4、常量可以用len(), cap(), unsafe.Siz...原创 2019-06-15 09:34:03 · 136 阅读 · 0 评论 -
go中的switch语句
1、经典案例func main() { a := 1 switch a { case 0: fmt.Println("a = 0 ") case 1: fmt.Println("a = 1") default: fmt.Println("Unknown") }}//运行结果a = 1 2、(1) 可以使用任何类型或表达式作为条件语句; (2)不需要写...原创 2019-06-15 02:23:21 · 346 阅读 · 0 评论 -
go 中唯一的循环体关键字 —— for
1、Go中只有for一个循环语句关键字,没有while等;2、三种结构:(1)类似于while循环,内部判断func main() { a := 1 for { a++ if a > 5 { break } fmt.Println(a) }}// 运行结果:2345(2)类似于while循环,外部判断func main() {...原创 2019-06-15 02:05:10 · 339 阅读 · 0 评论 -
go语言中的if语句
1、条件表达式没有括号;2、支持一个初始化表达式(可以是并行方式),初始化的变量的作用域为if else语句;func main() { a := 1 if a := 5; a > 8 { fmt.Printf("Yes, %d > 8!", a) }else { fmt.Printf("No, %d <= 8!", a) } fmt....原创 2019-06-15 01:40:17 · 1696 阅读 · 0 评论 -
go中的竞争状态
1、若两个或多个goroutine在没有相互同步的情况下,访问某个共享的资源,并试图同时读和写这个资源,就处于相互竞争状态(race condition)。2、读和写操作的原子化是指,同一时刻只能有一个goroutine对共享资源进行读和写操作。...转载 2019-07-28 14:23:14 · 145 阅读 · 0 评论