package baseDemo
import (
"demo/baseDemo/utils"
"errors"
"fmt"
"log"
"math"
"math/rand"
"reflect"
"runtime"
"slices"
"sort"
"strconv"
"strings"
"sync"
"testing"
"time"
"unsafe"
)
// 全局变量声明
var (
arr1 = [5]int{1, 2, 3, 4, 5}
slice1 = []int{1, 2, 3, 4, 5}
pointArr1 = [5]utils.Point{{1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}}
)
func TestMath(t *testing.T) {
num1 := math.Max(1, 2) //最大值 浮点型
num2 := math.Min(1, 2) //最小值
num3 := math.Abs(-1.0) //绝对值
num4 := rand.Intn(50) //5 0内的随机整数
num5 := max(1, 2, 9)
num6 := num5 % 10 //取余
num7 := num6 ^ num5 //异或
fmt.Println(num1, num2, num3, num4, num5, num6, num7)
}
func TestFmt(t *testing.T) {
fmt.Printf("hello world\n")
fmt.Println("hello world")
err := fmt.Errorf("error") //错误消息格式化
fmt.Println(err)
str1 := fmt.Sprintf("hello %s", "小明")
str2 := fmt.Sprintf("%b - %d", 16, 16) // %b:2进制 %d:10进制
fmt.Println(str1, str2)
}
func TestScan(t *testing.T) {
var str1 string
fmt.Println("请输入字符串:")
fmt.Scanln(&str1)
var str2, str3, str4 string
fmt.Println("请按照格式输入字符串:")
fmt.Scanf("%s %s %s", &str2, &str3, &str4) //按照固定格式输入
fmt.Println()
}
func TestStrings(t *testing.T) {
str1 := "hello world" //字符串初始化
str2 := str1[0] //访问字符
length := len(str1) //获取字符长度
str3 := &strings.Builder{} //创建空字符串
str3.WriteByte('h') //追加字符
str3.WriteString("el") //追加字符串
str7 := str1[1:2] //字符串截取
for i := range str1 { //遍历字符串
fmt.Println(i)
}
index1 := strings.IndexByte(str1, 'a') // 字符首次出现下标,-1:不存在
index2 := strings.Index(str1, "wo") // 字符串首次出现下标,-1:不存在
count1 := strings.Count(str1, "h") //子字符串出现次数
str4 := strings.Repeat("h", 10) //重复拼接字符
str5 := strings.ToUpper(str1) //转为大写
str8 := strings.Replace(str1, "wo", "WWOO", 1) // 替换n个字符串(-1表示全部)
str6 := strings.ReplaceAll(str5, "()", "o") //批量替换字符串
str9 := strings.TrimSpace(str1) //去除首尾空格
str10 := strings.Trim(str1, " ") //去除首位指定字符串
arr1 := strings.Split(str1, " ") // 分割字符串并转换为整数并存储在intArr切片中
bool1 := strings.Contains("hello world", "wo") //是否包含子字符串
bool2 := strings.EqualFold("go", "GP") //比较字符串是否相等(不区分大小写)
bool3 := strings.HasPrefix(str1, "hel") //判断字符串是否以指定字符开头
fmt.Println(str1, str2, length, index1, count1,
str4, str5, str6, str7, str8, str9, str10,
arr1, bool1, bool2, bool3, index2)
}
func TestStrconv(t *testing.T) {
//其他类型转string(少用,推荐fmt.Sprintf)
str1 := strconv.FormatInt(int64(100), 2) //10进制转其他进制
str2 := strconv.FormatFloat(float64(3.14), 'f', 10, 64)
str3 := strconv.FormatBool(true)
bool1, _ := strconv.ParseBool("true")
num1, _ := strconv.ParseInt("10001", 2, 64)
num2, _ := strconv.Atoi("66") //字符串转数字
str4 := strconv.Itoa(66) //数字转字符串
fmt.Println(str1, str2, str3, bool1, num1, num2, str4)
}
func TestMap(t *testing.T) {
map1 := make(map[string]int) //初始化数组
map2 := map[string]int{}
map3 := map[string]int{"name": 0}
map4 := map[int]struct{}{}
map5 := map[string]utils.Point{
"小明": {1, 2},
"小红": {3, 3},
}
map3["age"] = 3 //新增元素
delete(map3, "eee") //移除元素
tmp := map3["age"] //访问元素 , 不存在则为默认值,如 int为0
v, ok := map3["id"] // ok表示是否存在
length := len(map3)
//map线程不安全,并发时需要上锁和解锁
var mu sync.Mutex
mu.Lock()
map3["money"] = 15
mu.Unlock()
fmt.Println(map1, map2, map3, tmp, ok, v, length,
map4, map5)
}
func TestArray(t *testing.T) {
var arr9 [10][10]int // 指定长度的申明,长度必须是常量,不能是变量
arr2 := [3]int{16, 2, 3} //初始化数组
arr4 := []byte(strconv.Itoa(1234)) //整形转字符数组(ascll码 int32) integer to array
arr10 := [2]utils.Point{{1, 2}, {3, 3}}
slice1 := arr2[0:3]
arr11 := (*[3]int)(slice1) //切片转数组
arr12 := [3]int(slice1) //切片转数组
arr3 := arr2[1:2] //数组截取
length := len(arr1) //获取数组长度
fmt.Println(arr1, arr2, arr3, length, arr4,
arr9, arr10, arr11, arr12)
}
/*
slice 变长数组
*/
func TestSlices(t *testing.T) {
var slice5 []int // 切片声明,不用写长度
slice4 := []int{1, 2, 3, 4, 5} //切片声明
slice1 := make([]int, 10) //初始化切片 10容量
slice2 := make([]int, 6, 10) //初始化切片 6长度 10容量
slice3 := arr1[2:4] //数组转切片(左闭右开)
slice3 = append(slice3, 10) //往切片追加元素
slices.Sort(slice1) //数组排序
slices.Reverse(slice1) //数组翻转
str1 := "hello world" //字符串初始化
slice6 := []byte(str1) //字符串转为byte切片
str2 := string(slice6) //byte切片转字符串
slice7 := []int{0, 0, 0, 0}
copy(slice7[1:], slice4[1:]) //拷贝数组
slice4 = append(slice4, 10, 11) //增加切片元素
slice4 = append(slice4, slice4...) //...表示将元素枚举出来
sort.Ints(slice4) //切片排序
len1 := len(slice1) //获得切片长度
cap1 := cap(slice1) //获得切片容量
fmt.Println(slice1, slice2, slice3, slice4, slice5, slice6,
str2, len1, cap1)
}
func TestSort(t *testing.T) {
arr1 := []utils.Point{{2, 5}, {9, 4}, {1, 100}}
//自定义排序
sort.Slice(arr1, func(i, j int) bool {
return arr1[i].X > arr1[j].X
})
fmt.Println(arr1)
}
func TestRand(t *testing.T) {
num1 := rand.Int() //生成随机整数
fmt.Println(num1)
}
func TestReflect(t *testing.T) {
a := 1
reflect.ValueOf(a).IsZero() //判断是否为0
// reflect.ValueOf(a).IsNil() //判断是否为空
reflect.ValueOf(a).IsValid() //待完善
}
func TestRuntime(t *testing.T) {
fmt.Println(runtime.GOMAXPROCS(-1)) //设置协程最大可使用CPU数
fmt.Println(runtime.NumGoroutine()) //当前系统CPU数
}
func TestUnsafe(t *testing.T) {
intLen := unsafe.Sizeof(int(8))
arr2 := [5]int{1, 2, 3, 4, 5}
slice1 := arr2[:]
slice2 := unsafe.Slice(&arr2[0], 5) //基于数组地址创建切片,切片里数据改变,原数组也会改变
slice2[2] += 10
slice1[1] += 10
fmt.Println(intLen, arr2, slice1, slice2)
}
// 自定义错误
func TestErrors(t *testing.T) {
err1 := errors.New("err1")
err2 := errors.New("err2")
err3 := errors.Join(err1, err2)
if errors.Is(err3, err1) {
fmt.Println("err1")
}
}
func TestLog(t *testing.T) {
log.Println("log1")
log.Fatalln("log fatalln") //执行之后会再执行os.exit退出程序
}
func TestDate(t *testing.T) {
now := time.Now()
nowString := now.String()
year := now.Year()
month := now.Month()
monthNumber := int(month)
day := now.Day()
hour := now.Hour()
minute := now.Minute()
second := now.Second()
nowString1 := fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second)
nowString2 := now.Format("2006-1-02 15:04:05")
nowString3 := now.Format("2006-1-02")
nowString4 := now.Format("15:04:05")
fmt.Println(now, nowString, year, month, monthNumber, day, hour, minute,
second, nowString1, nowString2, nowString3, nowString4)
}
// 内置函数,无需导入包
func TestBuildIn(*testing.T) {
length := len("hello world")
num1 := new(int) //new分配内存,返回对应类型的指针
slice1 := make([]int, 4, 8)
fmt.Println(length, num1, slice1)
}
go-标准函数库(持续更新)
于 2024-04-18 13:38:31 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)