- 博客(87)
- 收藏
- 关注
原创 go项目中引用第三方包或自己写的包
引入第三方包1.打开gomod方式,和设置下载点,在终端输入go env,查看是否更改成功。go env -w GO111MODULE=ongo env -w GOPROXY=https://goproxy.io,direct2.goget第三方包go get github.com/rs/zerolog/log可以看到在GoPath/pkg/mod/目录下会自动下载了文件3.更新gomod但是发现在项目中这个包为红色,且不能用。在打开的项目文件中更新gomodgo mod tid
2022-04-21 14:46:34
5268
原创 beego bee run出错
conf controllers go.mod main.go models routers static tests views[root@localhost abc]# bee run______| ___ \| |_/ / ___ ___| ___ \ / _ \ / _ \| |_/ /| __/| __/\____/ \___| \___| v1.12.02021/09/23 01:11:59 WARN ▶ 0001 Running applic
2021-09-23 01:15:14
395
原创 linux 安装beego
1.beego 环境变量需要配置在 ~/.bashrc ,而我在配置了 /etc/profile 不生效配置在 /etc/profile 然后执行:会报错:-bash: bee: command not found2.将环境变量配置在 ~/.bashrc:vim ~/.bashrc export GOPATH=/root/workspace/beego/ # beego的项目路径(工作目录)export GOROOT=/usr/local/go
2021-09-22 19:36:28
754
原创 centos8 安装redis6.0+
centos8 安装redis6.0+1.下载wget http://download.redis.io/releases/redis-6.2.4.tar.gz2.解压tar -zxvf redis-6.2.4.tar.gz3.进入解压的文件夹cd redis-6.2.14.编译make5.安装到此目录make install PREFIX=/usr/local/redis6.新建一个存放配置文件的文件夹,并将配置文件复制过来,然后修改文件内容mkdir /usr/loca
2021-07-15 00:32:56
136
原创 centos8 没有显示共享文件夹
如果 /mnt/hgfs下没有共享的文件夹root用户下输入vmhgfs-fuse .host:/ /mnt/hgfs每次重启自动挂载vim /etc/fstab在文件末尾加上.host:/ /mnt/hgfs fuse.vmhgfs-fuse allow_other 0 0
2021-06-29 17:35:37
668
1
原创 centos 安装mysql8.0+
https://dev.mysql.com/downloads/repo/yum/ 进入这个mysql官网根据centos版本下载rpm文件2.安装数据源yum install yum install mysql80-community-release-el8-1.noarch.rpm3.检查数据源yum repolist enabled | grep "mysql.*-community.*"4.禁用CentOS8自带的mysql模块yum module disable mysql.
2021-06-29 17:20:48
99
原创 go 创建并记录log文件的函数
1.声明func init_log(path string){ logFile,logErr:=os.OpenFile(path, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) if logErr!=nil{ fmt.Println("Fail to find", logFile, " start Failed") os.Exit(1) } log.SetOutput(logFile) log.SetFlags(log.Ldate | log.Ltim
2021-06-07 10:42:49
247
转载 go生成动态库,给c调用
1.go源码package mainimport "C"//export Hellofunc Hello() string { return "Hello"}func main() {}}2.go生成动态库gobuild -v -x -buildmode=c-shared -o libhello.so会生成libhello.h、libhello.so两个文件。#include<stdio.h>#include "libhello.h"void
2021-06-03 10:27:01
655
原创 Linux中socket 错误编码表 errno
虽然errno是非线程安全的,但是可以通过几种机制保证其安全。。 最近在使用的过程中获得了errno,程序无法执行,也不知道如何解决问题。因此,理解每一个返回的errno整数值的含义是很重要的。。这个我们可以通过strerror函数来实现。。strerror(返回整数errno对应的错误原因的描述字符串)所需头文件: #include函数声明: char * strerror(int errnum);输入: 整数errno输出: 返回描述.
2021-05-13 12:29:08
1911
原创 go语言 httpHandleFunc()返回应答的参数设置
func handleVtduHttpPlay(w http.ResponseWriter, r *http.Request) w.Header().Set("Access-Control-Allow-Origin", "*") //允许访问所有域 w.Header().Add("Access-Control-Allow-Headers", "Content-Type") //header的类型 w.Header().Set("content-type", "applicat
2021-05-11 18:22:36
829
原创 为ubuntu添加一个虚拟网卡
服务器的网段是192.168.9。现在需要连接一个192.168.1的机器。则需要向服务器中添加一个新的虚拟网卡。step1:ifconfig,获取当前网卡的名字ens3然后输入命令: sudo ifconfig ens3:1 192.168.1.125 up
2021-05-07 15:46:09
1800
转载 Redis Go语言与Redis数据库交互
安装go get github.com/gomodule/redigo/redispackage mainimport "github.com/gomodule/redigo/redis"func main(){ conn, _ := redis.Dial("tcp", ":6379") defer conn.Close() conn.Do("set", "c1", "hello")}然后编译运行该文件,之后如果在 redis 中查找到键 “c1” 的值为 “he
2021-04-28 10:31:00
162
原创 go小数上下取整,四舍五入
官方的math 包中提供了取整的方法,向上取整math.Ceil() ,向下取整math.Floor()package mainimport ( "fmt" "math")func main(){ x := 1.1 fmt.Println(math.Ceil(x)) // 2 fmt.Println(math.Floor(x)) // 1}要注意的是,取完整后返回的并不是真正的整数,而是float64 类型,所以如果需要int 类型的话需要手动转换。
2021-04-22 09:52:37
7426
原创 Go map的key排序
Map的迭代顺序是不确定的,并且不同的哈希函数实现可能导致不同的遍历顺序。在实践中,遍历的顺序是随机的,每一次遍历的顺序都不相同。这是故意的,每次都使用随机的遍历顺序可以强制要求程序不会依赖具体的哈希函数实现。如果要按顺序遍历key/value对,我们必须显式地对key进行排序,可以使用sort包的Strings函数对字符串slice进行排序。下面是常见的处理方式:import "sort"var names []stringfor name := range ages { names =
2021-04-21 11:42:38
849
原创 go 原子操作
因为,go中加锁会涉及到用户态向内核态的切换,会比较消耗资源,对于基本的数据类型我们可以使用原子操作atomic包方法 解释func LoadInt32(addr *int32) (val int32)func LoadInt64(addr *int64) (val int64)func LoadUint32(addr *uint32) (val uint32)func LoadUint64(addr *uint64) (val uint64)func LoadUintptr(addr *ui
2021-04-20 17:45:59
183
原创 Go sync.Map使用方法
Go语言中内置的map不是并发安全的。请看下面的示例:var m = make(map[string]int)func get(key string) int { return m[key]}func set(key string, value int) { m[key] = value}func main() { wg := sync.WaitGroup{} for i := 0; i < 20; i++ { wg.Add(1)
2021-04-20 17:43:57
257
原创 Go sync.Once使用方法
说在前面:这是一个进阶知识点。 延迟一个开销很大的初始化操作到真正用到它的时候再执行是一个很好的实践。因为预先初始化一个变量(比如在init函数中完成初始化)会增加程序的启动延时,而且有可能实际执行过程中这个变量没有用上,那这个初始化操作就不是必须要做的。我们来看一个例子:var icons map[string]image.Imagefunc loadIcons() { icons = map[string]image.Image{ "left": loadIcon("l
2021-04-20 17:34:18
213
原创 Golang 全局sql数据库连接
Golang 如何把sql数据库连接写成全局的,不用每次频繁创建销毁,减少数据库消耗与代码复杂度。数据库连接通常在model层下的db.go中定义(命名自定义,也可以是database或者sql,与数据库相关)因为我这里是使用mongoDb所以为model/mgo.gopackage modelimport ("context"_ "fmt""go.mongodb.org/mongo-driver/mongo""go.mongodb.org/mongo-driver/mongo/o
2021-04-20 13:09:45
674
原创 Go打印函数名/文件名/行号
package mainimport ("fmt";"runtime") golang 的runtime库,提供Caller函数,可以返回运行时正在执行的文件名和行号:函数定义:func Caller(skip int) (pc uintptr, file string, line int, ok bool) {} 函数用法:_, file, line, ok := runtime.Caller(0) func main() { funcName,file,line,ok :=.
2021-04-19 17:52:44
1366
原创 go WaitGroup使用
使用goroutineGo 程序中使用go关键字为一个函数创建一个goroutine。一个函数可以被创建多个goroutine,一个goroutine必定对应一个函数。启动单个goroutine启动goroutine的方式非常简单,只需要在调用的函数(普通函数和匿名函数)前面加上一个go关键字。举个例子如下:func hello() { fmt.Println("Hello Goroutine!")}func main() { go hello() fmt.Printl
2021-04-19 15:29:52
138
原创 Go HTTP客户端和服务端
HTTP协议超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。HTTP 客户端使用Go语言编写一个简单的发送HTTP请求的Client端,代码如下:// http client demofunc main() { conn, err := net.Dial("tcp", "www.baidu.com:80")
2021-04-19 15:16:41
358
转载 Go 网络通信处理tcp粘包问题
编辑 版权1.tcp粘包问题server代码// socket_stick/server/main.gofunc process(conn net.Conn) { defer conn.Close() reader := bufio.NewReader(conn) var buf [1024]byte for { n, err := reader.Read(buf[:]) if err == io.EOF { break } if err != nil { fm
2021-04-16 11:49:47
167
原创 Go语言实现UDP通信
// UDP/server/main.go// UDP server端func main() { listen, err := net.ListenUDP("udp", &net.UDPAddr{ IP: net.IPv4(0, 0, 0, 0), Port: 30000, }) if err != nil { fmt.Println("listen failed, err:", err) return } defer listen.Close() for {
2021-04-16 11:34:28
394
1
原创 Go语言实现UDP通信
7.1 UDP协议UDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时序的通信,但是UDP协议的实时性比较好,通常用于视频直播相关领域。7.2 UDP服务端使用Go语言的net包实现的UDP服务端代码如下:// UDP/server/main.go// UDP server端func m
2021-04-16 11:15:20
655
原创 Go语言实现TCP通信
5.2 TCP服务端一个TCP服务端可以同时连接很多个客户端,例如世界各地的用户使用自己电脑上的浏览器访问淘宝网。因为Go语言中创建多个goroutine实现并发非常方便和高效,所以我们可以每建立一次链接就创建一个goroutine去处理。TCP服务端程序的处理流程:监听端口接收客户端请求建立链接创建goroutine处理链接。我们使用Go语言的net包实现的TCP服务端代码如下:func main() { listen, err := net.Listen("tcp&
2021-04-16 11:09:02
547
1
原创 go int转byte
//整形转换成字节func IntToBytes(n int) []byte { x := int32(n) bytesBuffer := bytes.NewBuffer([]byte{}) binary.Write(bytesBuffer, binary.BigEndian, x) return bytesBuffer.Bytes()}//字节转换成整形func BytesToInt(b []byte) int { bytesBuffer := bytes.NewBuffer(
2021-04-14 17:04:12
2002
原创 shell 脚本,根据进程名关闭指定进程
shell文件名:stopserver.sh#!/bin/bashkill -9 $( ps -e|grep 进程名 |awk '{print $1}')
2021-04-14 14:26:03
867
原创 golang 文件复制
golang 文件复制func Copy(srcFile, dstFile string) (int64, error) { sourceFileStat, err := os.Stat(srcFile) if err != nil { return 0, err } if !sourceFileStat.Mode().IsRegular() { return 0, fmt.Errorf("%s is not a regular file"
2021-04-13 17:41:15
185
原创 centos7上不了网,NAT模式
一、选择VMWare的NAT模式。1)导航栏“编辑”->“虚拟网络编辑器” ->NAT模式->NAT设置记住NAT设置中的子网IP、子网掩码、网关IP三项,接下来配置文件主要是这三项。嗯,这里记得按确定,我之前没有按确定写好配置后还是不行,不知道为什么。2)编辑网络配置文件。vi /etc/sysconfig/network-scripts/ifcfg-ens33我的是ens33,不同的人或许会有不同。然后输入systemctl restart network 重启
2021-04-13 09:58:35
173
原创 c++ ANSI与utf8互相转换
C++的项目,字符编码是一个大坑,不同平台之间的编码往往不一样,如果不同编码格式用一套字符读取格式读取就会出现乱码。因此,一般都是转化成UTF-8这种平台通用,且支持性很好的编码格式。Unicode、UTF-8的概念不做过多解释,这里说一下ANSI,我第一次看到这个名词,我看成了ASCII。被Mentor狠批一顿。可以看出,ANSI和ASCII还是有关系的。ANSI也叫本地码。我们要做到能在Unicode、UTF-8、ANSI这三种编码格式中自由转换。如下图所示:在C++中,要怎么做呢?当然是用标
2021-04-09 10:27:43
5447
2
原创 未定义标识符 HMAC_CTX_init
这是因为,这是旧版本的代码HMAC_CTX hctx;HMAC_CTX_init(&hctx);HMAC_Init_ex(&hctx, mac_key, sizeof(mac_key), EVP_sha1(), NULL);HMAC_Update(&hctx, pTemp + offset, DEFAULT_PAGESIZE - reserve - offset + IV_SIZE);HMAC_Update(&hctx, (const unsigned char)&
2021-04-08 16:38:51
3828
3
原创 go语言集合中Element转换为自定义结构体的方法
在最开始学习go语言的时候肯定都会用到用list存储一些结构体。然后再把list里面存储的东西给取出来用,结果取出来用的时候发现会报错。图中为list存储了net.Conn结构体,存好存但是取出来的时候不能用了。最开始因为list存的是Element,所以想着把Element转换为net.Conn甚至尝试过用结构体转换为json字符串,再将字符串装换为结构体的方法也试过了,但是由于Element中元素属性都是小写或者说是私有的不能被转换为josn,最后以失败告终。解决到最后才发现Element中Va
2021-04-06 16:01:25
427
转载 qt 中控件保持比例缩放
Qt中控件保持比例缩放项目中涉及到视频窗口的显示,而视频窗口在缩放的过程中,肯定需要保持宽高比进行缩放,然而qt中并没有现成的工具可以使用,网上也没有找到比较好的教程,于是自己探索后记录下来最终效果实现思路是这样的:封装一个类,集成自QFrame(继承自QFrame而不是QWidget是因为QFrame重载了paintEvent,方便进行样式美化),在这个类中声明一个QWidget的成员变量,重写派生类的这个方法:virtual void resizeEvent(QResizeEvent *ev
2021-03-11 19:21:52
4838
原创 qt 打开html文件
在模块中添加QWebEngineWidget#include <QWebEngineView> QString path = QApplication::applicationDirPath() + "/smarttest.html";//文件路径 htmlView = new QWebEngineView(this);//创造对象 htmlView->setUrl(QUrl(path));//添加路径 setCentralWidget(htmlView);...
2021-03-10 13:11:02
2110
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人