Golang 常用判断
步骤说明判断数组或切片为空len(arr) == 0 & len(slice) == 0
判断结构体类型 是否为空type member struct { Id int64 Nickname string}func main() { var m member if m == (member{}) { fmt.Println("m == member{} is empty") }}
Golang 常量定义
常规定义const Name string = "axinblog"
const Type = 1
const name, id = "bimmler", 17
iota 枚举const ( StatusDisable = iota StatusEnable = iota)const ( StatusDisable = iota // 状态关闭 StatusEnable // 状态开启)
以上两种定义相等
const ( Silent LogLevel = iota + 1 Error Warn Info)
Golang 打包上线运行
环境说明
开发平台:mac
go version go1.16.2 darwin/amd64
线上平台:CentOS Linux release 8.3.2011
步骤说明打包可执行文件mac 打包命令
# 打包linux平台CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go# 打包windows平台CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go
注:
CGO_ENABLED:CGO_ENABLED = 1 打开C语言版本的GO编译器CGO_ENABLED = 0 关闭C语言版本的GO编译器
GOOS:目标操作系统
GOARCH:目标操作系统的架构
运行
linuxchmod +x 应用名称
调试测试:执行./main常驻执行:执行./main & 或者 nohup ./main &
[root@axin goProject]# chmod +x ./main[root@axin goProject]# lltotal 24712drwxr ...
Golang 时间日期操作
步骤说明如果你是PHP开发,可以这样记
PHP 中的 Y-m-d H:i:s 等于 Golang 中的 2006-01-02 15:04:05
当前时间戳时间戳(秒):seconds := time.Now().Unix()时间戳(纳秒):time.Now().UnixNano()时间戳(毫秒):time.Now().UnixNano() / 1e6时间戳(纳秒转换为秒):time.Now().UnixNano() / 1e9
当前时间currentTime := time.Now()fmt.Println(currentTime)// 输出:2021-05-24 22:17:02.678787 +0800 CST m=+0.000129143currentTime := time.Now().Format("2006-01-02 15:04:05")// 输出:2021-05-24 22:17:02
时间戳格式化currentTime := time.Now().Format("2006-01-02 15:04:05")timestamp, _ ...
Golang 类型与相应的取值范围
Int 类型
int字节大小:与操作系统位数有关,32位int类型为4字节,64位int类型为8字节
int8 1字节取值范围:-128 ~ 127
int16 2字节取值范围:-32768 ~ 32767
int32 4字节取值范围:-2147483648 ~ 2147483647
int64 8字节取值范围:-9223372036854775808 ~ 9223372036854775807
uint 无符号int类型字节大小:与操作系统位数有关,32位int类型为4字节,64位int类型为8字节
uint8: 0 ~ 255uint16: 0 ~ 65535uint32: 0 ~ 4294967295uint64: 0 ~ 18446744073709551615
Golang 类型转换
String To Intimport "strconv" //先导入strconv包string转成int:int, err := strconv.Atoi(string)string转成int64:int64, err := strconv.ParseInt(string, 10, 64)int转成string:string := strconv.Itoa(int)int64转成string:string := strconv.FormatInt(int64,10)
int or float64
fmt.Sprint 返回传递给它的任何变量的字符串格式
pi := fmt.Sprint(3.14)num := fmt.Sprint(1)orfmt.Sprintf("%v", 3.14) // "3.14"fmt.Sprintf("%v", 1) // "1"
interface{}var params interface{}params.(string)par ...
Gorm V2 自定义数据类型实现
环境说明
gorm.io/gorm v1.21.10
go version go1.16.2 darwin/amd64
步骤说明msyql json 数据参考文献自定义数据类型
Gorm 常用操作整理
环境说明
gorm gorm.io/gorm
go go1.16.2
gorm v2
步骤说明注:这里使用的是gorm v2区别:
// v2import "gorm.io/gorm"
// v1import "github.com/jinzhu/gorm"
增// AddMemberfunc (d *Dao) AddMember(member *model.Member) error { return d.ORM.Table(member.TableName()).Create(member).Error}
事务新增// TxAddMemberfunc (d *Dao) TxAddMembert(tx *gorm.DB, member *member.Member) error { return tx.Table(member.TableName()).Create(member).Error}
删//DeleteMemberfunc (d *Dao) DeleteMember(id int ...
Kratos 入门使用
环境说明
kratos version v2.0.0-beta4
go version go1.16.2 darwin/amd64
步骤说明环境准备参考:[快速开始]
安装命令工具
# 安装 kratos 命令工具go get -u github.com/go-kratos/kratos/cmd/kratos/v2@latest# 可能不是最新的项目,可以执行kratos upgrade
我这里kratos 还是0.5.0版本,所以我这使用的是kratos upgrade
创建项目
kratos new <project-name>
# axin @ AxindeMacBook-Pro in ~/workspace/goProject [10:55:35]$ kratos new axin🚀 Creating service axin, layout repo is https://github.com/go-kratos/kratos-layout.git, please wait a moment.Cloning into '/Users/axin/.kr ...
Linux 日志清理
环境说明
CentOS Linux release 8.3.2011
问题说明磁盘占用90%,利用df -hl & du -sh命令找到
/var/log/messages/var/log/journal
占用过多,分析日志查看原因
大量:
Jun 20 03:40:31 iZbp14vt99zpj8dde2fdlmZ crond[208986]: No configuration file found at /root/.esmtprc or /etc/esmtprc
解决步骤查看当前日志占用磁盘的空间的总大小journalctl --disk-usage
[root@iZbp14vt99zpj8dde2fdlmZ journal]# journalctl --disk-usage Archived and active journals take up 3.9G in the file system.
指定日志文件保存多久保存最近一周:journalctl --vacuum-time=1w保存最近一年:journalctl --vacuum-time=1years
[ro ...