Golang
Golang语言基础+调度+channel
十四说四十、
一只努力搬砖的985小硕
展开
-
channel与goroutine的常见管理方法
一. 限制开启goroutine数量package mainimport ( "fmt" "sync" "time")var wg = sync.WaitGroup{}func process(data chan int, i int) { defer wg.Done() fmt.Printf("go func: %d, time: %d\n", i, time.Now().Unix()) data <- i}func main() { limitNum :=原创 2020-07-09 22:59:58 · 305 阅读 · 0 评论 -
Go web 基础 --处理请求与响应
目录一. 请求1.1 请求首部1.2 请求主体1.3 go 与html 表单 content-type1.3.1 From字段1.3.2 PostFrom字段1.3.3 MultipartFrom 字段1.3.4 FormValue1.4 总结二. 响应2.1 服务器返回json一. 请求1.1 请求首部func header(w http.ResponseWriter, r *http.request){ h := r.Header h := r.Header["Accept-Encoding"原创 2020-05-10 23:21:52 · 270 阅读 · 0 评论 -
Go web 基础 -- Restful风格请求
一.Restful风格请求在目前所学内容中每个请求都需要绑定一个HandlerFunc,而在实际项目中会有很多URL,且可能出现满足特定规律的URL,例如: /sxt/it和/sxt/baizhan都是以/sxt/开头.且如果这两个URL里面代码也差不多时,写两个Func就属于代码冗余了.可以使用restful风格把满足特定格式url和功能类似的代码提入到一个func中实现代码复用.二....原创 2020-05-07 17:40:04 · 438 阅读 · 0 评论 -
Go web基础 -- Cookie常用设置
一.Cookie 简介Cookie就是客户端存储技术.以键值对的形式存在在B/S架构中,服务器端产生Cookie响应给客户端,浏览器接收后把Cookie存在在特定的文件夹中,以后每次请求浏览器会把Cookie内容放入到请求中二.Go语言对Cookie的支持在net/http包下提供了Cookie结构体Name设置Cookie的名称Value 表示Cookie的值Path 有...原创 2020-05-07 14:38:52 · 250 阅读 · 0 评论 -
Go web 基础 -- 正则验证
一. 正则表达式正则表达式:(Regular Expression)正则表达式就正则字符和普通字符组成字符串的规则正则内容如下单字符: . 任意字符(标志s==true时还包括换行符) [xyz] 字符族 [^xyz] 反向字符族 \d P...原创 2020-05-07 13:30:16 · 329 阅读 · 0 评论 -
Go web基础 -- ajax与json
一.JSON简介轻量级数据传输格式总体上分为两种:一种是JSONObject(json对象){"key":value,"key":value}一种是JSONArrayP(json数组),包含多个JSONObject[{"key":"value"},{"key":"value"}]key是string类型,value可以是string类型(值被双引号包含),也可...原创 2020-05-07 12:03:02 · 397 阅读 · 0 评论 -
Go web 基础 -- 文件上传下载
目录一.文件上传一.文件下载简介二.代码一.文件上传文件上传:客户端把上传文件转换为二进制流后发送给服务器,服务器对二进制流进行解析HTML表单(form)enctype(Encode Type)属性控制表单在提交数据到服务器时数据的编码类型.enctype=”application/x-www-form-urlencoded” 默认值,表单数据会被编码为名称/值形式enctype=...原创 2020-05-07 10:38:51 · 1136 阅读 · 0 评论 -
Go web 基础 -- 模版嵌套
一.模版嵌套在实际项目中经常出现页面复用的情况,例如:整个网站的头部信息和底部信息复用可以使用动作{{template “模版名称”}}引用模版引用的模版必须在HTML中定义这个模版{{define "名称"}}html{{end}}执行主模版时也要给主模版一个名称,执行时调用的是ExecuteTemplate()方法{{define "layout"}}<!DO...原创 2020-05-07 10:11:03 · 333 阅读 · 0 评论 -
Go web 基础 -- 表单Action
一. ActionGo语言官方文档给出action(动作)的列表。"Arguments"和"pipelines"代表数据的执行结果{{/* a comment */}} 注释,执行时会忽略。可以多行。注释不能嵌套,并且必须紧贴分界符始止,就像这里表示的一样。{{pipeline}} pipeline的值的默认文本表示会被拷贝到输出里。{{if pipeline}} T1...原创 2020-05-07 10:03:57 · 250 阅读 · 0 评论 -
Go web 基础 -- 在模版中调用函数
一.调用方法在模版中调用函数时,如果是无参函数直接调用函数名即可,没有函数的括号例如在go源码中时间变量.Year()在模版中{{时间.Year}}在模版中调用有参函数时参数和函数名称之间有空格,参数和参数之间也是空格给定go文件代码package mainimport ( "net/http" "html/template" "time")func welcome...原创 2020-05-07 09:53:26 · 341 阅读 · 1 评论 -
Go web 基础 -- html模版
一. 向模版传递数据可以在HTML中使用{{}}获取template.Execute()第二个参数传递的值最常用的{{.}}中的".“是指针,指向当前变量,称为"dot”在{{}}可以有的Argument,官方给定如下- go语法的布尔值、字符串、字符、整数、浮点数、虚数、复数,视为无类型字面常数,字符串不能跨行- 关键字nil,代表一个go的无类型的nil值- 字符'.'(句点,...原创 2020-05-07 01:51:10 · 300 阅读 · 0 评论 -
Go web 基础 -- http请求
第一种方式 – 实现Handle接口package mainimport ( "fmt" "net/http")type myHandle struct {}type myOtherHandle struct {}func (mh *myOtherHandle)ServeHTTP(w http.ResponseWriter, r *http.Request) { f...原创 2020-05-06 23:24:00 · 401 阅读 · 0 评论 -
Go web 基础 -- 对数据库配置以及增删改查
目录一. 配置mysql驱动包二. 前置操作三. 增加数据操作四. 更新数据操作五. 删除操作六. 查询数据操作6.1 查询一部分数据6.2 查询全部数据一. 配置mysql驱动包新建一个项目叫second_project在项目根目录下执行go mod init second_project 这样我们就能用mod管理包了使用go get github.com/go-sql-driver/...原创 2020-05-06 18:07:02 · 393 阅读 · 0 评论 -
Go语言基础案列学习 --点对点通信
目录一. 概述一. 概述点对点 就是客户端a 与客户端b通信需要借助一个中间服务器 也就是a像服务器发送信息 服务器再像b转发a发送的信息本次练习需要先注册用户名本次操作没有持久化操作服务器端代码:package mainimport ( "fmt" "net" "strings")type User struct { Username string Othe...原创 2020-05-06 10:54:05 · 526 阅读 · 0 评论 -
Go web基础 -- socket编程
目录一. 服务器端设置二. 客户端设置一. 服务器端设置package mainimport ( "fmt" "net")func main() { //1. 创建服务器地址 addr, _ := net.ResolveTCPAddr("tcp4", "localhost:8899") //2. 创建监听器 lis, _ := net.ListenTCP("tcp4...原创 2020-05-05 21:15:33 · 190 阅读 · 0 评论 -
Go语言基础案列学习 --RPC调用
package mainimport ( "errors" "fmt" "time")func RPCClient(ch chan string, req string) (string, error) { ch <- req select { case ack := <-ch: return ack, nil case <-time.After(ti...原创 2020-05-04 14:10:51 · 101 阅读 · 0 评论 -
Go语言基础案列学习 -- 生产者消费者
目录用一个chan管道进行线程通信package mainimport ( "fmt" "time")func main() { c := make(chan int) go consumer(c) for i := 1; i<= 10; i++ { c <- i } c <- 0 <- c}func consumer(c chan ...原创 2020-05-04 13:30:34 · 89 阅读 · 0 评论 -
Go语言学习 -- 各种数据类型创建方式总结
文章目录一. 结构体一. 结构体type Persion struct{ Name string Age int}var p1 Persionp1.Name = “zz”p1.Age = 123p2 := Persion{“zz”, 123} 等价于下面的// p2.Name = “zz”// p2.Age = 123var p3 *Persion = ...原创 2020-04-30 17:50:08 · 298 阅读 · 0 评论 -
Go语言基础案列学习 -- 实现有限状态机(FSM)
文章目录state.goinfo.gostatemgr.gomain.gostate.gopackage mainimport ( "reflect")// 状态接口type State interface { // 获取状态名字 Name() string // 该状态是否允许同状态转移 EnableSameTransit() bool // 响应状态开始时 ...原创 2020-04-29 01:20:18 · 424 阅读 · 0 评论 -
Go语言基础案列学习 -- 实现简单的字典序列结构
package mainimport ( "encoding/json" "fmt")// 自己实现一个map结构type Dictionary struct { data map[interface{}]interface{}}//map的get方法func (d *Dictionary) Get(key interface{}) interface{}{ return...原创 2020-04-28 12:15:08 · 157 阅读 · 0 评论 -
Go语言学习 -- 基础 (方法和接口)
目录1. 方法2. 方法即函数3. 方法(续)4.5.6.1. 方法Go 没有类。不过你可以为结构体类型定义方法。方法就是一类带特殊的 接收者 参数的函数。方法接收者在它自己的参数列表内,位于 func 关键字和方法名之间。在此例中,Abs 方法拥有一个名为 v,类型为 Vertex 的接收者。package mainimport ( "fmt" "math")type ...原创 2020-04-25 15:36:27 · 348 阅读 · 0 评论 -
Go语言学习 -- 基础(struct、slice 和映射)
目录1. 指针2. 结构体3. 结构体字段4. 结构体指针5. 结构体文法6. 数组7. 切片8. 切片就像数组的引用9. 切片文法10. 切片的默认行为11. 切片的长度与容量12. nil 切片13. 用 make 创建切片14. 切片的切片15. 向切片追加元素16. Range17. range(续)18. 映射19. 映射的文法20. 映射的文法(续)21. 修改映射22. 函数值23...原创 2020-04-24 14:46:17 · 257 阅读 · 0 评论 -
Go语言学习 -- 基础(流程控制语句)
目录流程控制语句流程控制语句for循环forGo 只有一种循环结构:for 循环。基本的 for 循环由三部分组成,它们用分号隔开:初始化语句:在第一次迭代前执行条件表达式:在每次迭代前求值后置语句:在每次迭代的结尾执行初始化语句通常为一句短变量声明,该变量声明仅在 for 语句的作用域中可见。一旦条件表达式的布尔值为 false,循环迭代就会终止。package mai...原创 2020-04-23 14:27:11 · 170 阅读 · 0 评论 -
Go语言学习 -- 基础(包 变量和函数)
包的管理命名返回值命名返回值原创 2020-04-23 08:06:40 · 450 阅读 · 0 评论 -
Go语言学习 -- 基础(安装部署)
目录一. 官网安装二. 编译运行三. 结果Go特点Go语言编辑器编译过程一. 官网安装https://golang.google.cn/doc/install 下载好然后安装 他会自动加载环境变量二. 编译运行新建一个**.go文件 然后在里面写上package mainimport "fmt"func main() { fmt.Printf("hello, world\...原创 2020-04-22 23:53:46 · 207 阅读 · 0 评论