Bootstrap

Go- 包的使用

Go 学习笔记,学习内容

主要介绍以下内容:

  • regexp包

  • sync包

  • big包

Go包检索地址: 包含每个包的函数说明和使用方法

代码示例可以直接运行

package main

import (
	"fmt"
	"math"
	"math/big"
	"regexp"
	"strconv"
)

func printDivider(str ...string) {
	fmt.Println()
	fmt.Println("-----------------------------------------------")
	if len(str) > 0 {
		fmt.Println(str)
	}
}

func main() {
	/*
	   regexp包
	*/
	printDivider("regexp包")
	searchIn := "Scores about John: 283.1001 88.2"
	pat := "[0-9]+.[0-9]+"

	if ok, _ := regexp.Match(pat, []byte(searchIn)); ok { // 查找指定格式是否存在
		fmt.Println("Match Found") // 输出:Match Found
	}

	f := func(s string) string {
		v, _ := strconv.ParseFloat(s, 32)
		return strconv.FormatFloat(v*2, 'f', 2, 32)
	}

	re, _ := regexp.Compile(pat)
	str1 := re.ReplaceAllString(searchIn, "##.#") // 将指定模式的字符串全部替换
	fmt.Println(str1)                             // 输出:Scores about John: ##.# ##.#

	str2 := re.ReplaceAllStringFunc(searchIn, f) // 匹配模式的字符串作为参数,用函数返回值替换字符串
	fmt.Println(str2)                            // 输出:Scores about John: 566.20 176.40

	/*
	   sync包
	   1、加锁操作:通过加锁操作实现资源的互斥和原子操作 https://gowalker.org/sync#Mutex
	   2、函数的互斥调用:once.Do(call) https://gowalker.org/sync#Once_Do
	*/

	/*
	   big包
	   float64精确到小数点之后15位
	*/
	im := big.NewInt(math.MaxInt64)
	in := im
	io := big.NewInt(1984)
	ip := big.NewInt(1)
	fmt.Println(im, in, io, ip) // 输出:9223372036854775807 9223372036854775807 1984 1

	num1 := big.NewInt(1)
	num2 := big.NewInt(2)
	num3 := big.NewInt(3)
	num4 := big.NewInt(100)
	fmt.Println(num1.Mul(num2, num3)) // num1 = num2 * num3 输出:6
	fmt.Println(num1)                 // 输出:6

	fmt.Println(num1.Mul(num2, num3).Add(num1, num4)) // num1 = num2 * num3; num1 = num1 + num4; 输出:106
	fmt.Println(num1)                                 // 输出:106
}