
Golang
Golang
长空写代码
这个作者很懒,什么都没留下…
展开
-
Gin开发记录之 go-sql-driver 获取MySQL数据库连接
首先安装MySQL的go-sql-driver包go get github.com/go-sql-driver/mysql获取mysql数据库连接函数如下// GetDB 获取mysql数据库连接func GetDB() *sql.DB { conn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", "root", "123456", "localhost", 3306, "db name") db, err := sql.Open("mysql", conn) i原创 2021-07-01 22:17:44 · 417 阅读 · 0 评论 -
Golang | Golang基础
Golang接口和断言原创 2020-04-25 17:27:09 · 220 阅读 · 0 评论 -
Go实现md2亿次加密
代码如下package mainimport ( "bufio" "fmt" "hash" "io" "os" "time")func main() { fmt.Print("请输入需要md2亿次加密的字符:") input := bufio.NewScanner(os.Stdin) input.Scan() s := input.Text() start := time.Now().Unix() for i := 0; i < 100000000; i++ {原创 2020-10-29 13:49:05 · 824 阅读 · 3 评论 -
Go 获取当前服务器IP
第一种方式func GetLocalIP() (ip string, err error) { addrs, err := net.InterfaceAddrs() if err != nil { return } for _, addr := range addrs { ipAddr, ok := addr.(*net.IPNet) if !ok { continue }原创 2021-07-16 16:37:19 · 3679 阅读 · 0 评论 -
Goland | 使用Goland IDE go mod 方式构建项目
不管学习什么编程语言一开始都会经历的四步开发工具安装IDE安装设置 依赖/包 国内镜像项目构建工具,管理依赖/包一、Golang 开发工具安装https://golang.org/ 官网(需要各自手段)https://github.com/golang/go github地址http://docscn.studygolang.com/ golang中文网二、Goland IDE安装https://www.jetbrains.com/zh-cn/go/三、设置 依赖/包 国内原创 2020-09-24 15:16:49 · 2212 阅读 · 2 评论 -
golang | 序列化与反序列化 结构体与json之间的转换
单个结构体结构体转换为字符串package mainimport ( "encoding/json" "fmt")type Result struct { Code int `json:"code"` Message string `json:"message"`}func main() { var s = Result{ Code: 1, Message: "你好", } jsonByte, err := json.Marshal(s) if原创 2020-12-10 23:54:34 · 1105 阅读 · 0 评论 -
Gin开发记录之日志处理
func main() { // 日志处理 // 禁用控制台颜色,将日志写入文件时不需要控制台颜色。 gin.DisableConsoleColor() // 记录到文件。 f, _ := os.Create("trojan.log") gin.DefaultWriter = io.MultiWriter(f) // 如果需要同时将日志写入文件和控制台,请使用以下代码,开发时使用 gin.DefaultWriter = io.MultiWriter(f, os.Stdout) // .原创 2021-07-01 22:14:12 · 455 阅读 · 0 评论 -
GO语言占位符
普通占位符占位符说明举例输出%v相应值的默认格式Printf("%v", people){zhangsan}%+v打印结构体时,会添加字段名Printf("%+v", people){Name:zhangsan}%#v相应值的 Go 语法表示Printf("#v", people)main.Human{Name:“zhangsan”}%T相应值的类型的 Go 语法表示Printf("%T", people)main.Human%%字转载 2021-07-02 01:09:22 · 352 阅读 · 0 评论 -
Golang | GOROOT、GOPATH、Go-Modules-三者的关系介绍
一、GOROOT介绍在安装完Golang语言的时候,所谓的安装路径其实就是你的GOROOT路径,也就是说GOROOT存放的Golang语言内建的程式库的所在位置,而通常你安装完后,你电脑的环境变数就会设好GOROOT路径,当你开发Golang程式的时候,当你import内建的程式库的时候,并不需要额外安装,而当程式运行后,预设也会先去GOROOT路径下寻找相对应的程式库来运行。1、查看Glang环境变量go envenv中有些是我已经修改过的,通常如果你是初次安装Golang语言并且没做什么环境原创 2020-09-24 10:17:14 · 3523 阅读 · 1 评论 -
Go什么情况下使用指针
推荐在方法上使用指针(前提是这个类型不是 map、slice 等引用类型)当结构体较大的时候使用指针会更高效,可以避免内存拷贝,“结构较大” 到底多大才算大可能需要自己或团队衡量,如超过 5 个字段或者根据结构体内存占用来计算如果要修改结构体内部的数据或状态必须使用指针如果方法的receiver是map、slice 、channel等引用类型不要使用指针小数据类型如 bool、int 等没必要使用指针传递如果该函数会修改receiver或变量等,使用指针...转载 2021-07-02 15:24:58 · 250 阅读 · 0 评论 -
Go中写C代码
package main/* #include <stdio.h> #include <stdlib.h> void c_print(char *str) { printf("%s\n", str);}*/import "C"import "unsafe" //import “C” 必须单起一行,并且紧跟在注释行之后func main() { s := "Hello Cgo" cs := C.CString(s)原创 2021-03-10 01:14:52 · 1001 阅读 · 0 评论 -
Go如何同Java一样使用BigDecimal进行精确的浮点数计算?
背景最近在写go,遇到一个问题,go没有自带的decimal类型,只有一个math/big用于大数运算。遇到购物支付的场景,这时候使用浮点数计算非常有必要,而且通常都是精确到小数点后两位。查阅了一些资料,找到了一个start数比较高的解决方案。shopspring/decimal: https://github.com/shopspring/decimal文档地址: https://pkg.go.dev/github.com/shopspring/decimal需要注意的是: Decimal库原创 2021-08-10 17:07:47 · 3147 阅读 · 0 评论 -
Go语言 内存逃逸
逃逸分析的作用是什么呢?逃逸分析的好处是为了减少gc的压力,不逃逸的对象分配在栈上,当函数返回时就回收了资源,不需要gc标记清除。逃逸分析完后可以确定哪些变量可以分配在栈上,栈的分配比堆快,性能好(逃逸的局部变量会在堆上分配 ,而没有发生逃逸的则有编译器在栈上分配)。同步消除,如果你定义的对象的方法上有同步锁,但在运行时,却只有一个线程在访问,此时逃逸分析后的机器码,会去掉同步锁运行。总结堆上动态分配内存比栈上静态分配内存,开销大很多。变量分配在栈上需要能在编译期确定它的转载 2021-07-02 18:06:17 · 162 阅读 · 0 评论 -
Gin开发记录之封装返回实体对象
package vo// 返回的对象type Result struct { Code int `json:"code"` Msg string `json:"msg"` Data interface{} `json:"data"`}// 封装成功返回的对象func Success(data interface{}) *Result { return &Result{ Code: 1, Msg: "success", Data: dat原创 2021-07-01 22:22:39 · 1336 阅读 · 0 评论 -
Golang | 设置go get 国内镜像,速度更快
Goproxy 中国官网:https://goproxy.cn/GitHub:https://github.com/goproxy/goproxy.cn用法Go 1.13 及以上(推荐)打开你的终端并执行$ go env -w GO111MODULE=on$ go env -w GOPROXY=https://goproxy.cn,direct完成。macOS 或 Linux打开你的终端并执行$ export GO111MODULE=on$ export GOPROXY=http.原创 2020-07-28 11:44:45 · 20057 阅读 · 2 评论 -
golang | 时间字符转和时间戳之间的转换
package utilimport "time"// 获取当前时间戳func GetNowUnix() int64 { return time.Now().Unix()}// 获取当前时间(字符串)func GetNowTime() time.Time { return time.Now()}// 时间(字符串)转时间戳func TimeToUnix(str string) int64 { // go语言固定日期模版 timeLayout := "2006-01-02 1原创 2020-12-12 20:10:28 · 407 阅读 · 0 评论 -
Go for index,item := range arr 遍历数组并修改元素值的坑
众所周知,Go可以自动内存管理,但是它保留了指针,这就要求我们在写修改值得时候的时候注意指针的问题。Go中遍历数组的方式为// 错误的方式for index, item := range arr { item.Name = "修改后的值"}// 正确的方式for index, item := range arr { arr[index].Name = "修改后的值"}通过下标来找到数组内的对象,然后才能修改成功。原因是通过range方式遍历的数组,arr[index] 和 item原创 2021-07-15 14:17:56 · 702 阅读 · 0 评论 -
基于cgo的sqlite3替代品
go-sqlite3替代品原创 2023-02-15 11:22:17 · 704 阅读 · 0 评论 -
Go实现Linux命令行操作
// ExecCommand 运行命令并实时查看运行结果func ExecCommand(command string) error { cmd := exec.Command("bash", "-c", command) stdout, _ := cmd.StdoutPipe() stderr, _ := cmd.StderrPipe() if err := cmd.Start(); err != nil { log.Println("Error:The command is err:原创 2021-07-08 18:03:06 · 1730 阅读 · 0 评论 -
Go语言命名规范
包名称包名应该为小写单词,不要使用下划线或者混合大小写。package domainpackage main文件命名应该为小写单词,使用下划线分隔各个单词。approve_service.go结构体命名采用驼峰命名法,首字母根据访问控制大写或者小写struct 申明和初始化格式采用多行,例如下面:type MainConfig struct { Port string `json:"port"` Address string `json:"address"`}co转载 2021-07-02 10:10:17 · 646 阅读 · 0 评论 -
通过一个简单的Demo快速入门gRPC
gRPC快速入门原创 2022-08-23 20:09:14 · 335 阅读 · 0 评论