文章分类 - Golang
摘要:在 Go1.24 中,omitzero 是一个新增的 json处理标签,旨在更灵活地控制结构体字段在序列化时的行为。以下是对其功能、用法及与现有特性的对比分析: 1. omitzero 的核心作用 omitzero 标签用于在 json 序列化时自动忽略字段的零值(如 0、""、false、nil
阅读全文
摘要:redigogithub地址 https://github.com/garyburd/redigo安装命令 :go get github.com/garyburd/redigo/redis该仓库地址已经换了,建议使用新的仓库地址哦!安装命令: go get github.com/gomodule/r
阅读全文
摘要:解决 Go 模块下载缓慢甚至失败的问题可以通过以下两种方法: 执行命令 go env -w GOPROXY=https://goproxy.cn,direct 这条命令会将 Go 代理设置为国内的代理地址 https://goproxy.cn,并且忽略任何可能存在的代理缓存。 设置环境变量(适用于
阅读全文
摘要:代码案例: package main import ( "fmt" ) // 给管道写入数据 func writeData(iniChan chan int) { for i := 1; i <= 50; i++ { //放入数据 iniChan <- i fmt.Println("writeDat
阅读全文
摘要:一:channel的关闭 使用内置函数close可以关闭channel,当channel关闭后,就不能再向channel写数据了,但是仍然可以从该channel读取数据 代码案例: package main import "fmt" func main() { iniChan := make(cha
阅读全文
摘要:一:channel的初始化 //语法 var 变量名 chan 类型 变量名 = make(chan 类型,大小) //举例说明 var intChan chan int intChan = make(chan int, 3) 二:向channel中写入(存放)数据 //举例说明 var intCh
阅读全文
摘要:一:不同 goroutine 之间如何通讯 全局变量加互斥锁同步【低水平】 package main import ( "fmt" "sync" "time" ) var ( myMap = make(map[int]int, 10) //声明一个全局的互斥锁 lock sync.Mutex //l
阅读全文
摘要:代码案例: package main import ( "fmt" "runtime" ) func main() { cpuNum := runtime.NumCPU()//当前系统的cpu个数 fmt.Println("cpuNum=", cpuNum) //可以自己设置使用多个cpu【留下一个
阅读全文
摘要:Golang协程的优势: Golang的主线程是一个物理线程,直接作用在cpu上的,是重量级的,非常消耗cpu资源 Golang的协程从主线程开启的,是轻量级的线程,是逻辑态,对资源消耗相对小 Golang的协程机制是重要的特点,可以轻松地开启上万个协程,对于其它语言来说,并发机制是基于线程的,开启
阅读全文
摘要:一:协程是轻量级的线程【主线程】 二:协程的特点 有独立的栈空间 共享程序堆空间 调度由用户控制 协程是轻量级的线程 三:goroutine的调度模型 MPG模式 M:操作系统的主线程(物理线程) P:协程执行需要的上下文 G:协程
阅读全文
摘要:代码案例: 测试用例文件名格式:XXX_test.go t.Logf方法输出相应的日志 测试单个文件: go test -v app_test.go 测试单个函数 go test -v -test.run TestGetData
阅读全文
摘要:代码案例: package main import ( "encoding/json" "fmt" ) type People struct { Name string `json:"name"` //序列化后的字段名字【自定义】 Age int `json:"age"` Address strin
阅读全文
摘要:一:严格的输入方式 package main import ( "fmt" "os" ) func main() { fmt.Println("命令行的参数有", len(os.Args)) //遍历 os.Args 切片,就可以得到所有的命令行输入的参数值 for i, v := range os
阅读全文
摘要:代码案例: package main import ( "bufio" "fmt" "io" "os" ) type CharCount struct { chCount int //英文个数 NumCount int //数字个数 SpaceCount int //空格个数 OtherCount
阅读全文
摘要:代码案例: package main import ( "bufio" "fmt" "io" "os" ) func main() { srcFile := "./test1.txt" dstFile := "./abc.txt" _, err := CopyFile(dstFile, srcFil
阅读全文
摘要:golang判断文件或文件夹是否存在的方法,使用os.Stat()函数,返回的错误值进行判断: 如果返回的错误为 nil,说明文件或文件夹存在 如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在 如果返回的错误为其它类型,则不确定是否存在 package ma
阅读全文
摘要:存在两个已经存在的文件,将一个文件的内容写入到另外一个文件中 package main import ( "fmt" "io/ioutil" ) func main() { //存在两个已经存在的文件,将一个文件的内容写入到另外一个文件中 file1 := "./a.txt" file2 := ".
阅读全文
摘要:一:创建一个新文件,写入5句 "hello world" package main import ( "bufio" "fmt" "os" ) func main() { //1.创建一个新文件 filePath := "test1.txt" file, err := os.OpenFile(fil
阅读全文
摘要:一:带缓冲的Reader读文件 package main import ( "bufio" "fmt" "io" "os" ) func main() { //打开文件 file, err := os.Open("./test.txt") if err != nil { fmt.Println("o
阅读全文
摘要:由于接口是一般类型,不知道具体类型,如果要转成具体类型,就需要使用类型断言,具体如下: var t float32 = 2.4 var x interface{} x = t y = x.(float32) // 成功转成 float32 具体案例1: package main import "fm
阅读全文