# goLang笔记
初始安装之后 GOPATH:
Go开发相关的环境变量如下:
GOROOT:**GOROOT**就是**Go的安装目录**,(类似于java的JDK)
GOPATH:**GOPATH**是我们的**工作空间**,保存go项目代码和第三方依赖包
GOPATH可以设置多个,其中,第一个将会是默认的包目录,使用 go get 下载的包都会在第一个path中的src目录下,使用 go install时,在哪个GOPATH中找到了这个包,就会在哪个GOPATH下的bin目录生成可执行文件
go在编写之后要运行:
以run file 的方式运行
![1691735540105](.\pic\1691735540105.png)
以run directory 方式运行
![1691736368661](.\pic\1691736368661.png)
但是运行时会有下面的警告
go: go.mod file not found in current directory or any parent directory; see 'go help modules'
在go新版本时默认开启了go module,因此需要有go.mod来管理go代码中需要的依赖;
终端进入工作目录后 go mod init ,此时会生成一个go.mod文件
![1691737242237](.\pic\1691737242237.png)
## go mod 命令指南
所有go命令都内置了对模块的支持,
不只是“mod”。例如,日常的添加、删除、升级,并且应该使用“go get”来降级依赖。
`go mod init # 初始化go.mod`
`go mod tidy # 更新依赖文件`
`go mod download # 下载依赖文件`
`go mod vendor # 将依赖转移至本地的vendor文件`
`go mod edit # 手动修改依赖文件`
`go mod graph # 打印依赖图`
`go mod verify # 校验依赖`
### go mod 命令详解
`go mod init projectname`
以模块的方式初始化一个项目
`go mod tidy`
添加缺失的依赖,或者移除未被使用的依赖,一般在创建项目之后或者在添加新的依赖之后执行该命令;
# go中的函数
go中的函数可以作为值进行传递,支持匿名函数和闭包
## 定义函数
定义一个函数类型--作为统一的传递参数
```go
/*
定义一个函数类型
*/
type funcDemo func(int) bool
func isOdd(num int) bool {
if num%2 == 0 {
return true
} else {
return false
}
}
func filterOdd(slice []int, f funcDemo) []int {
var result []int
for _, i2 := range slice {
if f(i2) {
result = append(result, i2)
}
}
return result
}
func filterEven(slice []int, f funcDemo) []int {
var result []int
for _, i2 := range slice {
if !f(i2) {
result = append(result, i2)
}
}
return result
}
func isEven(num int) bool {
if num%2 != 0 {
return true
} else {
return false
}
}
func main() {
demo := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
odd := filterOdd(demo, isOdd)
even := filterEven(demo, isEven)
for _, i2 := range odd {
fmt.Printf("%d 、", i2)
}
fmt.Println()
for _, i2 := range even {
fmt.Printf("%d 、", i2)
}
}
```
## 匿名函数
匿名函数作为回调函数
```go
func visit(list []float64, f func(f float64) float64) {
for _, value := range list {
fmt.Println(f(value))
}
}
func sqrNum(num float64) float64 {
return math.Sqrt(num)
}
func main() {
list := []float64{1, 4, 9, 16, 25, 36}
visit(list, sqrNum)
}
```
在定义时就调用匿名函数和将匿名函数赋值给变量
```go
func main11() {
dt := func(data int) int {
return data
}(100)
printData(dt)
}
func printData(s int) {
fmt.Println(s)
}
```
## 闭包
闭包就是由函数和其相关的引用环境组合而成的实体~**函数+引用环境=闭包**
一个函数就是一个实例,而闭包在运行时可以有多个实例,不同的引用环境和相同的引用组合可以产生不同的的实例;
```go
func main() {
num := countEvenNum()
for i := 0; i < 10; i++ {
fmt.Println(num(i))
}
fmt.Println("----------------------------")
for i := 0; i < 10; i++ {
fmt.Println(num(i))
}
}
func countEvenNum() func(int) int {
var num = 0
return func(i int) int {
if i%2 != 0 {
num += i
}
return num
}
}
```
闭包捕获了和他在同一作用域的其他变量和常量,所以闭包在任何地方被调用都会使用这些常量/变量,而不关心这些变量/常量已经超出作用域;
## 可变参数
可变参数~这点跟java一样--略
递归函数
```go
//使用递归函数实现
/**
num + num-1 直到 num=1时停止
*/
func DiG(num int) int {
if num == 1 {
return 1
}
return num + DiG(num-1)
}
func main() {
fmt.Println(DiG(10))
}
```
# go中的指针
> go中的指针最大的特点是:指针不能运算~即指针不能移动
**获取取地址 &** ~获取变量的地址
**获取取值 *** ~访问指针变量中指向地址的值
## 声明指针/使用指针
## 将基本数据类型的值作为函数参数,可以实行对传入数据的修改
```go
/*
*
i *int 指向int的指针
*/
func ptrd(i *int) {
*i = 90
}
var s *int
func main() {
i := 100
fmt.Println(i)
ptrd(&i)
fmt.Println(i)
//s指向i
s = &i
//空指针~nil
if s != nil {
fmt.Println(s)
//取其值
fmt.Println(*s)
}
}
```
指针数组
```go
func main() {
str := []string{"h", "e", "l"}
var ptr [3]string
for i := 0; i < len(ptr); i++ {
ptr[i] = str[i]
}
for _, value := range ptr {
fmt.Printf("%T--->%v \n", value, value)
}
}
```
指针的指针
```
/*
*
指针的指针
第一个指针存放的第二个指针的地址
第二个指针存放的变量的地址
*/
func pointer() {
var ptr *int
var pptr **int
fmt.Printf("%T \n", ptr)
a := 2345
ptr = &a
pptr = &ptr
fmt.Println(ptr)
fmt.Println(pptr)
fmt.Println()
fmt.Printf("指针变量--%d \n", *ptr)
fmt.Printf("指针的指针--%d \n", *pptr)
fmt.Printf("指针的指针的值--%d", **pptr)
}
func main() {
pointer()
}
```
go中slice map ,chan作为参数传递时都传的是指针
练习题:
1,使用递归实现n!
```go
func DGJC(num int) int {
if num == 1 {
return 1
}
return num * DGJC(num-1)
}
func main() {
fmt.Println(DGJC(5))
}
```
2,使用闭包函数实现斐波那契数列,并输出前十个
```go
//2,使用闭包函数实现斐波那契数列,并输出前十个
func FBNQ() func() int {
var a int = 0
var b int = 1
return func() int {
c := a
a = b
b = a + c
return c
}
}
func main() {
f := FBNQ()
for i := 0; i < 10; i++ {
fmt.Println(f())
}
}
```
# go中容器
**数组**
```go
func numData() {
//生明数组
var arr []int
arr = []int{1, 2, 3, 4, 5, 7}
//自动推断数组的长度
arrlist := [...]int{1, 2, 3, 4, 56, 0}
fmt.Println(len(arrlist))
fmt.Println("------------------")
for _, i2 := range arr {
fmt.Println(i2)
}
fmt.Println(len(arr))
//将数组切分
arr2 := arr[2:3]
fmt.Println(arr2)
}
```
多维数组
```go
func mutiNumData() {
//一个多维数组
var arr [3][4]int
arr = [3][4]int{
{1, 2},
{3, 4},
{5, 6, 7},
}
fmt.Println(arr)
fmt.println(arr[1][2])//访问方式
}
```
三维数组,四维数组不在概述,一般很少用到
> 数组是值类型,在作为参数传递时,会将原数组复制一份分配给新变量,对新变量的修改不会影响到旧变量,而对于切片 map chan,由于传递的是地址,所以会影响到旧变量本身
```go
func mdata(a [10]int) {
a[0] = 100
}
func main() {
var a [10]int
for i := 9; i > 0; i-- {
a[i] = i
}
mdata(a)
fmt.
没有合适的资源?快使用搜索试试~ 我知道了~
goLang笔记+beego框架
共331个文件
go:19个
sample:14个
tpl:5个
1 下载量 3 浏览量
2023-09-06
11:18:37
上传
评论
收藏 157.79MB ZIP 举报
温馨提示
Beego: bee 工具是一个为了协助快速开发 beego 项目而创建的项目,通过 bee 您可以很容易的进行 beego 项目的创建、热编译、开发、测试、和部署。 简单化:RESTful 支持、MVC 模型,可以使用 bee 工具快速地开发应用,包括监控代码修改进行热编译、自动化测试代码以及自动化打包部署。 智能化:支持智能路由、智能监控,可以监控 QPS、内存消耗、CPU 使用,以及 goroutine 的运行状况,让您的线上应用尽在掌握。 模块化:beego 内置了强大的模块,包括 Session、缓存操作、日志记录、配置解析、性能监控、上下文操作、ORM 模块、请求模拟等强大的模块,足以支撑你任何的应用。 高性能:beego 采用了 Go 原生的 http 包来处理请求,goroutine 的并发效率足以应付大流量的 Web 应用和 API 应用,目前已经应用于大量高并发的产品中。
资源推荐
资源详情
资源评论
收起资源包目录
goLang笔记+beego框架 (331个子文件)
008541bf4b8c96d01cc563919341e40d46ab82 192B
00fe9d6a0dd7118c5dc3b5af5f0cb563aece42 1KB
0109e68eae964f0a2f0d112eca9834f4045bba 472B
024bae5dc428d12286ffda21f0fb71181bd551 10KB
05e0828439a1b03730c4844680d0f2c883a9b6 116B
06779a7b9e186859c71ca4b1b893ff3c17032b 1KB
06b474333421c8d6b61180e215b6f1b7b8830e 99B
07ae7db9f82425526a5efc8bc652f2639f0659 535B
07fa540f5060b53b4e3ee2c62fcdfb69e8b619 712B
09a5288eb2d931630208582bee29ee899bfcce 162B
09ffcd9b3a1a65cf0b7dbc6deeb48092b76d8b 54B
0cc301ea8e6e16b4a59cfeebe341eec910631d 10.4MB
0f01406fa44eeec191583f845899641d400179 609B
0fa6967a081af26f89707d6ef7249a11ce4bc3 274B
10a2f122cbdfb16f6c086e6816a258408b923b 168B
1118e7944c7abadfab94f6f243d4ae0ce0b0ce 10KB
115b73c54ddcc7c5e90ae872ce7ff8b223b67e 10.44MB
11957526d331f726a8ba61f904e923f88e4359 138B
1284144ffb357b3e66ae04d3a275caad9425a7 54B
12ed252de17362f0d5ab6f68597d04f9ee64da 172B
12fd32167dc1abc2f1f3c7221525cfbd9735ed 186B
1388b9e4aaf854a2cf23bccb7ad6a8beb62200 54B
13948eb813357a27cf1cb1966da951529c0a46 1KB
13f2e344fc7c42829ee9611234a8dc8c587869 2KB
1641931753f9d046ed845d11e49789ed36ab2c 177B
17d13e52d6f26e108729449de74f5522a2b4f1 118B
18fe263797adb87839387cb74f8b64bbd7921b 85B
19490f622ff36175076a7f0e56dccf4448a9d8 741B
1ab4f4a012ae1364c33e1274da68c45055b5ce 85B
1af9c91237f298aeac934b81b274d479513b16 144B
1b02d5005e7a9411a624b6eb0ec199fddcc03f 818B
1b204c6e6cc31ab7a9b40be3a3a1cde9d6c5cb 47B
1b6c975ed5251551572a6eb6af48578b54fc71 45B
1e72b54567bc27726c6a2804ac43830cb10e40 196B
2072f4625e1d3d900f5eeaa4b96d5bb50e0f1b 51KB
228789f9ab8cdf8364117d74ae31f9d6055e73 85B
247f78a29f777f08ed2ea7aae9cd6d341fc580 62KB
250041e6f86392bbb84864985537f942715b02 439B
25a040b6d68d59bb81485441871c8d9d26938b 54B
25c44b195dc96274c22c33dd454b0594cb94e0 138B
280c78282c0fe5bdef7fac024765b0c6abcf5d 116B
2853b16a16960da029f16c5b28c8b9ca3812ce 851B
28ea7ba2491ec9ba9dbe9287b3e4ad54b38608 632B
29fd4d8180b33beed43b565de6f765ee370181 134B
2a5bea6c312340a7949cc2666cafbc79e6b04a 10.41MB
2bf11e89e243755bed8dab5d446430a3b08f15 724B
2eb42688dee87972f64fca50755bdc6345ba91 1KB
3092dbf2947a554f1432e461b42d654cd986ed 208B
30c870e9305051264b24a8063e59ec45507c14 70KB
31723b4ff03a78f663ad2b1e975c083272532c 404B
32936792301dd612dce64804df972239075cf2 36B
33ac4ee761dbc959889dde01425f590967af29 545B
33e40231834a3b199a01072cddbd9b2f538b02 52B
3447beb0fccc4e4190af7444600a626e82ade3 292B
353b4c0d6e8887e11efcac204ce5c380b21777 111B
367cf1e72b5aef24b7462f52740219e9f87937 440B
3739e86a4fc5b056f8d05e831b16c4834498dd 145B
375b1dc3669443621fd8d34fdfba7572a002c6 196B
384376447358fe274b1ddfa0b55a08c59d4ed3 138B
39ddae63c8da610a9925ff43ee60584ad35832 54B
3aace8e6e9fcac9a17f3c593f7260df459147c 46KB
3bb98db651b05d106c84dacc9f48bf6d1aa25e 53B
3c66b0659ccbb32483e71721ac0d3534a88547 747B
3faa4a68488b5749cc2562570d907185e1b724 172B
40258268e4bdf550dfed194e271acc73551f03 176B
40c707e726950bb6e57c5b901b8c4f36ad47ca 56B
40e7f93eab1e86aeb41382d2c54933d93c06cc 31B
4266d3861a31e073478a66053a894f51fac9ab 194B
4310876427e2d948fe6f93d5a8be0b4066e0c8 211B
469b32e3fa961e9758d6971f1530db5c4f1af6 1010B
47c488900b86ae6eed03f0a4214558fe3800f2 10.79MB
47f4b381c798b8250bde8eb29f49901bda3ee5 138B
48e6952b548a08ebbff0a7f84ddd07bd78eea2 143B
49bc56fb2a7272d585745868f125bc99b2c453 833B
4afcb575cdd7011afbc91f0e7b2138b6c82c0a 982B
4b1b41832802f7510da088c44e55a4d4adc5f3 2KB
4b4e6328726fbd6b93c2ab23d61efbc0f6c364 192B
4b8ece84f0a05ef04e65c8da7fa01a3e39f254 59KB
4f4cb81cba789271952151847c6c253334217e 159B
4f9c8a53e2483634ff21c66aff82a3219bb504 162B
4fc18ea600a24fb109996ec686ed7cb1a9f0bc 138B
54afeccfcd8964978841882e0cd16b0860b1ff 2KB
5516d9cba240a31887eb46708ec36f1209540b 54B
5561acbdd79f7a4ba5ea41a05ce79d03c59edc 10.46MB
55d0e96fce24df0d077b4e77b44a9c5866e0d6 10.41MB
566b81b018ad684f3a35fee301741b2734c8f4 141B
5a782954d72d3da7620212b0766fa300248f41 10.4MB
5ace92787e4277b68f02696ab3688a4fc6f05c 11KB
5d1e885b24cf870daeebee34e79e07f82cfbf0 83B
5d79ee37b0759dbe20c558dcf57688b39582b9 656B
6022678f7ab0ced5aa6690a0e99178bb1522bd 113B
6049a73b6db6ec624b396c8558340239a75862 59KB
62e1d473a9a24c545ec7172cc6449f33cd73e1 513B
64ad05c7fe9bf1fd53fc17303ebb6b5324fdb7 54B
64ed83a5e081ebb7f3716fa01c9bbf6d072900 54B
676350f939b70f67c505a22d28510d688bc49f 60B
681236915c409d03b2e6906fff07fb9286f9f5 53B
69d4f5557d0faacbdfceb235c97650f6107d87 1KB
6af0c313a455de6fea4fd169da6f0f5006aaf0 176B
6b0eb9890cbcd2981ff6b5ca0f704ad4826131 51KB
共 331 条
- 1
- 2
- 3
- 4
资源评论
CodeMartain
- 粉丝: 8926
- 资源: 104
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功