搜索内容

包含标签:Go 的文章
  • Go 质数
    其他

    Go 质数

    实现 package main import ( "fmt" ) func main() { fmt.Println("1-10万之间的质数为:") // i应直接从2开始 for i := 2; i <= 1e6; i++ { for n := 2; n <= i; n++ { // 当走到最后n等于i 了,则说明下面的i%n==0 && n < i 始终没有成立。说是这个数是个质数。 if n == i { fmt.Printf("%d ", i) } // 当满足这个条件的时候就终止里面的循环,不用继续往下走了,因为它已经不是一个质数了。 if i%n == 0 && n < i { break } } } } 运行 https://go.dev/play
    admin 今天
  • golang beego使用踩坑记录
    其他

    golang beego使用踩坑记录

    conf文件中,数组型数据不能放在前面,会导致其他的如string型数据解析为空 这种数组型数据要放到文件的最后。 一不小心引入了bug,花了一天时间才往配置文件方向考虑,终于定位到问题了 
    admin 今天
  • 【Go】Go语言中的下划线
    其他

    【Go】Go语言中的下划线

    文章目录 一、下划线是什么:一种特殊的标识符二、下划线怎么用1. 下划线在 import 中包导入的常规语法包导入的一些 “花操作” 的语法(1)点操作(2)别名操作(3)本文关注的重点:_ 操作 2. 下划线在代码中 参考链接 一、下划线是什么:一种特殊的标识符 Go语言中,“_” 是一种特殊的标识符,用来忽略结果。 二、下划线怎么用 1. 下划线在 import 中 在Go 语言里,import 的作用是导入其他 package。 包导入的常规语法 import( "fmt" ) //然后在代码里面可以通过如下的方式调用 fmt.Println("hello world") 这个 fmt 是Go语言的标准库,他其实是去GOROOT下去加载该模块,当然Go的 import 还支持如下两种方式来加载自己写的模块: //相对路径 import
    admin 今天
  • 简单介绍vue获取token实现token登录的示例代码
    其他

    简单介绍vue获取token实现token登录的示例代码

    最近新做了个vue项目,正好项目中有登录部分,本文就详细的介绍一下登录部分的实现,文中通过示例代码介绍的非常详细,感兴趣的小伙伴们可以参考一下 使用token做登录验证的思路大致如下: 1、在第一次登录的时候前端调用后端的接口,把用户名和密码传给后端。 2、后端收到请求,验证用户名和密码,验证成功后,返回给前端一个token值。 3、前端收到后端传给的token值,将token存储在本地 loaclStorage和vuex中。(本次项目用的是vue框架,使用了vuex全局状态管理) 4、前端每次路由跳转,就判断localStorage中是否有token,如果没有就跳转登录页面,如果有就跳转到相应的页面。 5、分装一公用的请求接口方法,每次请求调用后端接口,都在请求头中带上token 6、后端判断请求头中是否有token,如果有token就拿到token并且验证token,验证成功返回数据,验证失败(例如token过期),就返回给前端一个状态码,一般是401,请求头中没有token也返回401 (第6步是后端做,前端只要根据后端返回都
    admin 今天
  • Go安装及Goland配置
    其他

    Go安装及Goland配置

    Windows安装 环境变量 GOPATH:需要加到path中,用来执行go相关指令的(安装目录)【fixme】 GOROOT:存储所有项目的第三方依赖目录(可自定义)【fixme】 代理配置 源一 开源全球代理 https://goproxy.io源二 七牛云(仅国内访问) https://goproxy.cn源三 阿里云 https://mirrors.aliyun.com/goproxy/源四 Goproxy 中国 https://golang.com.cn/proxy Goland配置 需要开启File Watchers插件 自动触发格式化、导入优化、lint校验 Introduction | golangci-lint goimports command - golang.org/x/tools/cmd/goimports - pkg.go.dev // lint 插件(版本按需
    admin 今天
  • https://github.com/deepch/RTSPtoWebRTC这是github上我找到得比较好得开源解决方案,是使用Go语言开发得,大家没有Go语言基础得可以上菜鸟教程Go教程篇学习个几分钟,安装好环境就Ok,我也是当场学得,抱着试一试得心态。

    " alt="网页播放rtsp视频流最终方案">
    其他

    网页播放rtsp视频流最终方案

    背景 之前转载过一位大佬的采用客户端ffmpeg+脚本jsmpeg+服务端node的解决方案,通过在服务器将rtsp转码后,再使用websocket推送到前端,这种办法可以实现h5中播放rtsp视频流,但是使用几天后,发现了不少问题: 1. ffmpeg转码存在比较严重的延迟,大概在1s左右。通过优化命令,使用硬件加速比较复杂,对于我这种音频处理经验为0的小白来说,学习成本过大,所以硬件加速这一个思路就被我抛弃了。 2. ffmpeg转码有时候特卡顿,对于搞安防的我们来说是灭顶之灾。 3. jsmpeg官方说明全英文,英语小白的我搞了半天没懂怎么播放多路视频流。摸索的过程中浏览器控制台老是报各种各样异常,度娘中居然找不到解决方案。         总的来说,就是我比较菜,不能一键解决的方案都会被我抛弃。 方案 那么我们必然得换一种方案了,度年上基本是广告,要么就是换低版本浏览器加插件,要么中间件要我们交智商税! 没办法,只能上github碰碰运气,没想到挖到了宝藏,我可真是个小机灵鬼。 废话说的差不多了,上链接
    admin 今天
  • go kit (6) -完善中间件 jwt
    其他

    go kit (6) -完善中间件 jwt

    上一篇文章,已经大体讲解了如何使用中间件,我们是以jwt为例,但是没有完善其中的jwt的校验逻辑,所以,我们的这一篇文章就来完善这一部分 我们先看昨天完成的代码 func JwtMiddleware() endpoint.Middleware { return func(e endpoint.Endpoint) endpoint.Endpoint { return func(ctx context.Context, request interface{}) (response interface{}, err error) { return nil, nil } } } 我们对于token的操作其实是在这 return func(ctx context.Context, request interface{}) (response interface{}, err error) {
    admin 今天
  • 【Go】Go 语言运算符
    其他

    【Go】Go 语言运算符

    文章目录 一、Go 语言有哪些运算符?二、各类运算符详解1. 算数运算符2. 关系运算符3. 逻辑运算符4. 位运算符5. 赋值运算符 参考链接 一、Go 语言有哪些运算符? Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 二、各类运算符详解 1. 算数运算符 运算符描述+相加-相减*相乘/相除%求余 注意: ++(自增)和 --(自减)在 Go 语言中是单独的语句,并不是运算符。 2. 关系运算符 运算符描述==检查两个值是否相等,如果相等返回 True 否则返回 False。!=检查两个值是否不相等,如果不相等返回 True 否则返回 False。>检查左边值是否大于右边值,如果是返回 True 否则返回 False。>=检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。<检查左边值是否小于右边值,
    admin 今天
  • Go同步单信道实现并发锁
    其他

    Go同步单信道实现并发锁

    思路 使用Chan加锁 同步信道bool类型 容量为1 开启多个协程 func myLock() { chanLock := make(chan bool, 1) var x int for i := 0; i < 5000; i++ { go chanWithLock(chanLock, &x) } time.Sleep(time.Second) fmt.Println(x) } /* *传入对应的信道和对应类型的指针地址 */ func chanWithLock(mychan chan bool, x *int) { // 同步阻塞通道 数据写入 mychan <- true *x = *x + 1 // 通道通畅数据读取 <-mychan }
    admin 今天
  • 【Go】Go 命令
    其他

    【Go】Go 命令

    文章目录 go 命令有哪些?参考链接 go 命令有哪些? 如果你已安装了 golang 环境,你可以在 cmd 命令行执行 go 命令查看相关的 Go语言命令: C:\Users\huipu>go Go is a tool for managing Go source code. Usage: go [arguments] The commands are: bug start a bug report build compile packages and dependencies clean remove object files and cached files doc show documentation for packa
    admin 今天
  • GO程使我Land系列之环境搭建
    其他

    GO程使我Land系列之环境搭建

    GO程使我Land系列 1. go环境搭建 1.1 go sdk下载 Go语言中文网1.16.10下载 go语言中文网 1.2 windows安装 我这里修改我个人的路径上面是默认的 1.3 配置环境变量 GO111MODULE: on,开启gomod管理依赖包(我现在使用版本的默认开启了这个,可配置可不配置) GOPROXY: https://goproxy.cn ,设置代理,加速依赖包的下载,有七牛云阿里等代理 GOPATH: D:\Software\env\gopath\go (自己定义),工作目录 path:加入 D:\Software\env\gosdk\bin 和 D:\Software\env\gopath\go\bin path路径配置bin (如果用户变量环境下有配置gopath可以删除或者更改为一样的路径) 1.4 查看go环境 输入
    admin 今天
  • 深入学习Go-4 切片
    其他

    深入学习Go-4 切片

    切片,长度是不固定的,当容量不足时,进行动态扩容,所以又叫动态数组。 数据结构 type slice struct { array unsafe.Pointer len int cap int } array:指向底层数组的指针 len:切片长度 cap:切片容量,即底层数组的长度 初始化 可以使用make和new初始化切片,区别是make返回切片本身,new返回的是切片的地址值。例子如下: func initial() { slice1 := make([]int, 5, 8) slice2 := new([]int) fmt.Println("slice1的类型是:", reflect.TypeOf(slice1)) fmt.Println("slice2的类型是:", reflect.TypeOf(slice2)) slice1 = append(slice1, 1) *slice2 = append(*slice2, 1)
    admin 今天
  • Golang中fmt.Scanf跳过的问题
    其他

    Golang中fmt.Scanf跳过的问题

    Golang中fmt.Scanf跳过的问题 问题发现问题解决 问题 最近,在学习Golang,学习到for循环章节,第二次走到 fmt.Scanf 时,程序直接跳过了输入 发现问题 看了看官方文档 然后取出返回值 可以看到,这个方法直接返回了错误信息 解决 fmt.Scanf("%v %v\n", &a, &b)
    admin 今天
  • 中国省市表sql
    其他

    中国省市表sql

    -- city definition CREATE TABLE `city` ( `id` int NOT NULL DEFAULT '0', `pid` int DEFAULT NULL, `cityname` varchar(255) DEFAULT NULL, `type` int DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; INSERT INTO freshfruit.city (id,pid,cityname,`type`) VALUES (1,0,'中国',0), (2,1,'北京',1), (3,1,'安徽',1), (4,1,'福建',1), (5,1,'甘肃',1), (6,1,'广东',1),
    admin 昨天
  • 【GoLand】GoLand安装配置
    其他

    【GoLand】GoLand安装配置

    文章目录 1.安装GoLand IDE和SDK2.配置环境变量(1)配置GoLand IDE环境变量(2)配置GoROOT环境变量(3)配置Path环境变量(4)配置GOPath环境变量(和java不同的地方)(5)在GOPATH下新建三个文件夹(6)在GoLand ide中配置 3.Go语言开发目录结构(1)在GOPATH下新建src bin pkg(2)在src下新建go_code(2)在go_code下新建一个一个的项目文件夹 1.安装GoLand IDE和SDK 都是官网下载,直接傻瓜安装 2.配置环境变量 (1)配置GoLand IDE环境变量 (2)配置GoROOT环境变量 (3)配置Path环境变量 (4)配置GOPath环境变量(和java不同的地方) (5)在GOPATH下新建三个文件夹 (6)在GoLand
    admin 昨天
  • go: 计算字符串的长度
    其他

    go: 计算字符串的长度

    1 正常的方法len(str) 2 第二种方式 len([]rune(str)) 但是对于中文要注意的一点是:  如果字符串中出现中文字符不能直接调用 len 函数来统计字符串字符长度,这是因为在 Go 中,字符串是以 UTF-8 为格式进行存储的,在字符串上调用 len 函数,取得的是字符串包含的 byte 的个数。 每个中文字,占3个byte  英文字符仍是占一个byte。 所以计算中文的字符采用方法2  才能保证正确
    admin 昨天
  • 知识分享之Golang——Gin学习之初次尝试(一)
    其他

    知识分享之Golang——Gin学习之初次尝试(一)

    知识分享之Golang——Gin学习之初次尝试(一) 背景 知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。 开发环境 系统:windows10语言:Golang组件库:Blevegolang版本:1.17组件官网:https://gin-gonic.com/zh-cn/ 组件仓库:https://github.com/gin-gonic/gin 开源协议:MIT License 内容 本节我们使用Gin框架编写一个经典案例Hello World。废话不多说,下面直接开始。 1、首先打开Golang创建一个demo项目,并在Terminal命令框中输入如下命令,导入我们需要的Gin包: go get -u github.com/gin-gonic/gin go mod vendor 2、在main.go中编写一个初始g
    admin 昨天
  • 我的Go+语言初体验——【二、编码基础(语法结构)(附-视频)】
    其他

    我的Go+语言初体验——【二、编码基础(语法结构)(附-视频)】

    欢迎大家参与【我的Go+语言初体验】活动: 活动地址:【https://bbs.csdn.net/topics/603464006?utm_source=1594742339】 安装过程博文:【https://laoshifu.blog.csdn.net/article/details/121595128】 安装过程视频:【https://live.csdn.net/v/181492】 专栏路径:【https://blog.csdn.net/feng8403000/category_11496375.html】 本章视频:【GoPlus_编程基础(语法结构)-CSDN直播】 本节课程内容为Go+语言的【编码基础】,这里主要针对语法结构进行重点讲解。 如果有go语言的基础的可以略过啊,适合小白看。 目录 欢迎大家参与【我的Go+语言初体验】活动: 1、变量操作 2、分支结构 3、循环结构 ​4、嵌套结构 5、控制台【Scanner】扫描器的使用 Go+不是强类型的语言,故而定义的时候都用【var】 1、变量操作
    admin 昨天
  • " alt="一文讲透一致性哈希的原理和实现">
    其他

    一文讲透一致性哈希的原理和实现

    为什么需要一致性哈希 首先介绍一下什么是哈希 Hash,一般翻译做散列,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 在分布式缓存服务中,经常需要对服务进行节点添加和删除操作,我们希望的是节点添加和删除操作尽量减少数据-节点之间的映射关系更新。 假如我们使用的是哈希取模( hash(key)%nodes ) 算法作为路由策略: 哈希取模的缺点在于如果有节点的删除和添加操作,对 hash(key)%nodes 结果影响范围太大了,造成大量的请求无法命中从而导致缓存数据被重新加载。 基于上面的缺点提出了一种新的算法:一致性哈希。一致性哈希可以实现节点删除和添加只会影响一小部分数据的映射关系,由于这个特性哈希算法也常常用于各种均衡器中实现系统流量的平滑迁移。
    admin 昨天
  • " alt="我的Go+语言初体验——【一、go+环境WIN10_100%成功安装(附-视频)】">
    其他

    我的Go+语言初体验——【一、go+环境WIN10_100%成功安装(附-视频)】

    欢迎大家参与【我的Go+语言初体验】活动: 活动地址:【https://bbs.csdn.net/topics/603464006?utm_source=1594742339】 安装过程博文:【https://laoshifu.blog.csdn.net/article/details/121595128】 安装过程视频:【GoPlus_Win10_红目香薰-CSDN直播】 专栏路径:【https://blog.csdn.net/feng8403000/category_11496375.html】 目录 欢迎大家参与【我的Go+语言初体验】活动: 重点内容备注: 1、前置go环境【go.dev】 2、下载工具git下载【Git - Downloads】 3、镜像下载 3.1、网站下载【https://github.com/goplus/gop】 3.2、镜像拉取【git clone https://github.com/goplus/gop.git】 4、安装Go+环境变量配置 5、gop安装 6、获取【buil
    admin 昨天
  • Go学习笔记—多线程
    其他

    Go学习笔记—多线程

    多线程编程 ​ 一个进程可以包含多个线程,这些线程运行的一定是同一个程序(进程==程序),且都由当前进程中已经存在的线程通过系统调用的方式创建出来。进程是资源分配的基本单位,线程是调度运行的基本单位,线程不可独立于进程存在。 ​ 所有线程都有自己的线程栈,以此存放自己的私有数据(包含在进程的虚拟内存地址中)。一个进程中的很多资源也会被线程所共享,包括在当前进程虚拟内存地址中存放的代码段、数据段、堆、信号处理函数、文件描述符(非负整数)。正因如此,创建一个线程时不会像创建一个进程时那样耗费资源,因为其大多数资源都因共享而无需被复制。 (一)线程简介 一、线程状态 ​ 与进程这种家族式的树状结构不同,线程之间的关系都是平等的。他们可以互相进行如下四种操作。 操作作用pthread_create创建线程——除主线程随着进程一同创建,其他线程都通过线程传入代码段与参数来创建,并会返回TID。pthread_c
    admin 昨天
  • Go学习笔记—基于Go的进程间通信
    其他

    Go学习笔记—基于Go的进程间通信

    IPC(Inter-Process Communication 进程间通信) 一般方法:(1) 半双工Unix管道 (2) FIFOs(命名管道) (3) 消息队列 (4) 信号量 (5) 共享内存 (6) 网络Socket (7) RPC(远程过程调用) (一)管道(Pipe) 1.未命名管道(ps aux | grep java) cmd1 := exec.Command("ps", "aux") cmd2 := exec.Command("grep", "apipe") //cmd对象的底层,Stdout与Stdin属性也是通过指向一个字节流实现读写的,这里用新建的字节流代替 var outputBuf1 bytes.Buffer cmd1.Stdout = &outputBuf1 if err := cmd1.Start(); err != nil { fmt.Printf("Error
    admin 昨天
  • 各编程语言的国内镜像源切换
    其他

    各编程语言的国内镜像源切换

    在学习编程语言过程中,每次都要寻找国内镜像源的切换方法,比较麻烦,所以这次做了汇总,后期有新的语言切换可以进行补充,也欢迎多多交流呀!! 文章目录 npm 修改方法镜像源转换更新方法 pip 更新方法更新方法镜像源切换临时使用修改设为默认使用Windows 主机Linux 主机 Go 语言修改镜像源地址 npm 修改方法 镜像源转换 npm config set registry 镜像源地址 淘宝 npm 镜像源:https://registry.npm.taobao.org 更新方法 npm 更新方法: npm i npm g pip 更新方法 更新方法 pip 更新方法: python -m pip install --upgrade pip 镜像源切换 清华大学: https://pypi.tuna.tsinghu
    admin 昨天
  • " alt="基于gin + websocket单台机器支持百万连接分布式聊天(IM)系统">
    其他

    基于gin + websocket单台机器支持百万连接分布式聊天(IM)系统

    本文将介绍如何实现一个基于websocket分布式聊天(IM)系统。 使用golang实现websocket通讯,单机可以支持百万连接,使用gin框架、nginx负载、可以水平部署、程序内部相互通讯、使用grpc通讯协议。 本文内容比较长,如果直接想clone项目体验直接进入项目体验 goWebSocket项目下载 ,文本从介绍webSocket是什么开始,然后开始介绍这个项目,以及在Nginx中配置域名做webSocket的转发,然后介绍如何搭建一个分布式系统。   1、项目说明 1.1 一般项目中webSocket使用的架构图 1.2 项目体验 项目地址 gowebsocketIM-聊天首页 或者在新的窗口打开 http://im.91vh.com/home/index 打开连接以后进入聊天界面 多人群聊可以同时打开两个窗口 2、介绍webSocket 2.1 webSocket 是什么 WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。 它的最大特点就是,服务器可以主动向
    admin 昨天
  • get与post请求
    其他

    get与post请求

    get与post请求的区别 get与post的使用: Go语言开发发送Get和Post请求 - 简书 golang之net/http包简单的get/post请求 - Go语言中文网 - Golang中文社区 Golang包——strings - Go语言中文网 - Golang中文社区 http接口: webservice接口与HTTP接口学习笔记 - yingfeipei - 博客园 HTTP API接口 HTTP接口 html简介: HTML 简介 | 菜鸟教程
    admin 昨天
  • golang的ping检测主机存活
    其他

    golang的ping检测主机存活

    Go语言的协程会并发,执行,可以大大提高效率。 列如,我们通过 ping 来检测网络的主机的话。 如果使用shell的话,会检查一个IP,在检查下一个IP,速度很慢。 如果我们使用Python 的话,可以使用多线程。 我们这里使用Go的协程来操作,速度是刚刚的。 一个网段,10S中,相当于,一秒钟处理25个左右的IP,因为ping检查,有延时性  此脚本,只能在Linux上执行 package main import ( "fmt" "os/exec" "strconv" "strings" "sync" "time" ) var wg sync.WaitGroup func main() { start := time.Now() ip := "10.10.10." wg.Add(254) for i := 1; i <= 254; i++ { //fmt.Println(ip + strconv.Itoa(i)) true_ip := ip + strconv.Itoa(i) go
    admin 昨天
  • 【Go】Go语言中的 Init 函数和 main 函数
    其他

    【Go】Go语言中的 Init 函数和 main 函数

    文章目录 一、init 函数1. init 函数的作用2. init 函数的特征3. 多个 init 函数的执行顺序4. Go 程序的初始化 二、main 函数三、init 函数和 main 函数的异同四、实例实例一实例二实例三实例四实例五实例六实例七 参考链接 一、init 函数 1. init 函数的作用 go语言中的 init 函数用于包(package)的 初始化 ,该函数是go语言的一个重要特性。 主要作用是: 初始化 不能采用初始化表达式 初始化的变量。程序运行前的注册。实现sync.Once功能。其他 2. init 函数的特征 init 函数是用于程序执行前(程序执行从main函数开始,init 位于main之前执行)做 包的初始化 的函数,比如初始化包里的变量等init 函数没有输入参数、返回值每个包可以拥有多个init函数包的每个源文件也可以拥有多个 in
    admin 昨天
  • Prometheus的Docker容器监控工具cAdvisor
    其他

    Prometheus的Docker容器监控工具cAdvisor

    Google开发的容器监控工具cAdvisor,cAdvisor能够较好地展示Host和容器两个层次的监控数据,并且能够展示历史变化数据。 1、cAdvisor简介  为了解决容器的监控问题,Google开发了一款容器监控工具cAdvisor(Container Advisor),它为容器用户提供了对其运行容器的资源使用和性能特征的直观展示。 它是一个运行守护程序,用于收集,聚合,处理和导出有关正在运行的容器的信息。 Cadvisor使用Go语言开发,利用Linux的cgroups获取容器的资源使用信息,在K8S中集成在Kubelet里作为默认启动项,官方标配。 cAdvisor可以对节点机器上的资源及容器进行实时监控和性能数据采集,包括CPU使用情况、内存使用情况、网络吞吐量及文件系统使用情况。 cAdvisor使用go语言开发,如果想了解更多请访问其官方github:https://github.com/google/cadvisorhttps://github.com/google/cadvisor 2、安装cAdviso
    admin 昨天
  • Dubbo使用Hessian2序列化时针对Byte类型出现java.lang.ClassCastException
    其他

    Dubbo使用Hessian2序列化时针对Byte类型出现java.lang.ClassCastException

    背景 前不久翎野君帮同事看一个问题,比较有启发性,特记录一下。一个dubbo rpc方法中,从请求对象中取出Set变量进行循环操作,然后出现下面的问题。 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Byte 乍一看还有些费解,好好的代码,看上去那么的乖巧可爱,怎么会突然冒出来这个问题,带着怀疑的态度自己本地编写了Test方法试验了一下,发现也没有问题。然后就把目光放在dubbo传输框架上面了,查阅了一些资料,发现dubbo默认的hessian2序列化协议不支持Byte类型。 问题复现 package com.lingyejun.test; import com.alibaba.com.caucho.hessian.io.Hessian2Input; import com.alibaba.com.caucho.hessian.io.Hessian2Output; import o
    admin 昨天
  • Go打印九九乘法表
    其他

    Go打印九九乘法表

    1 package main 2 3 import "fmt" 4 5 func main() { 6 for i := 1; i <= 9; i++ { 7 for y := 1; y <= i; y++ { 8 // println(,i, y) 9 fmt.Printf("%dx%d=%d \t", i, y, i*y) 10 } 11 fmt.Println() 12 } 13 fmt.Println() 14 for i := 9; i >= 1; i-- { 15 for y := 1; y <= i; y++ { 16 // print(i, y) 17 fmt.Printf("%dx%d=%d\t", i, y, i*y) 18 } 19 fmt.Println() 20
    admin 昨天
  • 【Go】Go 的项目目录
    其他

    【Go】Go 的项目目录

    文章目录 一、Go 的项目目录1. 适合个人开发者2. 目前流行的项目结构3. 适合企业开发者 二、Go 项目构建及编译(第一个 Go 程序)参考链接 一、Go 的项目目录 进行Go语言开发的时候,我们的代码总是会保存在 $GOPATH/src 目录下。 在工程经过go build、go install 或 go get 等指令后,会将下载的第三方包 源代码 文件放在 $GOPATH/src 目录下。 产生的二进制可执行文件放在 $GOPATH/bin 目录下。 生成的中间缓存文件会被保存在 $GOPATH/pkg 下,pkg 存储.a文件,import name,实际是到 GOPATH 中去寻找name.a,使用时是该 name.a 的对应的源码中声明的 package 名字(每个源码的第一行都会声明自己属于哪个包)。 一个Go工程中主要包含以下三个目录: src:源代码文件 pkg
    admin 昨天
  • Golang学习(二十) 工厂模式、封装
    其他

    Golang学习(二十) 工厂模式、封装

    我们前面有了解到,在一个包中定义的对象名称必须是大写才能在其他的包中进行使用 但在不同的包调用时会出现一个问题,我在两个包中定义了相同名称的对象,那么我们就必须要用小写来避免重复 所以我们需要将对象的名称小写,然后通过工厂模式来调用不同包中小写开头的对象  创建新目录model mkdir model touch model/mode.go  在mode.go中添加一个结构体 案例1  结构体对象小写调用方法 先定义一个正常的结构体包调用 package model type Student struct{ //这里定义时首字母先大写,允许外部的包调用 Name string Score float64 }  main代码 package main import ( "fmt" "test/model" //导入包名称 起个别名 ) func main(){ var stu = model.Student{ //包名称.结构体 Name: "
    admin 昨天
  • Go的Channel知识总结
    其他

    Go的Channel知识总结

    学习Go语言已有4个月,在此对Go语言相关知识点做个总结 文章目录 一. Go中的Channel是什么?二. Channel语法1.定义和创建Channel2.操作Channel3.Channel的缓冲4. 单向Channel和双向Channel 三. 使用场景1. 用于goroutine之间的消息传递:2. 用于goroutine之间数据传递3. 控制并发数量4. 超时控制 四. Channel注意事项1.len和cap的区别2.可能存在的危险1.使用channel不当造成阻塞2. channel未关闭 一. Go中的Channel是什么? Go语言的并发模型是CSP(Communicating Sequential Processes),提倡通过通信共享内存而不是通过共享内存而实现通信。 Channel是一种特殊的类型。通道像一个传送带或者队列,总是遵循先入先出(
    admin 昨天
  • GORM v2 关联预加载Preload和Joins的区别
    其他

    GORM v2 关联预加载Preload和Joins的区别

    前言 本文中使用到的数据表结构以及GORM版本的区分详见以下文章:GORM v2 一对一关联查询使用(Belongs To 、Has One) 执行区别 调用gorm的Debug方法打印一下一对一关联时SQL语句执行过程。 Preload执行过程 执行代码 db.Debug().Preload("Info").First(&student) 执行结果 从图中可以看出,gorm执行了两条SQL来获取主副表数据 SELECT * FROM `students` ORDER BY `students`.`id` LIMIT 1 SELECT * FROM `information` WHERE `information`.`student_id` = 1   Joins执行过程 执行代码 db.Debug().Joins("Info").First(&student) 执行结果 从图中可以看出,使用Joins后,只执行一条SQL语句就获得了结果 SELECT `students`.`id`,`stud
    admin 昨天
  • Go字符串
    其他

    Go字符串

    1.字符串和字节数组相互转化涉及到了复制,当字符串长度大于32字符时,需要申请堆内存,因此涉及一些密集转换场景,需要评估这种转换带来性能损耗。 2. 字符串只能被访问,不能被修改和扩容。 3. string占16个字节原因: reflect.StringHeader type StringHeader struct { Data uintptr // 8字节 Len int // 8字节 }
    admin 昨天
  • log4go日志模块使用说明
    其他

    log4go日志模块使用说明

    介绍 log4go是用GO语言实现的一个简单高效、支持文件轮换以及日志分级的日志SDK。其特征如下: 1)采用buffered file,满足高性能输出日志 2)支持日志分级,具体分级如下: fatal (log4go.LOG_FATAL) error (log4go.LOG_ERROR) warn (log4go.LOG_WARN) info (log4go.LOG_INFO) debug (log4go.LOG_DEBUG) 3)支持Console writer以及File writer 4)File writer支持按照天或小时进行轮换输出 安装说明 go get github.com/haming123/log4go 输出日志到终端 log4go的缺省日志类型为:TermLogger(终端日志类型),使用TermLogger时不需要初始化,可直接使用日志输出函数输出日志。 package main import "log4go" func main() { log4go.Debug("This is a Debug Me
    admin 2021-12-01
  • Gin框架第一天
    其他

    Gin框架第一天

    文章目录 Gin框架入门---第一天1.介绍1.1 特性1.2 安装 2. Gin的热启动 Gin框架入门—第一天 1.介绍 Gin是一个用Go语言编写的web框架,类似于martini但是拥有更好性能的API框架。 1.1 特性 快速:基于Radix树的路由,小内存占用,没有反射,可预测的API性能支持中间件:传入的HTTP请求可以由一系列中间件和最终的操作来处理。例如:Logger、GZIP……Crash 处理:Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic!JSON 验证:Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。路由组:更好地组织路由。是否需要授权,不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。错误管理:G
    admin 2021-11-11
  • 内燃机设计课设 过量空气系数与温度表对应关系自动查询
    其他

    内燃机设计课设 过量空气系数与温度表对应关系自动查询

    最近几个星期一直在做内燃机设计的课设,学习进度很慢,有几天甚至停了,虽说现在也没有做完!!!!!!!!!!!!!!!!!!!!!!! 大概是这个表, 给定过量空气系数,表中没有的数据要用插值法算,一般要用三次插值法, 比如说可能过量空气系数是2, 温度是1111,两个表中都没有,要用三次插值法。 我是想的挺头秃的,还好整出来 了。 我是用的二维数组,然后结构体存每一个节点的数据,map存一列过量空气系数相同的结构体, 然后查找的时候可以断言后用索引.value直接找到值。 源码的话,过一段时间更新在gitee上吧。
    admin 2021-11-11
  • LeetCode 160 相交链表
    其他

    LeetCode 160 相交链表

    LeetCode 160 相交链表 1.题目描述: 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函数返回结果后,链表必须 保持其原始结构 。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Intersected at '8' 解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。 从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。 在 A 中,相交节点前有 2 个节点;在 B 中,相交节点前有 3 个节点。 2
    admin 2021-11-10
  • LeetCode 234 回文链表
    其他

    LeetCode 234 回文链表

    LeetCode 234 回文链表 1. 题目描述: 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head = [1,2,2,1] 输出:true 示例 2: 输入:head = [1,2] 输出:false 2.题解: 方法:双指针算法 先计算出链表长度,将链表后半部分翻转;从头结点与尾结点分别向前遍历,判断两结点的值是否相等,若不等,则跳出循环;将原链表的后半部分还原; 时间复杂度:整个链表共被遍历4次,O(N) ; 空间复杂度:O(1) ; C++: class Solution { public: bool isPalindrome(ListNode* head) { int n = 0 ; for (auto p = head; p ; p
    admin 2021-11-10
  • 协程和IO多路复用
    其他

    协程和IO多路复用

    协程和IO多路复用 协程IO多路复用前言Linux中提供了三种IO多路复用的实现方式selectpollepoll 使用协程 协程 我们已经知道线程是进程中的执行体,拥有一个执行入口,以及从进程虚拟地址空间中分配的栈(用户栈和内核栈),操作系统会记录线程控制信息,而线程获得CPU时间片以后才可以执行,CPU这里栈指针,指令指针,栈基等寄存器都要切换到对应的线程。 如果线程自己又创建了几个执行体(携程),给它们各自指定执行入口,申请一些内存分给它们用作执行栈,那么线程就可以按需调度这几个执行体了。 为了实现这些执行体的切换,线程也需要记录它们的控制信息。包括ID,执行栈的位置,执行入口地址,执行现场等等。线程可以选择一个执行体来执行,此时CPU中指令指针就会指向这个执行体的执行入口,栈基和栈指针寄存器也会指向线程给它分配的执行栈。 要切换执行体时,需要先保存当前执行体的执行
    admin 2021-11-10
  • xmcd2cue 工具下载
    其他

    xmcd2cue 工具下载

    转换 xmcd 歌曲列表到 cue 歌曲列表工具 特点!这个xmcd2cue是由大佬用Go语言于2019年重写的,天生支持 UTF8 编码,老的那个不支持。 别人的源代码仓库:https://github.com/jopadan/xmcd2cue 基于别人的源代码,我编译好的windows可执行文件下载,内含源代码 编译Go版本:Go 1.17.3 编译命令: Go.exe build xmcd2cue.go xmcd2cue使用方法 xmcd2cue.exe 123.xmcd 123.cue 2021/11/6 commit号:f9ed90c https://cloud.189.cn/t/fiMZreyIZfEr 额外 老的 Freedb 库已经没了,新的 Freedb 改名为 GnuDB 了。 GnuDB地址: https://gnudb.org/ XMCD文件的下载办法,你需要有CD指
    admin 2021-11-10
  • 2021SC@SDUSC山东大学软件学院软件工程应用与实践–Ebiten代码分析 源码分析(六)
    其他

    2021SC@SDUSC山东大学软件学院软件工程应用与实践–Ebiten代码分析 源码分析(六)

    2021SC@SDUSC 目录 一.概述二.代码分析1.Begin()2.End()3.SetTransparent()4.SetVertices()5.NewImage()6.NewScreenFramebufferImage()7.Initialize()8.SetVsyncEnabled()9.SetFullscreen()10.FramebufferYDirection()11.NeedsRestoring()12.NeedsClearingScreen()13.IsGL()14.HasHighPrecisionFloat()15.MaxImageSize()16.NewShader()17.DrawTriangles() 一.概述 本文主要介绍Ebiten操作图像的相关方法,图像方法接口定义在internal/driver/graphics.go文件内,代码如下: type Gra
    admin 2021-11-10
  • Golang底层原理剖析之上下文Context
    其他

    Golang底层原理剖析之上下文Context

    Context 前言Context 前言 如何优雅地使用context点击浅谈Golang上下文Context Context 在Go语言并发编程中,用一个goroutine来处理一个任务 ,而它又会创建多个goroutine来负责不同子任务的创建非常常见,这些场景中往往会需要在API边界之间以及过程之间,传递截止时间,取消信号,或其他与请求相关的数据,这时候就可以使用Context,context包在Go1.7的时候被加入到官方库中。 主要内容可以概括为一个接口,四种具体实现,还有六个函数。 Context接口提供了四个方法,emptyCtx本质上是个整型,*emptyCtx对Context接口的实现只是简单的返回nil,false等等,时机实际上什么也没做。Backgroud和TODO这两个函数内部都会创建emptyCtx。 其中Background主要用于在初始化时获取一个
    admin 2021-11-09
  • KMP算法——字符串索引问题及其应用
    其他

    KMP算法——字符串索引问题及其应用

    package kmp import ( "strconv" "strings" "testing" ) /* /* Knuth-Morris-Pratt算法(简称KMP),是由D.E.Knuth、J.H.Morris 和V.R.Pratt共同提出的一个改进算法,消除了朴素的模式匹配算法中回溯问题, 完成串的模式匹配。 算法思想: 设目标串为s,模式串为t, i、j 分别为指示s和t的指针,i、j的初值均为0。 若有 si = tj,则i和j分别增1; 否则,i不变,j退回至j=next[j]的位置 ( 也可理解为串s不动,模式串t向右移动到si与tnext[j]对齐 ); 比较si和tj。若相等则指针各增1; 否则 j 再退回到下一个j=next[j]的位置(即模式串继续向右移动 ),再比较 si和tj。 依次类推,直到下列两种情况之一: 1)j退回到某个j=next[j]时有 si = tj,则
    admin 2021-11-09
  • go并发控制–WaitGroup 和 Select-case
    其他

    go并发控制–WaitGroup 和 Select-case

    学习博客:https://www.jianshu.com/p/6232a9a32230 Q:假如现在需要实现一个API,该API会执行多个 python 脚本,并根据爬取结果进行数据处理。 A:比较容易想到我们需要使用go并发控制,以下是两种处理方式 使用 waitGroup tasks := []taskStruct{taskA, taskB, taskC} var wg sync.WaitGroup wg.Add(len(tasks)) res := []taskResult{} for i := 0; i < len(tasks); i++ { go func(id uint) { defer wg.Done() r, err := executePythonScript(id) if err != nil { // log and
    admin 2021-11-09
  • golang同一个包中调用函数运行时显示undefined
    其他

    golang同一个包中调用函数运行时显示undefined

    以下代码在vscode里直接运行时会显示test未定义,需要在命令行中输入go build .再运行生成的exe文件。 package main import "fmt" func test() { fmt.Println("helloworld") } package main func main() { test() } 为了简化操作,在vscdoe中运行->生成配置,在.vscode下新建setttings.json,输入 { "code-runner.executorMap": { "go": "cd $dir && go run ." }, "code-runner.executorMapByGlob": { "$dir\\*.go": "go" } } 即可直接使用UI上的运行按钮
    admin 2021-11-09
  • go-context实例
    其他

    go-context实例

    使用channel实现各个协程的优雅关闭 package main import "fmt" import "time" func main() { messages := make(chan int, 10) doneConsumer := make(chan bool, 1) doneProducer := make(chan bool, 1) defer close(messages) // 消费线程 go func() { ticker := time.NewTicker(time.Millisecond * 400) for _ = range ticker.C { select { case <-doneProducer: // 清空消息队列中的元素 fo
    admin 2021-11-09
  • select-case和time.Ticker的使用注意事项
    其他

    select-case和time.Ticker的使用注意事项

    学习播客:https://studygolang.com/articles/5224 package main import ( "fmt" "runtime" "time" ) func init() { runtime.GOMAXPROCS(runtime.NumCPU()) } func main() { ch := make(chan int, 1024) go func(ch chan int) { for { val := <-ch fmt.Printf("val:%d\n", val) } }(ch) tick := time.NewTicker(1 * time.Second) for i := 0; i < 20; i++ { select { case ch <- i: case <-tick.C: fmt.Printf("%d
    admin 2021-11-08
  • 【Doris Weekly 】2021.10.18~2021.10.31
    首页

    【Doris Weekly 】2021.10.18~2021.10.31

    观众朋友们: 晚上好! 欢迎收看【 Doris 近日要闻】~本次为您带来的是 2021 年 10 月 18 日 ~ 2021 年 10 月 31 日的双周总结。(希望大家度过了一个愉快的国庆假期!) Dev 邮件组:dev@doris.apache.orgGithub Issue:https://github.com/apache/incubator-doris/issues社区论坛地址:https://github.com/apache/incubator-doris/discussions ▼ 1. 统计数据 共 21 位作者提交了 34 个 Commit 。感谢以下作者的贡献: Mingyu Chen, xy720, wunan1210, qiye, jiafeng.zhang, Zhengguo Yang, HappenLee, zhuixun, zh0122, xiaokangguo, wei
    admin 2021-11-08