GO
哒嘎哇
这个作者很懒,什么都没留下…
展开
-
数据结构:堆
一、首先堆是一棵完全二叉树,关于完全二叉树和满二叉树:如果一个二叉树的任何节点,要么是叶子节点,要么左右子树均非空,则这棵二叉树称做满二叉树(full binary tree)如果一个二叉树最多只有最下面的两层节点度数可以小于2,并且最下面一层的节点都集中在该层最左边的连续位置上,则此二叉树称做完全二叉树(complete binary tree)堆分为大顶堆和小顶堆:大顶堆就是堆顶(第一个元素)始终存放的是这组元素中的最大元素,小顶堆就是堆顶元素是最小元素。二、堆是一颗原创 2022-04-19 15:58:04 · 170 阅读 · 0 评论 -
go:获取指定格式的时间
str := t.Format("2006-01-02 15:04:05")str := t.Format("2006-01-02")str := t.Format("15:04:05")str := t.Format("2006")注意里面的时间不能改原创 2022-03-19 18:15:26 · 264 阅读 · 0 评论 -
Go:Channel
Go 语言 Channel 实现原理精要 | Go 语言设计与实现 (draveness.me)1、数据结构channel 用 runtime.hchan 结构体表示type hchan struct { qcount uint dataqsiz uint buf unsafe.Pointer elemsize uint16 closed uint32 elemtype *_type sendx uint recvx uint recvq .原创 2022-03-18 18:25:36 · 218 阅读 · 0 评论 -
Go简单处理Json
{ "servers": [ { "serverName": "Shanghai_VPN", "serverIP": "127.0.0.1" }, { "serverName": "Beijing_VPN", "serverIP": "127.0.0.2" } ]}解析func Unmarshal(data []b.原创 2022-03-12 22:17:49 · 312 阅读 · 0 评论 -
Go简单操作cookie&session
learnku.com设置cookiehttp.SetCookie(w ResponseWriter, cookie *Cookie)w 表示需要写入的 response,cookie 是一个 structcookie structtype Cookie struct { Name string Value string Path string Domain string Expires ..原创 2022-03-12 21:31:57 · 917 阅读 · 0 评论 -
GO简单nosql
redisgopackage mainimport ( "fmt" "os" "os/signal" "syscall" "time" "github.com/gomodule/redigo/redis")var ( Pool *redis.Pool)func init() { redisHost := ":6379" Pool = newPool(redisHost) close()}func原创 2022-03-12 21:12:17 · 153 阅读 · 0 评论 -
Gin框架浅学习
Restful规范url统一复数 请求方法对应相关操作,get==select,pu==update,post==create,delete==delete 。。。目录价架构遵循MVCControllerModel原创 2022-03-12 17:01:17 · 463 阅读 · 0 评论 -
Go RPC学习
RPC(remote procedure call)远程过程调用gRPC谷歌的rpc框架,它的idl是 Protocol Buffersidl(interface definition language 接口描述语言)四种服务类型Unary client-side streaming server-side streaming bidirectional-streamingProtoBufProtocol Buffers | Google..原创 2022-03-09 23:09:11 · 297 阅读 · 0 评论 -
Win安装protocol buffer
下载地址:Release Protocol Buffers v3.20.0-rc1 · protocolbuffers/protobuf (github.com)页面滚到最下面,选择win32或者64版本将解压后的bin目录添加到系统的Path环境变量里之后在cmd里输入protoco就有反应了protobuf默认不支持go,所以还要下载go的相关包go get github.com/golang/protobuf/protogo get google.golan原创 2022-03-08 16:48:22 · 362 阅读 · 0 评论 -
Leetcode--矩阵中的路径
给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。例如,在下面的 3×4 的矩阵中包含单词 "ABCCED"(单词中的字母已标出)。示例 1:输入:board = [["A","B","C","E"],["S","F","C","S"],["A原创 2022-03-08 13:17:53 · 106 阅读 · 0 评论 -
Go:测试的简单应用
规范Go语言中所以测试文件都以_test.go结尾 Go语言中所有的测试函数都要以Test开头,传递给测试函数的参数是*testing.T,它用于管理测试状态并支持格式化测试日志。测试日志会在测试时不断累积,最后以标准输出抛出错误相当于log之后failnowfunc (c *B) Fatalf(format string, args ...interface{})相当于log加上failfunc (c *T) Error(args ...interface{})Fail标记T原创 2022-03-07 21:10:12 · 326 阅读 · 0 评论 -
Go:context包的简单使用
一、创建context的两种方式funcBackgroundfunc Background() ContextBackground returns a non-nil, empty Context. It is never canceled, has no values, and has no deadline. It is typically used by the main function, initialization, and tests, and as the top-le.原创 2022-03-06 21:40:12 · 581 阅读 · 0 评论 -
Go:简单的并发模型--runner和资源池pool
一、Runnermain.gofunc makeFunc() func(int) { return func(i int) { time.Sleep(1 * time.Second) fmt.Println("task completed: ", i) }}func main() { r := test.NewRunner(4 * time.Second) r.AddTasts(makeFunc(), makeFunc(), makeFunc()) err := r.Sta原创 2022-03-06 10:28:29 · 227 阅读 · 0 评论 -
Go:竞争条件Race Condition
一个系统或进程的输出依赖于不受控制的事件出现顺序或者出现时机比如几个协程对用一个共享资源的写入和读取发生了重叠例:var wg sync.WaitGroupvar counter = 0func main() { wg.Add(2) go raceCounter() go raceCounter() wg.Wait() fmt.Println(counter)}func raceCounter() { defer wg.Done() for i := 0; i原创 2022-03-05 17:50:32 · 114 阅读 · 0 评论 -
Go:协程、通道,锁的简单应用
var wg sync.WaitGroupfunc main() { wg.Add(2) ch := make(chan int) go study("liyiwei", ch) go study("yiweili", ch) ch <- 0 wg.Wait()}func study(name string, ch chan int) { defer wg.Done() for { wisdom, ok := <-ch if !ok { fmt.P.原创 2022-03-05 17:16:42 · 108 阅读 · 0 评论 -
Go:reflect包的简单应用
简单的获取值或设置值func getV() { f := 3.14 v := reflect.ValueOf(&f) newf := v.Interface().(float64) fmt.Println(newf)}func setV() { f := 3.14 v := reflect.ValueOf(&f) if v.Elem().CanSet() && v.Elem().CanAddr() { v.Elem().SetFloat(4.13原创 2022-03-04 21:35:21 · 144 阅读 · 0 评论 -
Go:简单的bilibiliApi请求
test.gopackage testimport ( "encoding/json" "errors" "fmt" "io" "io/ioutil" "log" "net/http" "os")type InfoRequest struct { Bvids []string}type ViewInfo struct { Code int `json:"code"` Message string `json:"message"` Data st原创 2022-03-04 20:20:24 · 306 阅读 · 0 评论 -
Go 使用自定义包
问题在main.go里调用test包错误(目录结构)解决采用Go的module方法将当前项目初始化为一个模块再进行调用在项目目录下面执行go mod init xxx//xxx是你想要的这个项目的模块的名字然后会在当前目录生成go.mod文件,之后再用xxx这个模块的名字加包进行调用比如我给我的项目module取名studygolang我想调用上图的test包,即可这么写:...原创 2022-03-04 11:09:56 · 328 阅读 · 0 评论 -
GO语言 windows下设置环境变量
环境变量配置按win键,输入 ”编辑系统环境变量“点击”环境变量“然后在系统变量栏下进行环境变量的设置开始GOROOT配置为go语言源码所在目录,一般都是安装Go的时候自动生成了,不需要再改PATH找到path(如果不存在,则新建),输入:%GOROOT%\bin,因为bin文件下有go的可执行文件:go.exe保存成功后,按win+R,输入cmd,回车打开命令行,输入:go version如果能够成功打印出Go语言的相关环境变量,即表...原创 2022-03-03 21:54:46 · 10152 阅读 · 0 评论 -
Go语言 Os.OpenFile函数
参考源码地址https://github.com/golang/go/blob/master/src/os/file_unix.go?name=release#76文档解释https://studygolang.com/pkgdocfuncOpenFilefunc OpenFile(name string, flag int, perm FileMode) (file *File, err error)OpenFile是一个更一般性的文件打开函数,大多数调用者都应用Open...原创 2022-03-03 21:08:51 · 6153 阅读 · 2 评论 -
LeetCode--包含min函数的栈
定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)辅助栈法type MinStack struct { element []int mins []int}/** initialize your data structure here. */func Constructor() MinStack { return MinStack{make([]int, 0), make([]int,原创 2022-02-09 17:43:06 · 155 阅读 · 0 评论 -
Leetcode--存在重复元素
1、排序在对数字从小到大排序之后,数组的重复元素一定出现在相邻位置中func containsDuplicate(nums []int) bool { sort.Ints(nums) for i := 1; i < len(nums); i++ { if nums[i] == nums[i-1] { return true } } return false}复杂度分析时间复杂度:O(NlogN)原创 2022-02-08 21:17:35 · 117 阅读 · 0 评论 -
Go语言调度器(G-P-M模型)
目录GPM模型(Go调度器模型)goroutineMachineProcessor三者关系参考及引用GPM模型(Go调度器模型)操作系统的最小执行单位是线程(它属于进程),go的协程goroutine是依附挂载于线程之上作为Go并发的单位,这种协程与线程的调度分配由go的并发调度器承担,这个调度器的设计就是GPM模型Goroutinegoroutine是用go关键字创建的执行体,每个goroutine对应一个G结构体,里面存有goroutine的堆栈信息原创 2022-02-08 01:35:56 · 624 阅读 · 0 评论 -
Go接口--warning
检查变量 v是否满足接口 Stringerif v, ok := v.(Stringer); ok { fmt.Printf("implements String(): %s\n", v.String())}原创 2022-01-21 21:43:08 · 339 阅读 · 0 评论 -
Go:调试 && 错误处理
关键字 defer 推迟到函数返回之前(或任意位置执行return语句之后)一刻才执行某个语句或函数当有多个defer时会像栈一样,先进后出用defer追踪函数执行package mainimport "fmt"func trace(s string) string { fmt.Println("entering:", s) return s}func un(s string) { fmt.Println("leaving:", s)}...原创 2021-12-20 22:05:47 · 344 阅读 · 0 评论 -
Go简易CRUD mysql
Open测试连接package mainimport ( "database/sql")const dbuser string = "root"const dbpwd string = "*******"const dbip string = "@tcp(127.0.0.1:3306)"const dbname string = "go"var dbconn * sql.DBfunc main(){ dsn := dbuser + ":" + dbpwd + dbi原创 2021-12-18 18:31:43 · 727 阅读 · 0 评论 -
Gin中间件
适合处理登录认证、权限校验、数据分页、记录日志、耗时统计等。定义中间件Gin中的中间件必须是一个gin.HandlerFunc类型。例如我们像下面的代码一样定义一个统计请求耗时的中间件。// StatCost 是一个统计耗时请求耗时的中间件func StatCost() gin.HandlerFunc { return func(c *gin.Context) { start := time.Now() // 可以通过c.Set在请求上下文中设置值,后续的处理..原创 2021-12-17 19:41:06 · 755 阅读 · 0 评论 -
Gin路由
重定向HTTP重定向HTTP 重定向很容易。 内部、外部重定向均支持。r.GET("/test", func(c *gin.Context) { c.Redirect(http.StatusMovedPermanently, "http://www.sogo.com/")})路由重定向路由重定向,使用HandleContext:r.GET("/test", func(c *gin.Context) { // 指定重定向的URL c.Request.URL.P原创 2021-12-17 19:26:49 · 363 阅读 · 0 评论 -
Gin获取参数
获取querystringquerystring是URL里 ?后面带的参数内容。例:https://b.com?user=me&pwd=123得到 user=me 和 pwd=123func main() { //Default返回一个默认的路由引擎 r := gin.Default() r.GET("/test", func(c *gin.Context) { //设置默认值 user := c.DefaultQuery("username", "转载 2021-12-17 18:53:10 · 1856 阅读 · 0 评论 -
GO:找不到已安装的 module
报错cannot find module providing package github.com/gin-gonic/gin: working directory is not part of a module原因 在安装包的时候开启了 GO111MODULE,使用了代理,导致下载的包不在官方指定的位置解决办法用go mod引入这些包go mod init gingo mod edit -require github.com/gin-goni...原创 2021-12-16 20:48:31 · 731 阅读 · 0 评论