由于赶进度,今天尝试用ai来写完这次需求迭代的所有接口,从开始运行到结束不到10几分钟,就把这19个接口写完了。当然,完成后有一些修正和补充,主要也是初始阶段没有把需求和详细实现定义得很清楚导致的,如果描述清楚,完成度会更高。
按正常手搓代码应该要至少1-2天的,这种效率的提升,实在不由得惊叹ai的强大。刚开始对ai介入工作方面,还是有所控制的,但这次带给我的反馈,看来要转换下这个观念了。
后续也要重新捡起下关于软件工程架构方面的设计体系,前期所有的设计,从需求定义、数据建模、详细实现、非功能约束,测试等,把这些细节描述越详细,最终ai的实现会给你一个更好的体验。

今天在工作的时候,我又一次失去对自己脾气的控制。
工作上,有些事情其实双方都可以做的,为什么一定纠结要我这边来处理呢,其实我这边处理也没关系,只是一听到别人总是以一种纠结暗示方式要求我这边来处理,我总是忍不住这个气。
其实前段时间,我已经一直提醒自己要克制这方面的脾气了,但是今天还是爆发了,也许我该找些别的方式来开解自己。
我不想因为这些事情,对别人恶言恶语。但是生活工作总是这样,不断重复些零零碎碎,碰撞出微星火花,瞬间点燃我的暴脾气。

有那么一刹那,尽管从未拥有, 但那个身影消失在午夜暗淡灯光的时候,一种仿佛失去了千万次的感觉.
so many times, so lost.
知不可乎骤得,托遗响于悲风

下载 MySQL 8.0 官方仓库包

wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm

或者使用 curl

curl -O https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm

安装仓库包

sudo rpm -ivh mysql80-community-release-el7-7.noarch.rpm

导入所有可能的 MySQL GPG 密钥

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

安装 MySQL 服务器

sudo yum install mysql-community-server

安装后:

1. 启动 MySQL/MariaDB

sudo systemctl start mysqld # MySQL

sudo systemctl start mariadb # MariaDB

2. 设置开机自启

sudo systemctl enable mysqld

sudo systemctl enable mariadb

3. 获取临时密码(仅 MySQL)

sudo grep 'temporary password' /var/log/mysqld.log

4. 安全配置

sudo mysql_secure_installation

用临时密码登录后修改密码:

1. 使用临时密码登录 MySQL

mysql -u root -p

输入临时密码

2. 设置新密码(MySQL 8.0)

ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword123!';

或者 MySQL 5.7

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('YourNewPassword123!');

3. 刷新权限

FLUSH PRIVILEGES;

1、下载protobuf编译器,并配置到环境变量中
https://github.com/protocolbuffers/protobuf/releases/download/v35.0/protoc-35.0-win64.zip

2、验证是否安装成功:
protoc --version

3、写proto测试文件test.proto:

syntax = "proto3";
package api;     // 指定默认包名

// 指定golang包名
option go_package = "./";

message Test {
  string msg = 1;
}

4、生成proto的go代码文件:
protoc --go_out=.\proto\api --go-grpc_out=.\proto\api test.proto (其中--go_out=<指定生成数据层代码路径> --go-grpc_out=<指定生成服务层代码路径>)

5、调用例子
服务端代码:

lis, err := net.Listen("tcp", "0.0.0.0:8002"))
if err != nil {
    log.Fatalf("failed to listen: %v", err)
}
// s := grpc.NewServer(grpc.Creds(insecure.NewCredentials()))
s := grpc.NewServer()
pb.RegisterApiServer(s, api.APIService)
pb.RegisterGreeterServer(s, api.NewTestApiService())
if err := s.Serve(lis); err != nil {
    log.Fatalf("failed to serve: %v", err)
}

func NewTestApiService() *testApiService {
return &testApiService{}
} 

type testApiService struct {
pb.UnimplementedGreeterServer
}

func (h *testApiService) SayHello(context context.Context, req *pb.HelloRequest) (*pb.HelloResponse,   error) {
log.Printf("Received: %v", req.Name)

return &pb.HelloResponse{
    Message:   fmt.Sprintf("Hello %s (age: %d)", req.Name, req.Age),
    Timestamp: time.Now().Format(time.RFC3339),
}, nil
}


客户端代码:

var conn *grpc.ClientConn
conn, err := grpc.Dial("localhost:8002",
    grpc.WithTransportCredentials(insecure.NewCredentials()),
    grpc.WithKeepaliveParams(keepalive.ClientParameters{
        Time: 5 * time.Second,
    }),
)
defer conn.Close()
if err != nil {
    fmt.Println("rpc连接错误", err.Error())
}

client := pb.NewGreeterClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()

fmt.Println("已经链接rpc服务器成功")

resp, err := client.SayHello(ctx, &pb.HelloRequest{Name: "World", Age: 35})
if err != nil {
    fmt.Println("rpc测试请求报错", err.Error())
}
fmt.Println("rpc测试请求返回", resp)

log.Printf("Response: %s", resp.Message)