go语言
凌云天空
这个作者很懒,什么都没留下…
展开
-
golang学习笔记(十七)
Go语言提供了一种机制在运行时更新和检查变量的值或者调用它们的方法,但是编译时并不知道这些变量的具体类型,这就是反射机制。 什么场景需要反射? 比如要写一个函数,但是不知道传入的参数类型是什么,可能是没有约定好,也可能传入的类型很多,这些类型并不能统一表示。或者需要根据某些条件决定调用哪个函数。 反射的缺点是什么?Go语言是一门静态语言,编译过程中会提前发现一些错误,但是对反射无能为力,因为反射是在运行时检查,所以可能...原创 2021-09-21 21:09:14 · 209 阅读 · 0 评论 -
golang学习笔记(十六)
go语言中的select有些类似于switch也包括case和defult,而select是用来监听和channel有关的IO操作的,当有case中触发发送或接收操作则会被立即执行。如果没有channel的发送操作也没有defult语句,则会被阻塞。所以每一个case必须有一个通讯,如果多个case都可以执行,select会随机的选出一个执行。在没有channel有IO操作时,如果有defult语句,则会执行该语句,如果没有select将会阻塞,知道某个case下的cha...原创 2021-09-09 22:04:17 · 140 阅读 · 0 评论 -
golang学习笔记(十五)
channel可以被看成协程之间通信的管道,跟glibc中进程与进程间通信的管道类似。在golang中要传递某个数据从一个协程到另一个协程,可以将数据封装成一个数据对象,将数据对象的指针传入channel中,另外一个协程从管道中读出这个指针,并处理其指向的对象。Go从语言层面保证同一时间只有一个协程能够访问channel里面的数据。//声明var chanName chan chanType//创建通道,如果只是声明通道为nil,需要创建chanName = make(chan ...原创 2021-09-08 22:23:59 · 225 阅读 · 0 评论 -
golang学习笔记(十四)
go语言中引入包时会隐式的调用包中的init函数,并且在main函数执行前执行。init函数一般用来对变量的初始化,或者某些一次性操作,init函数没有返回值和参数,一个源文件中可以允许包含多个init函数。go语言不允许引入不使用的包,有时候我们需要引入一个包,但是不直接使用包里面的函数,而是调用包中的init函数,可以在引入包的前面加空白标识符_import(_ “fmt”)目录结构test1.gopackage testimport...原创 2021-08-31 21:29:33 · 114 阅读 · 0 评论 -
golang学习笔记(十三)
go语言实现了协程,使得异步调用程序变得容易,而不用像线程一样考虑资源的申请释放。但是对于共享资源的访问,也需要通过加锁来保证数据的安全。虽然go语言不希望这么做,而是希望通过channel来实现将共享状态和共享状态的变化在各个协程间传递,这样同样能保证同一时间只有一个协程访问共享状态。go提供了sync包,其中提供了等待组对象(sync.WaitGroup)、互斥锁(sync.Mutex)、读写锁(sync.RWMutex)等。 下面是关于互斥锁和等待...原创 2021-08-29 22:53:44 · 191 阅读 · 0 评论 -
golang学习笔记(十二)
go语言中给我们提供了一些包,通过调用包中的函数,可以方便我们编程。下面是time包中与时间相关的函数的基础用法,通过一个例子说明:package mainimport ( "fmt" "math/rand" //随机数 "time" //时间相关函数)func main() { //获取当前时间 返回一个Time的结构体变量记录当前时间 fmt.Println("////获取当前时间/////") t1 := time.Now() fmt.Print...原创 2021-08-29 17:07:38 · 107 阅读 · 0 评论 -
golang学习笔记(十一)
Go语言中Goroutine与线程的区别1、什么是Goroutine?Goroutine是建立在线程之上的轻量级的抽象。它允许我们以非常低的代价在同一个地址空间中并行地执行多个函数或者方法。相比于线程,它的创建和销毁的代价要小很多,并且它的调度是独立于线程的。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 packag原创 2021-07-19 23:41:39 · 124 阅读 · 0 评论 -
golang学习笔记(十)
go语言提供了一种数据类型叫做接口(interface)。就是定义了一组方法或者或者说函数。可以看做对象的一组行为。既然对象难免有数据,我们可以通过struct定义对象类型,然后根据struct实现这一组方法。这样就实现了多态,不同对象调用相同接口方法,实现不同功能。这样的好处是将定义与实现分离,降低了耦合性。这个跟C语言中我们定义一个结构体,里面定义一组函数指针,通过实现定义的函数指针赋值给结构体对象,形成一个模块,有异曲同工之妙。struct...原创 2021-07-16 23:56:32 · 150 阅读 · 0 评论 -
golang学习笔记(五)
go语言接收用户传递的参数,需要引入os包,用很简单,而不用像C/C++中那样,在main函数中传递参数int main(int argc, char **argv){//argc参数个数,argv保存参数 return 0;}go语言接收用户参数如下:package mainimport ( "fmt" "os")func main() { //接收用户传递的参数,都是以字符串方式传递的 argv := os.Args n := len(argv) //原创 2021-07-01 22:58:57 · 237 阅读 · 0 评论 -
golang学习笔记(九)
go语言内嵌了map数据结构,这是非常有用的数据结构。go中的map是一种无序的key-value方式的数据集合。go中的map是通过hash表实现的,而C++中的std::map是通过红黑树实现的。 map的声明:var map_name map[key_type]value_type注意这时候还不能使用map,此时map_name变量等于nil,我们还需要make函数初始化map_name,这样才能使用:map_name = make...原创 2021-07-15 23:02:39 · 154 阅读 · 0 评论 -
golang学习笔记(八)
slice英文切片的意思,给黄瓜切片,给面包切片。这里的slice是给数组切片,截取数组的一部分。go语言的slice不但是一个动词,而且是一个名词,既一种数据结构类似于数组的数据结构,甚至底层就是用数组实现的。数组所有的优点slice都有,而且slice更加灵活,slice支持可以通过append向slice中追加元素,长度不够时会动态扩展,通过再次slice切片,可以得到得到更小的slice结构,可以迭代、遍历。数组是一组数据类型相同,连续且长度固...原创 2021-07-13 00:46:54 · 143 阅读 · 0 评论 -
golang学习笔记(七)
go语言中的指针跟C/C++没有什么区别,存放变量的内存地址。go指针的的空指针是nil,定义一个指针变量,它的默认值是 nil。 指针声明: var var_name *var_type 例: var Val1 *int 跟C/C++用法一样,通过操作符 "&" 取变量地址, "*" 通过指针访问目标对象。package mainimport ( "fmt")fu...原创 2021-07-10 23:04:33 · 243 阅读 · 2 评论 -
golang学习笔记(六)
go语言中的结构体与C/C++中类型很像,结构体是相同类型和不同类型数据构成的数据集合。 定义结构体: type st_name struct{ var_name1 var_type1 var_name2 var_type2 ... var_namen var_typen } ...原创 2021-07-10 22:33:18 · 129 阅读 · 0 评论 -
golang学习笔记(四)
go中的函数用关键字func开头,形式是func 函数名(参数列表) 返回值类型 { //todo}go语言中的函数支持多个返回值,这个是C/C++中没有的,在写C/C++程序的时候,经常遇到要返回多个数值的时候,因为不支持,只能通过引用参数带出函数中的计算数值,感觉不是特别方便。示例代码如下:package mainimport ( "fmt" "strconv")//...原创 2021-07-01 22:53:02 · 205 阅读 · 0 评论 -
golang学习笔记(三)
go语言的关键字type跟C/C++中的typedef比较像,相当于给类型取一个别名。在C/C++经常这么写:typedef unsigned int Uint32;typedef void (*OutputFunc)(const char* msg, int len);struct Person{ int no; char name[12];} P;而go语言type可以这么用:package mainimport "fmt"type long = int64原创 2021-06-27 23:16:44 · 497 阅读 · 2 评论 -
golang学习笔记(二)
go语言是静态强类型语言,与C语言类似,数据类型常用的主要有布尔类型(true、false),数字类型(整形int ,浮点类型float32,float64),字符类型(byte)以及字符串类型(string)。变量名由字母,下划线,数字构成,不能与数字开头,这点和C语言一样。变量声明以关键字var开头,var 变量名 数据类型 也可以一次声明多个 var 变量名1,变量名2 数据类型package mainimport "fmt"func main() { //go语言如果没有初原创 2021-06-23 23:42:44 · 189 阅读 · 2 评论 -
golang学习笔记(一)
golang是一门静态强类型、编译型语言,是谷歌公司发布2009年发布的。算是一门比较年轻的语言,不同于C++没有很多包袱,轻装上阵,所以go语言要简单很多,同时对并发的支持很好。设计上没有依赖,不像C/C++依赖很多动态库(通过命令ldd,可以查看依赖库情况),实现一次编译,到处拷贝,部署简单。作为一个一直做后端开发的码农,C++一直是我的主要用的开发语言,如今打算学习一下go,最后用go将C++项目重构一下。go语言安装很简单,一直next就可以,唯一注意目录不要有中文,需要配置一下环境变量原创 2021-06-22 22:45:24 · 149 阅读 · 3 评论