golang
汪小敏同学
努力经营当下,直至未来明朗。
展开
-
android工具类
https://github.com/wanglijun93/AndroidUtils.git原创 2021-12-27 09:05:37 · 1064 阅读 · 0 评论 -
goland设置goproxy是参数时Environment时的设置方法
goland设置方法, + 在goland的Preferences->go-> Go Modules 里设置 + 全局设置 go env -w GOPROXY=https://goproxy.io,direct + 全局设置go env -w GO111MODULE=on + 可以用go env -u 恢复初始设1. 网上设置方法。查到的都是,参数时proxy的,直接填,https://goproxy.cn 或https://goproxy.io就...原创 2021-12-16 22:45:18 · 3525 阅读 · 0 评论 -
golang文件目录读取和文件的写入
func main() { f,err:= os.OpenFile("E:/桌面/",os.O_RDONLY,os.ModeDir) if err!=nil{ fmt.Println("openfile err",err) return } defer f.Close() //读取方式 info,err:= f.Readdir(-1) if err!=nil{ fmt.Println("readdir err",err) return }.原创 2021-06-07 16:10:57 · 421 阅读 · 0 评论 -
golang读取目录里面文件
//目录 操作函数func main(){ //打开目录 f,err:=os.OpenFile("E:/桌面/",os.O_RDONLY,os.ModeDir) if err!=nil{ fmt.Println("openfile err:",err) return } defer f.Close() //读取目录项 info,err:= f.Readdir(-1) //-1读取目录中的所有目录项 if err!=nil..原创 2021-06-07 13:47:08 · 501 阅读 · 0 评论 -
golang文件拷贝
//拷贝文件func main() { //打开读取文件 f,err:=os.Open("E:/桌面/testa.txt") if err!=nil{ fmt.Println("open err",err) return } defer f.Close() //创建文件 f1,errs:= os.Create("E:/桌面/aaaaa.txt") if errs!=nil{ fmt.Println("create file err:",err) return .原创 2021-06-07 11:00:52 · 97 阅读 · 0 评论 -
golang结构体的首个地址值等于其本身的地址值
type Persions struct { name string age int sex byte}func main() { var temp Persions fmt.Printf("&temp= %p\n",&temp) //&temp= 0xc000004480 fmt.Printf("&temp.name= %p\n",&temp.name) //&temp.name= 0xc00000...原创 2021-06-04 17:10:16 · 174 阅读 · 0 评论 -
golang里面小练习使用map和for
//练习3: 封装 wcFunc() 函数。接收一段英文字符串str。返回一个map,记录str中每个“词”出现次数的。//如:"I love my work and I love my family too"//输出://family : 1//too : 1//I : 2//love : 2//my : 2//work : 1//and : 1//提示:使用 strings.Fields() 函数可提高效率。 func main() { var str="I love my.原创 2021-06-04 14:06:18 · 551 阅读 · 0 评论 -
golang盲点扫描copy
func main(){ data3:=[]int{5,6,7,8,9} fmt.Println("afterData", remove(data3,2))}func remove(data []int,idx int) []int { copy(data[idx:],data[idx+1:]) return data[:len(data)-1]}原创 2021-06-04 09:50:35 · 77 阅读 · 0 评论 -
golang切片的容量长度
func main() { arr:=[]int{1,2,3,4,5,6,7,8,9,10} //容量10 s:=arr[2:5] //容量8 [3,4,5] s2:=s[2:7] //容量6 [5,6,7,8,9] fmt.Println("len(s)",len(s),"s",s,"cap",cap(s)) //max-low len(s) cap 8 fmt.Println("len(s2)",len(s2),"s2",s2,"cap",cap(s2)) /.原创 2021-06-03 14:32:54 · 154 阅读 · 0 评论 -
win7下面consul安装
Consul下载安装consul_1.7.2_windows_64版本1.打开cmd终端,进入consul.exe所在目录,执行如下命令启动Consul服务consul agent -dev-dev 表示开发模式运行-server 表示服务模式运行启动成功之后,访问http://localhost:8500,看到如图所示的Consul服务管理界面,说明启动成功上传资源好像不能不要积分,资料下载:链接:https://pan.baidu.com/s/13zcsHMbCQih0Ns8fjdNWj原创 2021-01-12 16:58:41 · 238 阅读 · 0 评论 -
go微服务项目mvc加注册服务
1.结构目录为下图:服务配置文件micro-protosyntax ="proto3";option go_package = "/proto/cap/;cap";service Cap { rpc SayHello(SayRequest) returns(SayResponse) {}}message SayRequest { string message =1;}message SayResponse { string answer =1;}注意:生.原创 2021-01-12 15:15:57 · 215 阅读 · 1 评论 -
Docker在win打包go项目
DockerfileFROM alpimneADD showproto /showprotoENTRYPOINT ["/showproto"]打包命令编译到linuxset GOARCH=amd64set GOOS=linuxgo build在Docker里面制作镜像 sudo docker build -t showproto原创 2021-01-11 22:02:23 · 306 阅读 · 1 评论 -
windows上交叉编译go语言为linux可执行程序
windows上交叉编译go语言为linux可执行程序交叉编译在一个平台上生成另一个平台可执行的文件,就叫做交叉编译。一个cpu体系可以有不同的操作系统,一个操作系统也可以使用不同的架构平台。有了交叉编译,我们在windows上写的程序,也可以生成在linux运行的二进制程序,可以说写一次代码,可以各个平台运行。go通过使用go version 可以查看当前go的版本go version go1.13.1 windows/amd64笔者的当前环境是go1.13.1目前交原创 2021-01-11 17:38:20 · 1432 阅读 · 1 评论 -
warning: go env -w GO111MODULE=…does not override conflicting OS environment variable
warning: go env -w GO111MODULE=… does not override conflicting OS environment variable 去掉勾选原创 2021-01-11 11:38:47 · 14457 阅读 · 6 评论 -
micro第一节
package mainimport ( "context" "fmt" "github.com/micro/go-micro" imooc "showproto/proto/cap")type CapServer struct {}//需要实现的方法func (c *CapServer) SayHello(ctx context.Context,req *imooc.SayRequest,res *imooc.SayResponse) error { res.Answe.原创 2021-01-10 23:00:57 · 101 阅读 · 0 评论 -
go-micro客户端启动500原因
我这里环境是go1.1.3 遇到500可能是防火墙问题建议关闭试试{ "id": "go.micro.service.api", "code": 500, "detail": "service not found", "status": "Internal Server Error"}原创 2021-01-10 22:35:33 · 1119 阅读 · 0 评论 -
golang坑 ‘godoc‘ 不是内部或外部命令,...
go get golang.org/x/tools/cmd/godoc原创 2021-01-08 09:47:42 · 712 阅读 · 0 评论 -
踩坑go-micro安装
一、安装go参考Golang学习之路(一):安装go二、安装Git、protoc1.安装Gitwindows安装其他包执行go get命令时,需要引用到git命令以及使用Git Bash命令行;下载地址:https://git-scm.com/downloads/默认安装,或参照下面连接安装:https://www.cnblogs.com/xiaozhaoboke/p/11403940.html2.安装 Protocol Buffers命令protocProtocol Buff.原创 2021-01-07 13:49:01 · 1684 阅读 · 0 评论 -
golang序列化与反序列化009
1.序列化当交易通过网络传输或在应用程序之间交换时,它们被序列化。 序列化是将内部的数据结构表示转换为可以一次发送一个字节的格式(也称为字节流)的过程。 序列化最常用于编码通过网络传输或用于文件中存储的数据结构。2.反序列化从交易的字节流表示转换为函数库的内部数据结构表示的过程称为反序列化或交易解析。转换回字节流以通过网络传输、哈希化(hashing)或存储在磁盘上的过程称为序列化。大多数比特币函数库具有用于交易序列化和反序列化的内置函数。3.gob包介绍binary.Write(),原创 2020-12-02 09:54:34 · 382 阅读 · 0 评论 -
修改构造区块链数据库008
package mainimport ( "fmt" "github.com/boltdb/bolt" "log")//构造区块链 结构体type BlockChain struct { //blocks []*Block db *bolt.DB tail []byte //存储最后一个区块的哈希 /** //使用数据库存储区块(分析一波 key是区块链的哈希 value是block的字节流) block1 Hash ---> block1 to byte() .原创 2020-12-01 17:28:22 · 202 阅读 · 0 评论 -
blot数据库007
blot数据库go的专属原创 2020-12-01 13:57:30 · 362 阅读 · 0 评论 -
byte二位数组转换问题005
这里简单介绍一下 bytes方法里面拼接转切片 res1:=bytes.Join([][]byte{ []byte("hello"), []byte("world"),}, []byte("") ) fmt.Printf("res1 %d\n",res1) // [104 101 108 108 111 119 111 114 108 100]__________________________________________________str1:=[...原创 2020-11-30 15:36:20 · 162 阅读 · 0 评论 -
补充区块代码更新函数004
package mainimport ( "bytes" "crypto/sha256" "encoding/binary" "fmt" "log" "time")//创建一个区块type Block struct { //1 版本号 Version uint64 //2 区块前哈希 PrevHash []byte //3 梅克尔根(这是一个哈希值 v4版本介绍) MerkleRoot []byte //4 时间戳 TimeStamp uint64...原创 2020-11-30 13:29:27 · 119 阅读 · 0 评论 -
添加区块到区块链当中003
package mainimport ( "crypto/sha256" "fmt")//0 定义结构// 创建前哈希值 创建当前哈希值 和数据type Block struct { Prevhash []byte //前哈希 Hash []byte //当前哈希 TODO Data []byte //数据}//创建一个区块func NewBlock(data string,prevBlockHash []byte) *Block { block:=Block{.原创 2020-11-27 17:04:49 · 352 阅读 · 0 评论 -
创建我的第一个区块链002
package mainimport ( "crypto/sha256" "fmt")//0 定义结构// 创建前哈希值 创建当前哈希值 和数据type Block struct { Prevhash []byte //前哈希 Hash []byte //当前哈希 TODO Data []byte //数据}//创建一个区块func NewBlock(data string,prevBlockHash []byte) *Block { block:=Block{.原创 2020-11-27 14:44:47 · 111 阅读 · 0 评论 -
创建第一个区块001
package mainimport ( "crypto/sha256" "fmt")//定义结构type Block struct { //定义前区块哈希 Prevhash []byte //定义当前区块哈希 Hash []byte //数据 Data []byte} //2 创建区块 创建需要的数据和前区块的哈希func NewBlock(data string,prevBlcokHash []byte) *Block { block:=Bl...原创 2020-11-27 13:50:23 · 1766 阅读 · 0 评论 -
golang多个消费者访问共享数据
package mainimport ( "fmt" "sync")var sum intvar rmutex sync.RWMutex//生产者func sheng(out chan <-int ) { for i:=0;i<=100;i++{ out<-i } close(out)}//消费者func xiao(in <-chan int) { rmutex.RLock() for num:= range in{.原创 2020-11-27 10:01:38 · 331 阅读 · 0 评论 -
golang条件变量的作用并不保证在同一时刻仅有一个协程(线程)访问某个共享的数据资源
条件变量:条件变量的作用并不保证在同一时刻仅有一个协程(线程)访问某个共享的数据资源,而是在对应的共享数据的状态发生变化时,通知阻塞在某个条件上的协程(线程)。条件变量不是锁,在并发中不能达到同步的目的,因此条件变量总是与锁一块使用。例如,我们上面说的,如果仓库队列满了,我们可以使用条件变量让生产者对应的goroutine暂停(阻塞),但是当消费者消费了某个产品后,仓库就不再满了,应该唤醒(发送通知给)阻塞的生产者goroutine继续生产产品。GO标准库中的sys.Cond类型代表了条件变量。条件原创 2020-11-27 09:59:53 · 396 阅读 · 0 评论 -
golang读写锁简单例子
package mainimport ( "fmt" "math/rand" "sync")var count int // 全局变量countvar rwlock sync.RWMutex // 全局读写锁 rwlockfunc read(n int) { rwlock.RLock() fmt.Printf("读 goroutine %d 正在读取数据...\n", n) num := count fmt.Printf("读 goro.原创 2020-11-25 16:04:56 · 321 阅读 · 0 评论 -
golang以打印机为例 互斥锁的问题 使用channel解决
package mainimport ( "fmt" "time")func person1(str string,c chan <-int) { printer(str) c<-1 //往里面写}func person2(c <- chan int,o chan <-bool) { if num:=<-c;num==1{ printer("world") } o<-true}func printer(str.原创 2020-11-25 15:28:38 · 731 阅读 · 0 评论 -
go里面select使用
/**Go里面提供了一个关键字select,通过select可以监听channel上的数据流动。select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。与switch语句相比, select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作,大致的结构如下:在一个select语句中,Go语言会按顺序从头至尾评估每一个发送和接收的语句。如果其中的任意一语句可以继续执行(即没有被阻塞),那么就从那些可以执行的语句..原创 2020-11-24 11:28:18 · 124 阅读 · 0 评论 -
golang定时器
func main() { c:=make(chan int) ticker:=time.NewTicker(time.Second*1) i:=0 go func() { for{ <-ticker.C i++ fmt.Println("i =",i) if i==5{ c<-i close(c) ticker.Stop() } } }() for{ <-c break }}原创 2020-11-24 10:57:27 · 125 阅读 · 0 评论 -
Goexit
调用 runtime.Goexit() 将立即终止当前 goroutine 执行,调度器确保所有已注册 defer延迟调用被执行。func main() {go func() {defer fmt.Println("A.defer")func() {defer fmt.Println("B.defer")runtime.Goexit() // 终止当前 goroutine, import "runtim...原创 2020-11-23 11:42:09 · 146 阅读 · 0 评论 -
go语言中的指针(一)
go语言当中的指针默认是nil操作符 "&" 取变量地址,"*" 通过指针访问目标对象func main() {var a int = 100 // 声明 int 变量 afmt.Printf("&a = %p\n", &a) // "&" 取 a 地址var p *int = nil // 声明变量p, 类型为 *intp = &a ...原创 2020-11-11 19:39:31 · 119 阅读 · 0 评论 -
fiber框架token校验
文档地址 https://github.com/gofiber/jwtpackage mainimport ( "time" "github.com/dgrijalva/jwt-go" "github.com/gofiber/fiber" "github.com/gofiber/fiber/middleware" jwtware "github.com/gofiber/jwt")const jwtSecret = "asecret"//token验证func authRe.原创 2020-08-11 14:39:51 · 1283 阅读 · 0 评论