2Golang基本数据结构——变量与常量

变量与常量

1. 编写测试程序

  1. 源码文件以 _test 结尾:xxx_test.go
  2. 测试方法名以 Test 开头:func TestXXX(t *testing.T) {...}
package try_test

import "testing"

func TestFirstTry(t *testing.T) {
    t.Log("My first try!")
}
> go test first_test.go
=== RUN TestFirstTry
first_test.go:6: My first try!
--- PASS: TestFirstTry (0.00s)
ok command-line-arguments 0.056s
PASS

go test 相关问题

//注意:go test -v xxx_test.go 才能输出 t.Log 里的文字,多数IDE里这个参数是默认打开的,所以在IDE里你直接可以看到输出。命令行要加这个参数或者修改默认配置。

//如果你使用的是 vs code 编辑器的话,安装好了go的相关配置,会在测试文件中看到 ` run test | debug test `的提示
//你点击 `run test` 之后在下面看不到 `t.Log()` 输出的内容就请把 `"go.testFlags": ["-v"],` 这行代码加入到你的 settings.json 文件中(设置 Workspace Settings。打开 .vscode/settings.json)

执行test 报错 package ch2/test is not in GOROOT (D:\Go\src\ch2\test) (测试包不在 Go 的默认包路径(GOROOT))

//在settings.json 中加入下面内容,修改GOPATH 目录,
//注意在 Windows 中,目录路径中的反斜杠字符 \ 需要用双反斜杠 \\ 来转义
"go.testEnvVars": {
    "GOPATH": "D:\\Gocode"
},

//在cmd执行
go env -w GO111MODULE=off
//重启vscode 再点击run test | debug test 发现成功

2. 实现 Fibonacci 数列

1, 1, 2, 3, 5, 8, 13, ….

package fib

import (
    "fmt"
    "testing"
)

func TestFibList(t *testing.T) {
    var a int = 1
    var b int = 1
    fmt.Print(a)
    for i := 0; i < 5; i++ {
        fmt.Print(" ", b)
        tmp := a
        a = b
        b = tmp + a

    }
    fmt.Println()
}

//运行测试结果
=== RUN TestFibList
1 1 2 3 5 8
--- PASS: TestFibList (0.00s)
PASS
ok ch2/fib (cached)

3. 变量赋值

与其他主要编程语⾔的差异

  • 赋值可以进⾏⾃动类型推断

  • 在⼀个赋值语句中可以对多个变量进⾏同时赋值

var的关键字用于给变量赋值
赋值可以进⾏⾃动类型推断

// var的关键字用于给变量赋值,类型声明放到变量名的后面
var a int = 1
var b int = 1  
// 可以简写为
var (
  a  int = 1
  b  int = 1     
)
//go 具有一定的默认推断能力,如果使用默认类型,还可以这么写
var (
  a int = 1
  b     = 1
)

// go 里面还可以直接不需要赋值关键字,使用类型推断,直接给变量进行初始化和赋值
a := 1
b := 1
//也可以在前面声明一个变量的类型。在后面进行赋值(通常这种变量会用在全局或者外部的变量)
var a int
func TestFibList(t *testing.T) {
    a = 1
}

在⼀个赋值语句中可以对多个变量进⾏同时赋值

//交换两个变量的值
func TestExchang(t *testing.T) {
    a := 1
    b := 2
    tmp := a
    a = b
    b = tmp
    t.Log(a, b)

}


//在go中有更简洁的方式
func TestExchang(t *testing.T) {
    a := 1
    b := 2
    // tmp := a
    // a = b
    // b = tmp
    a, b = b, a
    t.Log(a, b)

}

fmt.Print去输出我们的值,在单元测试中常用t.Log来替换它

package fib

import (
    "testing"
)

func TestFibList(t *testing.T) {
    var a int = 1
    var b int = 1
    t.Log(a)
    for i := 0; i < 5; i++ {
        t.Log(" ", b)
        tmp := a
        a = b
        b = tmp + a

    }
}

4. 常量定义

与其他主要编程语⾔的差异

  • 快速设置连续值

定义一周7天,go中不用对每个常量分别的赋值,可以通过下面的写法实现递增的+1

package constant_test

import (
    "testing"
)

const (
    Monday = iota + 1
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
    Sunday
// Monday = 1
// Tuesday = 2 依次类推,这种写法也是可以的
   )

func TestConstantTry(t *testing.T) {
   t.Log(Monday, Wednesday, Thursday, Friday, Saturday, Sunday)

}


//RUN TEST
=== RUN   TestConstantTry
    D:\XXXX\XXXX\XXXX\XXXXXX\constant_try_test.go:18: 1 3 4 5 6 7
--- PASS: TestConstantTry (0.00s)
PASS
ok      ch2/constant_test   (cached)

go可以对一些比特位常量进行连续的定义

const (
    Readable = 1 << iota
    Writable
    Executable
   )

func TestConstantTry1(t *testing.T) {
   a := 7   //二进制位是0111
   t.Log(a&Readable == Readable, a&Writable == Writable, a&Executable == Executable)
}


// a := 7   ///二进制位是0111  RUN TEST  得到结果true true true
// 修改a := 1  ///二进制位是0001  ,run test 得到结果 true false false  

go可以对一些比特位常量进行连续的定义

第一个比特位为1,其他位为0的时候,我们表示Readable

第二个比特位为1,其他位为0的时候,我们表示Writable

第三个比特位为1,其他位为0的时候,我们表示Executable

这段代码定义了三个常量 Readable, Writable 和 Executable,它们的值分别为 1 左移 0、1 左移 1 和 1 左移 2。这种用法被称为“位运算符”或“位掩码”,它将不同的二进制位设置为1 或 0,以便表示不同的属性或标志。将整数变量 a 初始化为 7,它的二进制表示为 0111。然后按位与运算。

猜你喜欢

转载自blog.csdn.net/weixin_62173811/article/details/129909607