随笔分类 -  Golang 学习

摘要:Go 语言中的变量分为两部分:类型信息、值信息 反射: 反射是指在程序运行期对对程序本身进行访问和修改的能力。程序在编译时,变量被转换成内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。 支持反射的语言可以在程序编译时期将变量的反射信息,如字段名、字段类型、结构体信 阅读全文
posted @ 2020-05-03 22:29 醉深梦始 阅读(238) 评论(0) 推荐(0)
摘要:模板与渲染 在一些前后端不分离的Web架构中,我们通常需要在后端将一些数据渲染到HTML文档中,从而实现动态的网页(网页的布局和样式大致一样,但展示的内容并不一样)效果。 Go语言内置了文本模板引擎text/template和用于HTML文档的html/template。它们的作用机制可以简单归纳如 阅读全文
posted @ 2020-04-09 17:33 醉深梦始 阅读(528) 评论(0) 推荐(0)
摘要:总所周知,http是无状态协议,即http的每次请求都是独立的,它不会受之前的请求影响,在这种情况下,对于服务器而言每次请求都全新的,所以服务器处理之前请求参数的数据都不会保留,会话中产生的数据又是我们需要保存的,也就是说要“保持状态”。因此Cookie就是在这样一个场景下诞生。 http中的coo 阅读全文
posted @ 2020-04-09 17:17 醉深梦始 阅读(1985) 评论(0) 推荐(0)
摘要:go 可以用几行代码就可以实现一个http的简单服务 http.HandleFunc("/",Do) http.HandleFunc("/index",index) http.ListenAndServe(":9999",nil) http.HandleFunc 注册路由,默认使用了DefaultS 阅读全文
posted @ 2020-04-09 14:09 醉深梦始 阅读(169) 评论(0) 推荐(0)
摘要:go mutex是互斥锁,只有Lock和Unlock两个方法。而且lock和unlock之间的代码都只能由一个 Go 协程执行,于是就可以避免竞态条件。 package main import ( "fmt" "sync" ) var wg = sync.WaitGroup{} var sum in 阅读全文
posted @ 2020-04-08 17:50 醉深梦始 阅读(1186) 评论(0) 推荐(1)
摘要:协程上下文控制 主要函数: Background()和TODO() Go内置两个函数:Background()和TODO(),这两个函数分别返回一个实现了Context接口的background和todo。我们代码中最开始都是以这两个内置的上下文对象作为最顶层的partent context,衍生出 阅读全文
posted @ 2020-04-08 17:29 醉深梦始 阅读(248) 评论(0) 推荐(0)
摘要:WaitGroup用于等待一组线程的结束。父线程调用Add 方法来设定应等待的线程数量。每个被等待的线程在结束时应调用Done方法。 同时,主线程里可以调用wait方法阻塞至所有线程结束。 主要函数: func (wg *WaitGroup) Add(delta int):等待协程的数量。 func 阅读全文
posted @ 2020-04-08 13:20 醉深梦始 阅读(579) 评论(0) 推荐(0)
摘要:Channel是一个数据结构--队列 数据是先进先出 channel是线程安全的,多线程访问时不需要枷锁 channel是有类型的,声明时需要绑定数据类型 var chan int//双向管道 var chan<- int //只写管道 var <-chan int//只读管道 //上诉管道中的数据 阅读全文
posted @ 2020-04-05 17:23 醉深梦始 阅读(348) 评论(0) 推荐(0)
摘要:Go 协程,可以理解成轻量级的协程 Go主线程,一个主线程可以起多个协程 Go协程的特点: 有独立的栈空间 共享程序堆空间 调度由用户控制 package main import( "fmt" "time" ) func SayHello(){ for i:=0;i< 5;i++{ fmt.Prin 阅读全文
posted @ 2020-04-05 16:51 醉深梦始 阅读(197) 评论(0) 推荐(0)
摘要:Json 是一中轻量级的数据交换格式,易与人阅读和编写。 Json易于解析和生成,有效的提升网络传输效率,通常网络在传输时会先将数据(结构体、map等)序列化成json字符串,到接收方得到json字符串时,在反序列化成对应的数据类型。 go提供了json的序列反序列化的接口 package main 阅读全文
posted @ 2020-04-05 15:53 醉深梦始 阅读(955) 评论(0) 推荐(0)
摘要:interface接口可以定义一组方法,但是不需要实现。interface 不能包含任何变量,可以看成是一组方法的封装。这些方法的实现是在具体的自定义类型中。 接口本身不能创建实例,但是可以指向一个实现了该接口的自定义类型的实例。 接口如果想要指向某个实例,这个实例的类型必须实现了该接口包含的所有方 阅读全文
posted @ 2020-04-05 15:30 醉深梦始 阅读(168) 评论(0) 推荐(0)
摘要:在结构体中,除了定义一些类的属性之外,还可以定义封装一些方法,来描述类的一些行为 如下在Person中实现了一个获取姓名的方法: type Person struct{ Name string Age int Addr string Hobby []string } func (this *Pers 阅读全文
posted @ 2020-04-02 22:38 醉深梦始 阅读(200) 评论(0) 推荐(0)
摘要:Go 支持创建解构题 例如描述一个小猫 type cat struct{//小猫结构体 name string //姓名 age int //年龄 color string //颜色 } Go面向对象编程说明: 1.Go支持面向对象编程,但是和传统的面向对象编程是有区别的,并不是纯粹的面向对象语言, 阅读全文
posted @ 2020-04-02 22:15 醉深梦始 阅读(323) 评论(0) 推荐(0)
摘要:map是key-val数据结构 var map 变量名 map[keytype]valtype 其中key可以是很多种类型,例如bool、数字、string、channel、指针、接口、结构体、数组等等,但是切片、map、func不可以,因为这些不能用来查找 value 通常为数字、string、m 阅读全文
posted @ 2020-04-02 18:31 醉深梦始 阅读(200) 评论(0) 推荐(0)
摘要:1.函数的defer 作用:在函数中,程序员经常要创建资源(比如:数据库连接,文件句柄,锁等),为了在函数执行完成之后及时释放资源,go提供了defer机制,可以在函数执行完成后return前执行 //来一个defer中的经典面试题,求打印顺序 package main import ( "fmt" 阅读全文
posted @ 2020-04-02 18:11 醉深梦始 阅读(141) 评论(0) 推荐(0)
摘要:go的每一个文件都是属于一个包的,也就是说go是以包的形式来管理文件和目录结构的 包的作用: 区分相同名字的函数、变量和标识符 当程序文件很多时,可以很好的管理项目 控制函数变量等的访问范围,即作用域 函数说明: func 函数名(参数列表)(返回值类型列表){ 语句。。。 return 返回值列表 阅读全文
posted @ 2020-04-02 17:43 醉深梦始 阅读(260) 评论(0) 推荐(0)
摘要:从C转golang,golang中的包算是一个特色 首先函数的定义: 包的引出: 我们之前用练习的main.go 中package main,就形成了一个包 实际工作中我们会用到很多包,可以用import引入,例如“fmt”、“net”。。 当然我们也可以定义自己的包:例如在utils中定义了一个u 阅读全文
posted @ 2020-04-02 16:53 醉深梦始 阅读(289) 评论(0) 推荐(0)
摘要:代码流程控制,比如c/c++中的for while if switch语句,golang中也有类似的语句 主要控制代码的走向 在golang中也有类似语句: //if 语句 var ok bool = false if !ok { //if后直接写判断条件,不用加() fmt.Println("sa 阅读全文
posted @ 2020-04-02 16:22 醉深梦始 阅读(179) 评论(0) 推荐(0)
摘要:切片和数组类似,都可以存储一组数据,但是数组是定长,即声明时就确定了长度,切片支持扩容 切片的声明初始化: 1.声明时就初始化 //声明方法1 slice1 := []int{1,2,3,4} fmt.Println("slice1",slice1) 2.使用make分配一定的空间,根据需要初始化 阅读全文
posted @ 2020-04-02 15:45 醉深梦始 阅读(176) 评论(0) 推荐(0)
摘要:golang种的变量: 先来学习基本数据类型的声明: package main //变量学习:变量的声明 import( "fmt" ) //全局变量 var ( a int //指明类型,不赋值,默认为改类型的零值 b = 1 //也可以不指明类型,但是必须赋值,golang会默认匹配类型 c s 阅读全文
posted @ 2020-04-02 13:13 醉深梦始 阅读(1182) 评论(0) 推荐(0)