golang学习笔记

1、go特点:简单,支持指针,只支持复合
2、GOPATH:1.8版本后无需自己配置
3、常用指令
 1)go build:编译成可执行文件
 2)go clean:清除编译文件
 3)go run:编译并运行
 4)go fmt:格式化代码文件
 5)go install:编译并安装
 6)go get:获取依赖
 7)go generate:编译前自动化生成某类代码
 8)go test:测试
4、包、方法结构
 1)启动入口:
  a)package main
  b)func main
 2)测试程序
  a)文件以_test结尾
  b)方法以Test开头
5、变量 var

1var 变量名 类型 =2var (
    变量 类型 = 值
    变量 类型 = 值
 )
3)变量 :=

注:强类型、自动推断类型
7、常量 const
注:支持连续常量
8、基本数据类型 bool string int float complex
 1)不支持隐式数据类型转换
 2)可指定位数,不指定取决于操作系统
 3)&变量名 可获取其指针地址,不支持指针运算
 4)string默认空字符串
9、循环:只支持for
10、数组
 1)var 变量 [元素个数] int = {}
 2)…动态获取元素个数
 3)遍历 for i:=0;i<len(arr);i++ 或者 for idx,e := range array
 4)数组截取 arr[i:j]
11、切片
 1)[]不指定元素个数,可变长
 2)指针、len、cap
 3)make([]类型, len, cap)
12、map
 1)key不存在value为0
 2)m := map[int]int{}
 3)for k,v := range m
 4)map的value可以是一个方法
 5)set通过 map[type]bool 来实现
13、string
 1)分割:strings.Split(s, “,”)
 2)连接:strings.Join(parts, “-”)
 3)字符串数据类型转换:strconv
14、函数
 1)可以有多个返回值
 2)只有值传递
 3)函数可以作为变量的值、参数、返回值
 4)可变长参数 变量名 …type
 5)defer延迟执行,类似finally,多个先进后执行
15、定义结构
 1)定义接口 type 接口名 interface{}
 2)定义结构 type 结构名 struct{}
 3)方法绑定结构 func (a *结构名) 方法名(参数) 返回值 {}
 4)不支持继承
16、异常机制
 1)不支持
 2)errors.New 异常
 3)panic 不可恢复的错误,会调用defer函数,defer中可使用recover()恢复错误
17、包
 1)与java差异
 2)所有init在main前执行
 3)go get 导入远程包 -u 强制
 4)依赖包查找路径:当前包vendor>上级vendor>src下vendor>GOPATH>GOROOT
 5)依赖管理软件:godep、glide、dep(新)
18、协程Groutine
 1)开销小2k(java1M),与内核m:n,内核线程-Processor-协程队列
 2)go func() {} ()
19、sync.Mutex
 1)Lock()
 2)Unlock() 注:defer中
 3)互斥锁,不可重入
 4)RWMutex 多个读锁和一个写锁
20、WaitGroup
 1)add(1)
 2)done()
 3)wait()
注:同java中CountDownLatch
21、CSP
 1)通过channel通讯,Channel有容量限制,分为同步chan和异步bufchan
 2)声明channel,ch := make(chan string)
 3)数据存入channel,ch <- “abc”
 4)从channel获取数据,<- ch
 5)多渠道(channel)选择 select case,可配置超时时间
注:同java中Feature
22、任务取消
 1)channel关闭广播 v,ok <- ch; ok
 2)Context取消,其子Context自动取消
23、只运行一次,如单例模式
 1)var once sync.Once
 2)once.Do(func () {})
24、使用bufChan实现对象池,类似于队列
25、sync.Pool
 1)私有对象(协程安全),共享池(协程不安全)
 2)对象获取顺序:私有对象>同Processor共享池>其他Processor共享池>新建
 3)对象放回顺序:私有对象不存在放回私有对象,否则放回当前Processor共享池
 4)生命周期:下一次GC清空
26、内置单元测试框架
 1)Fail、Error:该测试失败,该测试继续,其他测试继续
 2)FailNow、Fatal:该测试失败,该测试中止,其他测试继续
 3)go test -v -cover
27、性能测试Benchmark

1func Benchmark开头 (b *testing.B) {
        b.ResetTimer()
		for i:=0; i<b.N; i++ {
			// 待测试代码
		}
		b.StopTimer()
	}
2go test -bench=. -benchmem

28、反射
 1)获取类型 reflect.TypeOf(v)
 2)获取值 reflect.ValueOf(v)
 3)与类型枚举对比调用 .Kind()
 4)属性上可加Tag,类似于java中注解
29、Pipe Filter
 1)Filter:封装数据处理能力,只跟数据格式耦合
 2)Pipe:连接Filter传递数据,进程内同步调用时数据在方法调用间传递,异步处理时缓冲数据流
30、内置JSON解析:通过FeildTag,基于反射
 1)json.Marshal:将数据编码成json字符串
 2)json.Unmarshal:将json字符串解码到相应的数据结构
31、easyjson
 1)安装 go get -u github.com/mailru/easyjson/…
 2)生成文件 easyjson -all 文件名.go
 3)使用 实例.MarshalJSON() 实例.UnmarshalJSON()
32、http服务

1import "net/http"
2)http.HandleFunc("URI", func(w http.ResponseWriter, r *http.Request) {// 处理逻辑})
3)http.ListenAndServe(":监听端口", nil)

33、restful服务

import ("net/http" "github.com/julienschmidt/httprouter")

func 方法名(w http.ResponseWriter, r *http.Request, _ httprouter.Params) {
    // 处理逻辑
}

router := httpRouter.New()
router.GET("URI", 方法名)
http.ListenAndServe(":监听端口", router)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GoLang学习笔记主要包括以下几个方面: 1. 语法规则:Go语言要求按照语法规则编写代码,例如变量声明、函数定义、控制结构等。如果程序中违反了语法规则,编译器会报错。 2. 注释:Go语言中的注释有两种形式,分别是行注释和块注释。行注释使用`//`开头,块注释使用`/*`开头,`*/`结尾。注释可以提高代码的可读性。 3. 规范代码的使用:包括正确的缩进和空白、注释风格、运算符两边加空格等。同时,Go语言的代码风格推荐使用行注释进行注释整个方法和语句。 4. 常用数据结构:如数组、切片、字符串、映射(map)等。可以使用for range遍历这些数据结构。 5. 循环结构:Go语言支持常见的循环结构,如for循环、while循环等。 6. 函数:Go语言中的函数使用`func`关键字定义,可以有参数和返回值。函数可以提高代码的重用性。 7. 指针:Go语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针可以实现动态内存分配和引用类型。 8. 并发编程:Go语言提供了goroutine和channel两个并发编程的基本单位,可以方便地实现多线程和高并发程序。 9. 标准库:Go语言提供了丰富的标准库,涵盖了网络编程、文件操作、加密解密等多个领域,可以帮助开发者快速实现各种功能。 10. 错误处理:Go语言中的错误处理使用`defer`和`panic`两个关键字实现,可以有效地处理程序运行过程中出现的错误。 通过以上内容的学习,可以掌握Go语言的基本语法和编程思想,为进一步学习和应用Go语言打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang学习笔记](https://blog.csdn.net/weixin_52310067/article/details/129467041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [golang学习笔记](https://blog.csdn.net/qq_44336275/article/details/111143767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值