Eli's Blog

1. 静态类型和动态类型

  • 静态类型: static type,即变量声明的时候的类型。
  • 动态类型: concrete type,具体类型,程序运行时系统才能看见的类型
1
2
3
4
var i interface{}   // 静态类型为interface

i = 8 // 动态类型为int
i = "abc" // 动态类型为string

1. GoConvey简介

  • GoConvey是一款针对Go语言的测试辅助开发包,在兼容Go原生测试的基础上,又拓展出便利的语法和大量的内置判断条件,减轻开发人员负担。
  • 提供实时监控代码编译测试的程序,配以舒服的Web解码,能够让一个开发人员从此不再排斥写单元测试

2. 安装

1
go get github.com/smartystreets/goconvey

1. unsafe包

Go是强类型语言,不允许不同类型的指针互相转换。但它提供unsafe包作为中间媒介,快速实现类型转换,但该转换是不安全的。

1.1 Go指针和unsafe.Pointer的区别

Go指针

  • 不能进行数学运算
  • 不同类型的指针,不能相互转换
  • 不同类型的指针不能使用 == 或 != 比较
  • 不同类型的指针变量不能相互赋值

unsafe.Pointer:

1
2
type ArbitraryType int
type Pointer *ArbitraryType

unsafe_pointer

1. 正则表达式

1
2
3
4
5
6
7
8
func main() {
str := `171.43.145.13 - - [10/Mar/2020:10:19:06 +0800] "POST /api/user/detail HTTP/1.1" 200 252 "-" "LifePlanner/1.9.14 (com.njivtime.lifeplanner; build:1.9.14.9; iOS 13.3.1) Alamofire/4.8.2" "-" 0.009 0.009`

re := regexp.MustCompile(`\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\s`)

arr := re.FindAllString(str, -1)
fmt.Println(arr)
}