Go语言知识点总结
Go语言知识点总结
目录
Go语言开发文档:https://studygolang.com/pkgdoc
GO语言中文网:https://studygolang.com/
深度开源:https://www.open-open.com/
KanCloud看云:https://www.kancloud.cn/
Go资料:https://studygolang.com/articles/1450?fr=sidebar
个人资料:https://pan.baidu.com/s/1O9RLHCW9FXglYCRHWIslLA 密码:ebg8
Go-开发环境
1 | GoLand IDE:<a href= "https://www.jetbrains.com/go/" target= "_blank" rel= "noopener nofollow" >https://www.jetbrains.com/go/</a><br>IDE破解:<a href= "https://www.cnblogs.com/-wenli/p/10739315.html" target= "_blank" >https://www.cnblogs.com/-wenli/p/10739315.html</a> |

文件相关快捷键: CTRL+E,打开最近浏览过的文件。 CTRL+SHIFT+E,打开最近更改的文件。 CTRL+N,可以快速打开struct结构体。 CTRL+SHIFT+N,可以快速打开文件。 代码格式化: CTRL+ALT+T,可以把代码包在一个块内,例如if{…}else{…}。 CTRL+ALT+L,格式化代码。 CTRL+空格,代码提示。 CTRL+/,单行注释。CTRL+SHIFT+/,进行多行注释。 CTRL+B,快速打开光标处的结构体或方法(跳转到定义处)。 CTRL+“+/-”,可以将当前方法进行展开或折叠。 查找和定位 CTRL+R,替换文本。 CTRL+F,查找文本。 CTRL+SHIFT+F,进行全局查找。 CTRL+G,快速定位到某行。 代码编辑 ALT+Q,可以看到当前方法的声明。 CTRL+Backspace,按单词进行删除。 SHIFT+ENTER,可以向下插入新行,即使光标在当前行的中间。 CTRL+X,删除当前光标所在行。 CTRL+D,复制当前光标所在行。 ALT+SHIFT+UP/DOWN,可以将光标所在行的代码上下移动。 CTRL+SHIFT+U,可以将选中内容进行大小写转化。
Go-语言基础
Go-标准库
1.os库使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package main import ( "fmt" "os" ) func main(){ //获得当前工作目录:默认当前工程目录 dir,err := os.Getwd() fmt.Print(dir) fmt.Print(err) //获得指定环境变量 //paths := os.Getenv(key:"Path") //goroot := os.Getenv(key:"GOROOT") //fmt.Print(paths) //fmt.Print(goroot) //修改文件访问时间和修改时间 //err2 := os.Chtimes( // name:"", // time.Now().AddDate(years:-1,months:0,days:0) // ) //获得所有环境变量 envs := os.Environ() for _,env := range envs{ fmt.Print(env) } //在网络中的主机名 hostname,err := os.Hostname() if err == nil { fmt.Print(hostname) } else { fmt.Print( "出错了" ) } //获得系统的临时文件夹路径:临时数据的保存路径 fmt.Print(os.TempDir()) //判断某字符是否路径分隔符 fmt.Print( "//是路径分隔符吗?" ,os.IsPathSeparator( '\\' )) //fmt.Print("\\是路径分隔符吗?",os.IsPathSeparator(c:'\')) fmt.Print( "$是路径分隔符吗?" ,os.IsPathSeparator( '\\' )) //fmt.Print(os.IsPathSeparator(c:'\\')) //fmt.Print(os.IsPathSeparator(c:'$')) //获得文件信息 fileInfo,err := os.Stat( "C:/users/..." ) if err == nil { fmt.Print(fileInfo) } else { fmt.Print( "出错了" ) } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | 01: 获取当前时间 dateTime := time.Now() fmt.Println(dateTime) 02: 获取年 月 日 时 分 秒 纳秒 year := time.Now().Year() //年 fmt.Println(year) month := time.Now().Month() //月 fmt.Println(month) day := time.Now().Day() //日 fmt.Println(day) hour := time.Now().Hour() //小时 fmt.Println(hour) minute := time.Now().Minute() //分钟 fmt.Println(minute) second := time.Now().Second() //秒 fmt.Println(second) nanosecond := time.Now().Nanosecond() //纳秒 fmt.Println(nanosecond) 03: 获取当前时间戳 timeUnix := time.Now().Unix() //单位秒 timeUnixNano := time.Now().UnixNano() //单位纳秒 fmt.Println(timeUnix) fmt.Println(timeUnixNano) 04: 将时间戳格式化 fmt.Println(time.Now().Format( "2006-01-02 15:04:05" )) 05: 时间戳转为 go 格式的时间 var timeUnix int64 = 1562555859 fmt.Println(time.Unix(timeUnix,0)) // 之后可以用Format 比如 fmt.Println(time.Unix(timeUnix, 0).Format( "2006-01-02 15:04:05" )) 06: str格式化时间转时间戳 t := time.Date(2014, 1, 7, 5, 50, 4, 0, time.Local).Unix() fmt.Println(t) 时间的计算 01: 获取今天0点0时0分的时间戳 currentTime := time.Now() startTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 0, 0, 0, 0, currentTime.Location()) fmt.Println(startTime) fmt.Println(startTime.Format( "2006/01/02 15:04:05" )) 02: 获取今天23:59:59秒的时间戳 currentTime := time.Now() endTime := time.Date(currentTime.Year(), currentTime.Month(), currentTime.Day(), 23, 59, 59, 0, currentTime.Location()) fmt.Println(endTime) fmt.Println(endTime.Format( "2006/01/02 15:04:05" )) 03: 获取1分钟之前的时间 m, _ := time.ParseDuration( "-1m" ) result := currentTime.Add(m) fmt.Println(result) fmt.Println(result.Format( "2006/01/02 15:04:05" )) 04: 获取1小时之前的时间 m, _ := time.ParseDuration( "-1h" ) result := currentTime.Add(m) fmt.Println(result) fmt.Println(result.Format( "2006/01/02 15:04:05" )) 05: 获取1分钟之后的时间 m, _ := time.ParseDuration( "1m" ) result := currentTime.Add(m) fmt.Println(result) fmt.Println(result.Format( "2006/01/02 15:04:05" )) 06: 获取1小时之后的时间 m, _ := time.ParseDuration( "1h" ) result := currentTime.Add(m) fmt.Println(result) fmt.Println(result.Format( "2006/01/02 15:04:05" )) 07 :计算两个时间戳 afterTime, _ := time.ParseDuration( "1h" ) result := currentTime.Add(afterTime) beforeTime, _ := time.ParseDuration( "-1h" ) result2 := currentTime.Add(beforeTime) m := result.Sub(result2) fmt.Printf( "%v 分钟 \n" , m.Minutes()) h := result.Sub(result2) fmt.Printf( "%v小时 \n" , h.Hours()) d := result.Sub(result2) fmt.Printf( "%v 天\n" , d.Hours()/24) 08: 判断一个时间是否在一个时间之后 stringTime, _ := time.Parse( "2006-01-02 15:04:05" , "2019-12-12 12:00:00" ) beforeOrAfter := stringTime.After(time.Now()) if true == beforeOrAfter { fmt.Println( "2019-12-12 12:00:00在当前时间之后!" ) } else { fmt.Println( "2019-12-12 12:00:00在当前时间之前!" ) } 09: 判断一个时间相比另外一个时间过去了多久 startTime := time.Now() time.Sleep(time.Second * 5) fmt.Println( "离现在过去了:" , time.Since(startTime)) |
2.命令行解析
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | package main import ( "flag" "fmt" "os" ) //先编译 go build -o args.exe args_test.go //执行 args.exe -name .. func main() { //第一种 //获取命令行参数 //fmt.Print(os.Args) for i,v := range os.Args{ fmt.Print(i,v) } //第二种 //自定义命令行参数 //定义参数 //String代表获取的参数类型为字符串,参数的名字为-name,值默认为空,usage为提示 namePtr := flag.String( "name" , "" , "姓名" ) agePtr := flag.Int( "age" ,18, "年龄" ) rmbPtr := flag.Float64( "rmb" ,10000, "资产" ) alivePtr := flag.Bool( "alive" ,true, "是否健在" ) //解析获取参数,丢入参数的指针中 flag.Parse() fmt.Print(*namePtr,*agePtr,*rmbPtr,*alivePtr) //第三种 //var name *string 这里在栈里面占了名字,但是没有分配内存空间,所以没有地址 // //flag.StringVar(name,"name", "", "姓名") var name string //这里是有地址的 var age int var rmb float64 var alive bool flag.StringVar(&name, "name" , "" , "姓名" ) flag.IntVar(&age, "age" ,18, "年龄" ) flag.Float64Var(&rmb, "rmb" ,10000, "资产" ) flag.BoolVar(&alive, "alive" ,true, "是否健在" ) flag.Parse() fmt.Print(name,age,rmb,alive) } |
3.time库使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package main import ( "time" "fmt" ) func main(){ //本地时间 nowTime := time.Now() //年月日 year := nowTime.Year() fmt.Printf( "%s" ,year) month := nowTime.Month() fmt.Printf( "%s" ,month) y,m,d := nowTime.Date() fmt.Printf( "%d:%d:%d" ,y,m,d) //周月年中的第几天 day := nowTime.Day() fmt.Printf( "%d" ,day) yearDay := nowTime.YearDay() fmt.Printf( "%d" ,yearDay) weekDay := nowTime.Weekday() fmt.Printf( "%d" ,weekDay) //时分秒 fmt.Printf( "%s" ,nowTime.Hour()) fmt.Printf( "%s" ,nowTime.Minute()) fmt.Printf( "%s" ,nowTime.Second()) fmt.Printf( "%s" ,nowTime.Nanosecond()) //创建时间 date := time.Date(2019,time.September,8,15,0,0,0,time.Now().Location()) fmt.Printf( "%s" ,date) //Add方法和Sub方法是相反的 //获取t0和t1的时间距离d是使用Sub //将t0加d获取t1就是使用Add方法 now := time.Now() //一天之前 duration,_ := time.ParseDuration( "-24h0m0s" ) fmt.Printf( "%s" ,now.Add(duration)) //一周之前 fmt.Printf( "%s" ,now.Add(duration * 7)) //一月之前 fmt.Printf( "%s" ,now.Add(duration * 30)) //计算时间差 fmt.Printf( "%s" ,now.Sub(now.Add(duration))) } |
Go-面向对象
Go-并发
Go-数据库
Go-web框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?