Golang笔记

指针

  • 当声明了一个指针变量, 并将一个变量的指针地址赋值给该指针变量, 那么该变量的值可以通过给指针变量加星号获取, 如:
 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
  package main
  
  import "fmt"
  
  func main() {
  	// 声明了一个名为i的int类型的变量, 并赋值为10
  	var i int
  	i = 10
  	// 声明了一个名为point的[int类型的指针]类型的变量, 并赋值为变量i的内存地址
  	var point *int
  	point = &i
  
  	fmt.Printf("i的值为: %d, *point的值为: %d \n", i, *point)
  
  	assertTheTwoVariablesAreEqual(i, *point)
  }
  
  func assertTheTwoVariablesAreEqual(varA, varB interface{}) {
  	varAValue, varAIsInt := varA.(int)
  	varBValue, VarBIsInt := varB.(int)
  
  	if varAIsInt == VarBIsInt && varAValue == varBValue {
  		fmt.Print("i即是*point")
  	}
  }

所以, * 为取值符, 用于获取指针变量所指向的内存地址上的值; & 为取址符, 用于获取变量 (包括指针变量) 的内存地址

PS: 星号+指针变量名=内存地址上的值, 星号+类型/结构体=[类型/结构体的指针]类型

  • 严格意义上来说, go的传参方式只有一种, 那就是 值传递 , 但在编码过程中, 会出现两种写法, 变量传递指针传递 . 两者的区别在于, 前者在程序实际运行中, 在传值的时候会在新的内存地址上复制参数, 并把这个参数的新的副本传入函数中, 这样的话函数内的变量副本无论发生什么改变, 都与函数外的变量无关; 后者的话则是复制了变量的内存地址并把复制出来的新内存地址传入了函数中, 一旦在函数中值发生了改变则在函数外值也会改变.

测试

  • 普通测试用例

    • 文件名以 _test.go 结尾

    • 普通测试用例(函数名)以 Test 开头, 需要传入唯一参数 t *testing.T

    • 一般情况下go不保证测试用例会按顺序执行, 所以需要使编写一个空的测试用例, 并在用例内部使用t.Run函数按顺序调用其它测试用例. 建议使用这种方法的情况下, 其他的测试用例建议不遵循普通测试用例的命名标准, 这样可以避免每个测试用例都执行2

      遍.

  • 性能测试用例

    • 性能测试需要使用-bench 参数, 如 go test -bench=. 即表示执行测试用例时的同时执行所有性能测试用例
    • 性能测试用例中的唯一入参是b *testing.B
    • 性能测试用例需要以Benchmark开头

其它

  • fmt.Println() 函数使用%v作为格式化输出, 所以打印内存地址请使用fmt.Printf()搭配%p使用
updatedupdated2020-06-302020-06-30
加载评论