
Go语言学习日记
没枕头我咋睡觉
邮箱 pillowsleep@163.com
展开
-
go语言学习日记【三十四】golang中并发详解
有人把 Go 比作 21 世纪的 C 语言,第一是因为 Go 语言设计简单,第二,21 世纪最重要的就是并行程序设计,而 GO 从语言层面就支持了并行。原创 2022-11-18 16:11:29 · 561 阅读 · 0 评论 -
go语言学习日记【三十三】golang中interface详解
Go 语言里面设计最精妙的应该算 interface,它让面向对象,内容组织实现非常的方便,当我们认真了解interface后,就会被 interface 的巧妙设计所折服。原创 2022-11-16 10:56:11 · 1688 阅读 · 0 评论 -
Go语言学习日记【三十二】golang代码错误处理【error,defer,recover】
代码异常处理是学习任何编程语言都需要考虑的一个重要话题。比如C++,python都引入exception的概念和try_catch try_except的引入。golang自然也有自己独特的异常处理方式。漂亮的异常处理方式也是golang语言最大的亮点之一,下面重点解析一下golang错误处理方式。原创 2022-09-06 11:25:36 · 1268 阅读 · 16 评论 -
Go语言学习日记【三十一】golang与pgsql交互
通过读取配置文件获取pgsql用户名和密码及数据库和数据表,从而读取所需字段值原创 2022-07-21 09:18:14 · 1641 阅读 · 3 评论 -
Go语言学习日记【三十】golang的值传递与引用传递
一、golang数据类型基础数据类型:字符串、数字、数组、布尔类型引用数据类型:切片、map类型、函数、接口、channel类型复合数据类型:结构体、数组、二、golang值传递1、golang默认是值传递,即拷贝传递;2、有些值天生就是指针,如(切片,map类型)三、函数示例package mainimport "fmt"func main() { mapdata := make(...原创 2022-05-27 13:40:16 · 907 阅读 · 0 评论 -
Go语言学习日记【二十九】golang切片操作
package mainimport "fmt"func main() { initSlice := []int{1,2,3,4,5,6} copySlice := make([]int,6) copy(copySlice,initSlice) fmt.Println("-------copy slice:",copySlice) tmpSlice1 := initSlice[:3] tmpSlice1[0] = 3 fmt.Println("-----.原创 2022-05-07 10:43:50 · 425 阅读 · 0 评论 -
Go语言学习日记【二十八】 golang的数字运算
一、数字字符串转化为int64func strToInt64(str string) int64 { int64Data, _ :=strconv.ParseInt(str, 10, 64) return int64Data}二、小数字符串转化为float64func strToFloat64(str string) float64 { float64Data, _ :=strconv.ParseFloat(str, 64) return float64D原创 2022-04-20 10:20:12 · 841 阅读 · 1 评论 -
Go语言学习日记【二十七】golang调用shell持续输出命令,实时输出并在特定条件下终止
package mainimport ( "bufio" "context" "fmt" "io" "os/exec" "strings" "sync")func main() { ctx, cancel := context.WithCancel(context.Background()) Command(ctx,cancel, "tail -f -n 1 test.log")}func Command(ctx.原创 2022-03-29 15:43:52 · 1194 阅读 · 0 评论 -
Go语言学习日记【二十六】golang正则语句整理收集
package mainimport ( "fmt" "regexp")func main() { // ############################################ s := " 454 bytes/s" re := regexp.MustCompile(` ([\d]+) bytes/s`) params := re.FindStringSubmatch(s) fmt.Println(params[1]) // 454 // ########.原创 2022-03-25 10:58:05 · 346 阅读 · 0 评论 -
Go语言学习日记【二十五】golang格式化输出字符串左右对齐
package mainimport "fmt"func main() { fmt.Printf("%-40s\t%s\n","aaaaaaaaaaaaaaaaaa","a") fmt.Printf("%-40s\t%s\n","bb","b")}原创 2022-03-10 15:12:57 · 1356 阅读 · 0 评论 -
Go语言学习日记【二十四】将字符串中连续多个空格压缩为一个
package mainimport ( "fmt" "regexp")func main() { oldstr := "I have a world" fmt.Println(oldstr) newstr := DeleteExtraSpace(oldstr) fmt.Println(newstr)}//删除字符串中的多余空格,有多个空格时,仅保留一个空格func DeleteExtraSpace(s string) string { .原创 2022-01-06 10:57:09 · 1311 阅读 · 0 评论 -
Go语言学习日记【二十三】监控linux系统cpu使用率与空置率
package mainimport ( "fmt" "math" "time" sigar "github.com/elastic/gosigar")type Monitor struct { lastSample *sigar.Cpu}type Percentages struct { User float64 System float64 Idle float64 IOWait float64 IRQ float64 Nice .原创 2021-11-25 09:19:41 · 612 阅读 · 0 评论 -
Go语言学习日记【二十二】定时器时间重置
package mainimport ( "fmt" "time")func main() { // 设置定时时间 DurationOfTime:= time.Duration(3) * time.Second // 定义定时器 timer := time.AfterFunc(DurationOfTime,PrintLine) defer timer.Stop() go func() { i := 0 for { fmt.Println("----",i) .原创 2021-11-22 17:09:56 · 483 阅读 · 0 评论 -
Go语言学习日记【二十一】获取键盘输入的几种方式
一、界面不显示输入内容package mainimport ( "golang.org/x/crypto/ssh/terminal" "os" "fmt")func main(){ tmp,_ := terminal.ReadPassword(int(os.Stdin.Fd())) word := string(tmp) fmt.Println("---",word)}二、界面显示输入内容package main原创 2021-10-23 09:36:50 · 882 阅读 · 0 评论 -
Go语言学习日记【二十】将json格式字符串转化为key=value格式
package mainimport ( "encoding/json" "fmt")func main() { // 生成map格式字符串 ma1 := make(map[string]interface{}) ma2 := make(map[string]interface{}) ma3 := make(map[string]interface{}) ma4 := make(map[string]interface{}) ma1["a1"] = ma2 ma1["a.原创 2021-09-10 21:54:41 · 1060 阅读 · 0 评论 -
Go语言学习日记【十九】GUI入门-andlabs/ui库
功能说明:1、通过该库实现了文本输入2、通过该库实现了按键点击3、通过该库实现了文本展示4、通过该库实现了多行说明代码展示:package mainimport ( "crypto/md5" "encoding/hex" "github.com/andlabs/ui" _ "github.com/andlabs/ui/winmanifest" "time")var explain string = ...原创 2021-08-18 21:32:55 · 689 阅读 · 2 评论 -
Go语言学习日记【十八】golang中context包简介与使用
package mainimport ( "context" "fmt" "sync" "time")func main() { wg := sync.WaitGroup{} ctx, cancel := context.WithCancel(context.Background()) wg.Add(1) go func(){ defer wg.Done() err := job1(ctx) if err != nil { fmt.Println("job1.原创 2021-07-22 19:39:26 · 410 阅读 · 2 评论 -
Go语言学习日记【十七】实时监测文件新增内容并处理
package mainimport ( "fmt" "time" "github.com/hpcloud/tail" "os/exec" "regexp" "strings")func main() { fileName := "/var/log/sftp.log" config := tail.Config{ ReOpen: true, ...原创 2021-07-17 09:58:47 · 632 阅读 · 0 评论 -
Go语言学习日记【十六】go语言实现通过netlink监控usb热插拔
package mainimport ( "fmt" "syscall" "strings" "github.com/kr/pretty")func main() { l, _ := ListenNetlink() for { _, err := l.ReadMsgs() if err != nil { .原创 2021-06-09 23:18:03 · 2875 阅读 · 3 评论 -
Go语言学习日记【十五】判断目标路径是否存在
package mainimport ( "os" "fmt" "path/filepath" "strings")func main() { aSlice := []string{"./*","/root/tesst/bbb.txt"} getFilePath(aSlice) }func getFilePath(args []string) []string { outSlice := make([]string,0) .原创 2021-06-03 21:31:08 · 250 阅读 · 0 评论 -
Go语言学习日记【十四】go返回路径中文件名和目录
一、dirnamefunc getaDirName(str string) string { if strings.HasSuffix(str,"/") { newDir := str[:len(str)-1] fmt.Println(newDir) return newDir } else { dirSlice := strings.Spli原创 2021-06-03 21:28:58 · 378 阅读 · 0 评论 -
Go语言学习日记【十三】GOLANG调用SHELL命令
package mainimport ( "os/exec" "fmt" "os" "strings")func main() { var path []byte var err error var cmd *exec.Cmd path := `/root/tool` str := fmt.Sprintf("cd %s;pwd",path) fmt.Println(str) cmd = exec.Comman.原创 2021-06-03 21:22:38 · 1117 阅读 · 0 评论 -
Go语言学习日记【十二】beego框架的安装及报错处理
一、下载安装 1、安装beego包go get github.com/astaxie/beego 2、安装bee工具 go get github.com/beego/bee二、错误处理git https 无法获取时,请配置本地的 git,关闭 https 验证git config --global http.sslVerify false 出现dial tcp 172.217.160.113:443: connect: connection refus...原创 2021-05-11 17:10:20 · 747 阅读 · 0 评论 -
Go语言学习日记【十一】Go语言读取文件
一、按行读取package mainimport ( "bufio" "fmt" "os")func main() { f,err := os.Open("./test.txt") if err != nil { fmt.Println(err.Error()) } r := bufio.NewReader(f) for { s,err := r.ReadString('\n') fmt.Println(s) if err != nil { fmt.P原创 2021-05-08 11:11:29 · 166 阅读 · 0 评论 -
Go语言学习日记【十】 go get常见错误处理方法
go get 命令 借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。整个过程就像安装一个 App 一样简单。 参数介绍:-d 只下载不安装 -f 只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用 -fix 在获取源码之后先运行 fix,然后再去做其他的事情 -t 同时也下载需要为运行测试所需要的包 -u 强制使用网络去更新包和它的依赖包 -v 显示执行的命令...原创 2021-04-12 22:51:35 · 1489 阅读 · 0 评论 -
Go语言学习日记【九】监听键盘输入并可通过上下键进行查看历史输入
package mainimport ( "fmt" "github.com/eiannone/keyboard")/*脚本运行系统:linux按字母键进行命令输入回车键换行上下键查看历史命令其余键无效*/func main(){ keysEvents,err := keyboard.GetKeys(10) if err != nil { panic(err) } defer func(){ _ = keyboard.Close() }() fmt..原创 2021-03-05 16:26:17 · 2078 阅读 · 0 评论 -
Go语言学习日记【八】go语言设置延时命令执行
package mainimport ( "fmt" "time")func main() { nowTime := time.Now() fmt.Println(nowTime) // 第一种定时器 time.Sleep(time.Second * 2) nowTime = time.Now() fmt.Println(nowTime) // 创建第二种定时器 timeC := time.NewTimer(time.Second *2) nowTime = <- t.原创 2021-01-21 15:53:22 · 456 阅读 · 0 评论 -
Go语言学习日记【七】go语言并发
一、go语言并发 在go语言中,go 允许使用 go 语句开启一个新的运行期线程, 即 goroutine,以一个不同的、新创建的 goroutine 来执行一个函数。 同一个程序中的所有 goroutine 共享同一个地址空间。代码示例package mainimport ( "fmt" "time")func say(s string) { for i := 0; i < 5; i++ { ...原创 2020-12-23 11:05:20 · 292 阅读 · 0 评论 -
Go语言学习日记【六】go语言读写文件操作
一、创建文件package mainimport ( "fmt" "os")func main(){ f,err := os.Create("test.txt") if err != nil { fmt.Println("create file err!") return } defer f.Close() fmt.Println("Create File Successful!")}二、写文件/*1、 按字符串写入文件2、 按位置写入内容3.原创 2020-12-18 12:44:55 · 256 阅读 · 0 评论 -
Go语言学习日记【五】Flag包的使用
一、作用 flag包实现了对命令行参数的解析二、示例 flag.string(),flag.int()等函数注册flag,下例声明了一个整数flag,解析结果保存在*int指针ip里: import "flag"var ip = flag.Int("flagname", 1234, "help message for flagname") 当然,我们也可以把flag绑定到一个变量,使用Var系列函数:var f...原创 2020-12-04 15:39:05 · 363 阅读 · 0 评论 -
Go语言学习日记【四】 go下载包出现connect: connection refused错误
linux解决方法: 设置go代理export GOPROXY=https://goproxy.io参考链接:https://blog.youkuaiyun.com/hhyukJae/article/details/106980818原创 2020-11-03 14:00:00 · 1839 阅读 · 0 评论 -
Go语言学习日记【三】【Winodws下golang多版本管理】
一、安装包下载地址: 地址:https://github.com/voidint/g/releases/tag/v1.2.0 直接解压后,文件夹下面只有g.exe一个文件,将路径加入到环境变量的PATH下 执行 g -version 显示如下界面表明配置成功。二、使用 1:打开环境变量,配置一下几个变量 G_MIRROR=https://golang.google.cn/dl/ # 避免使用默认网站出现连接超时的情况 G_H...原创 2020-10-22 13:46:38 · 270 阅读 · 0 评论 -
Go语言学习日记【二】【指针】
<一> 指针的概述 1 指针是存储另一个变量内存地址的变量 变量是一种使用方便的占位符,变量都指向计算机的内存地址。 一个指针变量可以指向任何一个值的内存地址 变量b的值为156,存储的内存地址为0x104a124,变量a持有变量b的内存地址,则被认为变量a指向b 。 2 获取变量的地址 Go语言中使用取地址符&,如果一个变量前使用&,则返回该变量的地址。在go语言中,指针不能参与运算。<二>...原创 2020-09-13 10:51:16 · 207 阅读 · 0 评论 -
Go语言学习日记【一】【匿名函数实现操作封装】
package mainimport ( "flag" "fmt")var skillParam = flag.String("skill", "", "skill to perform")func main() { flag.Parse() //定义map函数 var skill = map[string]func(){ "fire": func() { fmt.Println("chicken fire") }, "run": func() { fmt.原创 2020-09-08 15:31:35 · 255 阅读 · 0 评论