go

golang 中实现并发安全的map

Go语言中的 map 在并发情况下,只读是线程安全的,同时读写是线程不安全的。 问题还原 下面来看下并发情况下读写 map 时会出现的问题 func main() { m := make(map[int]int) go func() { // 不停地对map进行写入 for { m[1] = 1 } }() go func() { // 不停地对map进行读取 for { _ = m[1] } }() } 会报错 fatal error: concurrent map read and map write 实现方案1 - 加锁 // 加锁的m...

go-zero 创建api/rpc项目

1.创建目录ent-api,然后用goland打开 设置代理 GOPROXY=https://goproxy.cn 2.初始化项目 cuiwei@weideMacBook-Pro ent-api % go mod init ent-api go: creating new go.mod: module ent-api 创建项目(这里咱不用这种方式,咱通过 api文件创建) cuiwei@weideMacBook-Pro ent-api % goctl api new ent //rpc cuiwei@weideMacBook-Pro ent-api % goctl rpc new ...

缺少某些方法: mustEmbedUnimplementedJobServiceServer()

默认情况下,要使用此工具生成的方法注册服务,服务实现必须嵌入相应的UnimplementedServer,以实现未来的兼容性。这是与之前包含在protoc-gen-go中包含的grpc代码生成器的行为更改。要恢复此行为,请设置require_unimplemented_servers=false选项。例如: protoc --go-grpc_out=require_unimplemented_servers=false[,other options...]:. \ 请注意,不建议这样做,并且仅提供该选项来恢复与之前生成的代码向后兼容性。 建议的做法是,在你的实现(blogServer)文件中...

go grpc

安装go环境 略。。。 安装protobuf brew install protobuf cuiwei@weideMacBook-Pro ~ % protoc --version libprotoc 3.21.5 安装Go plugins for the protocol compiler $ go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28 $ go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2 export PATH="$PATH:$(g...

cli和双击go的二进制文件得到不同的路径

先看代码 func main() { root, err0 := os.Getwd() if err0 != nil { println("empty") } println("dir: " + root) } 生成可执行文件 cuiwei@weideMacBook-Pro demo % go build -o app2 . cli的方式执行 cuiwei@weideMacBook-Pro demo % ./app2 dir: /Users/cuiwei/GolandProjects/demo 双击 app2 的方式 Last login:...

alpine容器中运行go的二进制文件

问题重现 /data # ls app /data # ./app /bin/sh: ./app: not found 解决办法 方法一 查看下依赖库 /data # ldd app /lib64/ld-linux-x86-64.so.2 (0x7ff4fc486000) libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7ff4fc486000) libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7ff4fc486000) /data # ls /lib64/ld-linux-x86-64.s...

gin config

这里我选择json文件作为项目的配置文件 { "app_name": "app", "app_model": "debug", "app_host": "aa.com", "app_port": "8097", "database": { "dsn": "root:@tcp(docker-mysql:3306)/test?charset=utf8&parseTime=True&loc=Local&timeout=10ms" }, "redis_config": { "host": "docker-redis", "port": ":6379"...

gorm 基本操作

type Test struct { Id int `json:"id"` Name string `json:"name"` Memo string `json:"memo"` CreateTime string `json:"create_time"` UpdateTime string `json:"update_time"` DeleteTime string `json:"delete_time"` } // 设置表名 func (Test) TableName() string { return "cw_test" } ...

go 数字和字符串相互转换

字符串转数字 方法1 userId := "100" userId2, _ := strconv.Atoi(userId) //如果userId不是数字字符串,结果为0 方法2 //golang strconv.ParseInt 是将字符串转换为数字的函数,功能灰常之强大. //参数1 数字的字符串形式 //参数2 数字字符串的进制 比如二进制 八进制 十进制 十六进制 //参数3 返回结果的bit大小 也就是int8 int16 int32 int64 //func ParseInt(s string, base int, bitSize int) (i int64, err ...

go gin封装redis

封装 package cache import ( "fmt" "github.com/go-redis/redis" "time" ) var RedisClient *redis.Client func InitRedis() { RedisClient = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", DB: 0, DialTimeout: 10 * time.Second, ReadTimeout: 30 * t...