----安装GITyum install git
git config --global user.name "atean"
git config --global user.email "1272697385@qq.com"
----安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
----设置开机启动
systemctl enable docker
----启动docker
systemctl start docker
----查看运行信息
docker ps -a
ps -ef|grep docker
----容器镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://u37gzipr.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
----测试docker
sudo docker run hello-world
----安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
----添加权限
sudo chmod +x /usr/local/bin/docker-compose
----测试
docker-compose -v
----安装mysql
docker pull mysql:5.7
docker images
----镜像启动mysql
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
----进入容器
docker exec -it 84fe97244ac5 /bin/bash
----创建用户并授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
grant all privileges on *.* to 'root'@'127.0.0.1' identified by 'root' with grant option;
grant all privileges on *.* to 'root'@'localhost' identified by 'root' with grant option;
flush privileges;
----安装redis
docker run -p 6379:6379 -d redis:latest redis-server
----安装consul
docker run -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600/udp consul consul agent -dev -client=0.0.0.0
----测试consul
dig @192.168.0.104 -p 8600 consul.service.consul SRV
----docker设置容器自动启动
docker container update --restart=always f63298283033
----安装dig
yum install bind-utils
----下载go https://studygolang.com/dl
wget https://studygolang.com/dl/golang/go1.17.6.linux-amd64.tar.gz
----解压
tar -xvf go1.17.6.linux-amd64.tar.gz
----配置环境变量
vim ~/.bashrc
export GOROOT=/root/go
export GOPATH=/root/projects/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
source ~/.bashrc
go version
----设置代理加速
go env -w GOPROXY=https://goproxy.io,direct
go env -w GO111MODULE=on
----安装node.js
wget https://npmmirror.com/mirrors/node/v16.13.1/node-v16.13.1-linux-x64.tar.xz
tar -xvf node-v16.13.1-linux-x64.tar.xz
----建立软连接
ln -s /root/node-v16.13.1-linux-x64/bin/node /usr/bin/node
ln -s /root/node-v16.13.1-linux-x64/bin/bin/npm /usr/bin/npm
----下载protobuf
https://github.com/protocolbuffers/protobuf/releases/tag/v3.6.1
----下载go依赖包
go install github.com/golang/protobuf/protoc-gen-go
protoc --go_out=plugins=grpc:. *.proto
----安装nacos--配置中心
docker run --name nacos-standalone -e MODE=standalone -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=256m -p 8848:8848 -d nacos/nacos-server:latest
//服务端 获取metadata
md, ok := metadata.FromIncomingContext(ctx)
if !ok {
fmt.Println("metadata get err")
} else {
if name, ok := md["name"]; ok {
fmt.Println(name[0])
}
}
//客户端 写入metadata
//md := metadata.Pairs("name", "张三", "pwd", "123456")
//或
md := metadata.New(
map[string]string{
"name": "张三",
"pwd": "123456",
})
ctx := metadata.NewOutgoingContext(context.Background(), md)
----拦截器服务端
interceptor := func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
start := time.Now()
fmt.Println("收到请求")
c, r := handler(ctx, req)
fmt.Printf("执行时间:%s\n", time.Since(start))
return c, r
}
opt := grpc.UnaryInterceptor(interceptor)
// 实例化grpc Server
s := grpc.NewServer(opt)
----拦截器客户端
opt := grpc.WithUnaryInterceptor(func(ctx context.Context, method string, req, reply interface{}, cc *grpc.ClientConn, invoker grpc.UnaryInvoker, opts ...grpc.CallOption) error {
start := time.Now()
err := invoker(ctx, method, req, reply, cc)
fmt.Printf("请求花费时间:%s\n", time.Since(start))
return err
})
// 连接
conn, err := grpc.Dial(Address, grpc.WithInsecure(), opt)
----客户端快速自带metadata信息
type perRpc struct{}
func (p perRpc) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {
return map[string]string{
"name": "张三",
"pwd": "123456",
}, nil
}
// RequireTransportSecurity indicates whether the credentials requires
// transport security.
func (p perRpc) RequireTransportSecurity() bool {
return false
}
conn, err := grpc.Dial(Address, grpc.WithInsecure(), grpc.WithPerRPCCredentials(perRpc{}))
----protoc-gen-validate 使用
go get -u github.com/envoyproxy/protoc-gen-validate
下载windows .exe文件 https://oss.sonatype.org/content/repositories/snapshots/io/envoyproxy/protoc-gen-validate/protoc-gen-validate/0.6.3-SNAPSHOT/protoc-gen-validate-0.6.3-20211021.193822-1-windows-x86_64.exe
github https://github.com/envoyproxy/protoc-gen-validate/blob/main/validate/validate.proto
复制 https://github.com/envoyproxy/protoc-gen-validate/blob/main/validate/validate.proto 文件里面的内容至本地 validate.proto
protoc --go_out=plugins=grpc:. --validate_out="lang=go:." *.proto
----GRPC反解err
s, ok := status.FromError(err)
if !ok {
fmt.Println("解析err失败")
}
fmt.Println(s.Code())
fmt.Println(s.Message())
----安装yapi
git clone https://github.com/Ryan-Miao/docker-yapi.git
cd docker-yapi
vim docker-compose.yml
删除 command: "yapi server" 前面的 #号和一个空格,一定要对齐,一定要对齐,一定要对齐,一定要对齐
在 command: "node /my-yapi/vendors/server/app.js" 前面添加一个空格
docker-compose up
----安装gorm
go get -u gorm.io/gorm
go get -u gorm.io/driver/sqlite
根据结构体自动生成数据表
db.AutoMigrate(&Product{})
newLogger := logger.New(
log.New(os.Stdout, "\r\n", log.LstdFlags), // io writer(日志输出的目标,前缀和日志包含的内容——译者注)
logger.Config{
SlowThreshold: time.Second, // 慢 SQL 阈值
LogLevel: logger.Info, // 日志级别
IgnoreRecordNotFoundError: true, // 忽略ErrRecordNotFound(记录未找到)错误
Colorful: true, // 禁用彩色打印
},
)
dsn := "root:root@tcp(192.168.0.103:3306)/go_test?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: newLogger,
})
// Create
db.Create(&Product{Code: "D42", Price: 100})
// Read
var product Product
db.First(&product, 1) // 根据整形主键查找
db.First(&product, "code = ?", "D42") // 查找 code 字段值为 D42 的记录
// Update - 将 product 的 price 更新为 200
db.Model(&product).Update("Price", 200)
// Update - 更新多个字段
db.Model(&product).Updates(Product{Price: 200, Code: "F42"}) // 仅更新非零值字段
db.Model(&product).Updates(map[string]interface{}{"Price": 200, "Code": "F42"})
// Delete - 删除 product
db.Delete(&product, 1)
发表评论