![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go语言
文章平均质量分 55
DXB2021
听力障碍人士,愿终身学习计算机科学与技术的所有知识。
展开
-
sync.RWMutex
包中提供的一种同步原语,全称为读写互斥锁(Read-Write Mutex)。它设计用于处理读多写少的并发场景,相较于传统的互斥锁(如。,可以让该结构体的实例能够安全地在多个goroutine中进行读写操作。这样可以确保任何时候只有一个写操作可以进行,但多个读操作可以并行执行。能显著提高并发性能,因为它允许并发读取,减少了不必要的阻塞。在进行写操作(如 push/pop)前则使用。)能更高效地管理对共享资源的访问。:在读操作远多于写操作的场景下,是 Go 语言标准库。,并在操作完成后调用。原创 2024-05-05 16:44:14 · 198 阅读 · 0 评论 -
no required module provides package github.com/xxxxxxx/xxxxxx: go.mod file not found in current dire
,验证其存在性并查看有关包更改的相关文档或通知。如果包已被移动或重命名,请相应地更新代码中的导入路径。如果包不再可用,您需要寻找替代方案或联系包维护者寻求帮助。如果缺失,可能是您下载的项目不完整或项目结构有误。请仔细检查项目的来源,确保已获取所有必要的文件。这可能发生在项目代码导入了该包,但依赖项管理或更新不正确的情况下。可能存在包已被移除、重命名或移动到其他位置的情况。文件是Go模块的入口点,对于管理依赖项(包括错误消息中提到的。:错误也可能由于您尝试从错误的目录或使用不正确的文件路径运行。原创 2024-04-24 15:52:16 · 794 阅读 · 0 评论 -
Go语言的格式化输出函数fmt.Printf
1、整数格式化符%d代码如下:package mainimport ( "fmt")func main() { fmt.Printf("123456789\n") fmt.Printf("%9d\n", 18) fmt.Printf("%-9d\n", 39) fmt.Println() fmt.Printf("123456789\n") fmt.Printf("%9d\n", 18) fmt.Printf("%-9d\n", 39)}运行结果如下:[R..原创 2022-05-16 16:39:41 · 665 阅读 · 0 评论 -
天气预报小程序(go语言&Excel)(未做完)
excelize是Go语言编写的用于操作Office Excel文件基础库,可以使用它来读取,写入,支持XLSX/XLSM.XLTM等多种文档格式。Windows PowerShellCopyright (C) Microsoft Corporation. All rights reserved.Install the latest PowerShell for new features and improvements! https://aka.ms/PSWindowsPS..原创 2022-04-26 13:38:36 · 1092 阅读 · 1 评论 -
Go语言的tools包——编写自己的函数库
在src子目录下新建一个tools目录,并在其中新建一个tools.go文件。代码如下:package toolsimport ( "fmt")func Printfln(format string, a ...interface{}) { fmt.Printf(format+"\n", a...)}如果不放在src子目录下,结果如下:PS C:\Users\a-xiaobodou\OneDrive - Microsoft\Projects\Go> go run原创 2022-04-17 16:45:06 · 437 阅读 · 0 评论 -
Go语言的接口
使用接口:接口声明的格式形式代码如下:type 接口类型名 interface{ 方法名1 ( 参数列表1 ) 返回值列表1方法名2( 参数列表2) 返回值列表2……}接口类型名:使用type将接口定义为自定义的类型名。Go语言的接口在命名时,一般会在单词后面添加er,如有写操作的接口叫Writer,有字符串功能的接口叫Stringer,有关闭功能的接口叫Closer等。方法名:当方法名首字母是大写时,且这个接口类型名首字母......原创 2022-04-12 13:33:14 · 690 阅读 · 0 评论 -
Go语言的反射
反射方法和类型的反射变量的最基本信息就是类型和值:反射包的Type用来表示一个Go语言类型,反射包的Value为Go值提供了反射接口。代码如下:package mainimport ( "fmt" "reflect")func main() { var x float64 = 3.4 fmt.Println("type:", reflect.TypeOf(x)) v := reflect.ValueOf(x) fmt.Println("value:", v) fm.原创 2022-04-12 13:25:59 · 285 阅读 · 0 评论 -
Go语言的语言交互性
Cgo即是语言特性,同时也是一个工具的名称。代码如下:package mainimport "C"import "unsafe"func main() { cstr := C.CString("Hello,world") C.puts(cstr) C.free(unsafe.Pointer(cstr))}运行结果如下:# command-line-arguments.\main.go:9:2: could not determine kind of name for原创 2022-04-09 15:57:17 · 844 阅读 · 0 评论 -
Go语言的“避坑”与技巧
一、合理地使用并发特性1、了解goroutine的生命期时再创建goroutine代码如下:package mainimport ( "fmt" "runtime")//一段耗时的计算函数func consumer(ch chan int) { //无限获取数据的循环 for { //从通道获取数据 data := <-ch //打印数据 fmt.Println(data) }}func main() { //创建一个传递数据用的通道 ch原创 2022-03-21 15:05:25 · 207 阅读 · 0 评论 -
Go语言的编译与工具
一、编译(go build)1、go build无参数编译两个文件在同一个文件夹(gobuild)main.go代码如下:package mainimport ( "fmt")func main() { pkgFunc() fmt.Println("hello worlds")}lib.go代码如下:package mainimport ( "fmt")func pkgFunc() { fmt.Println("call pakFunc")}原创 2022-03-20 17:15:38 · 2080 阅读 · 0 评论 -
Go语言的列表(list)
列表(list)--可以快速增删的非连续空间的容器列表是一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此之间的关系。列表有多种实现方法,如单链表、双链表等。在Go语言中,将列表使用container/list包来实现,内部的实现原理是双链表。列表能够高效地进行任意位置的元素插入和删除操作。一、初始化列表1、通过container/list包的New方法初始化list变量名:=list.New()2、通过声明初始化listvar 变量名 list.List二、在列原创 2022-03-18 20:35:14 · 2797 阅读 · 0 评论 -
Go语言的zerolog的问题
安装zerolog库的命令行如下:go get -u github.com/rs/zerolog/log运行结果如下:go get: module github.com/rs/zerolog/log: Get "https://proxy.golang.org/github.com/rs/zerolog/log/@v/list": dial tcp 142.251.43.17:443: connectex: A connection attempt failed because the co原创 2022-03-16 18:20:06 · 881 阅读 · 0 评论 -
Go语言的游乐场
代码如下:package mainimport ( "log" "net/http" "os" "os/exec" "strconv" "sync")type Lockmap struct { sync.Mutex m map[string]int}var uniq = make(chan int)func init() { go func() { for i := 0; ; i++ { uniq <- i } }()}func mai原创 2022-03-16 16:15:55 · 119 阅读 · 0 评论 -
用Go语言进行数学 、科学领域的计算
表达式代码如下:package mainimport ( t "tools")func main() { t.Printfln("%08b", 1) t.Printfln("%08b", 2) t.Printfln("1&2=%08b%", 1&2) t.Printfln("1&2=%d", 1&2)}运行结果 如下:main.go:4:2: package tools is not in GOROOT (C:\Program Fi原创 2022-03-15 19:19:16 · 655 阅读 · 0 评论 -
Go语言的排版工具
代码如下:package mainimport ( "flag" "fmt" "html" "io/ioutil" "os" "strings")var ( esc = html.EscapeString tflag *bool = flag.Bool("html", true, "html output"))func main() { flag.Parse() in, _ := ioutil.ReadAll(os.Stdin) out := pa原创 2022-03-13 20:32:35 · 344 阅读 · 0 评论 -
Go语言的图灵机
代码如下:package mainimport ( "fmt")var ( a [30000]byte prog = "++++++++++[>++++++++++<-]>++++.+." p, pc int)func loop(inc int) { for i := inc; i != 0; pc += inc { switch prog[pc+inc] { case '[': i++ case ']': i-- }原创 2022-03-13 10:45:02 · 114 阅读 · 0 评论 -
Go语言的类型别名
类型别名:Type Alias区分类型别名与类型定义类型别名的写法为:type TypeAlias = Type代码如下:package mainimport ( "fmt")type NewInt inttype IntAlias = intfunc main() { var a NewInt fmt.Printf("a type: %T\n", a) var a2 IntAlias fmt.Printf("a2 type: %T\n", a2)}运原创 2022-03-12 16:18:12 · 495 阅读 · 0 评论 -
在Linux安装Go语言
下载go1.9.1.linux-amd64.tar.gz需要将这个包解压到/usr/local/go下tar -C /usr/local -xzf go1.9.1.linux-amd64.tar.gz需要将/usr/local/go/bin目录添加到PATH环境变量中export PATH=$PATH:/usr/local/go/bin使用go env指令,可以查看go压缩包是否安装成功。...原创 2022-03-08 16:56:37 · 728 阅读 · 0 评论 -
Go语言的安全与测试
安全一、安全相关的基础概念1、数据加密2、数字签名3、数字证书4、PKI体系二、通信安全1、哈希函数代码如下:package mainimport( "crypto/md5" "crypto/sha1" "fmt")func main(){ TestString:="Hi, Golang!" Md5Inst:=md5.New() Md5Inst.Write([]byte(TestString)) Result:=Md5Inst.Sum([]byt原创 2022-02-24 10:55:58 · 2509 阅读 · 0 评论 -
Go的内存管理
内存分配Go语言的内存分配基于TCMalloc,TCMalloc是Google开发的一个内存分配器,特别适用于高并发场景。TCMalloc具有现代化内存分配器的基本特征:对抗内存碎片、在多核处理器上可伸缩。一、内存管理基本概念内存管理有三种类型:第一种是全手工的内存分配;第二种是全自动分配;第三种是处于两者之间的半自动的内存管理方案。二、逃逸分析代码如下:package mainfunc toHeap() *int{ var x int return &x}原创 2022-02-22 20:42:00 · 545 阅读 · 0 评论 -
Go语言程序的组织
Go语言中程序文件的组织方式packageTest/sub.go的代码如下:package mainimport ( "fmt")func hello() { fmt.Println("Hello World!")}packageTest/main.go的代码如下:package mainfunc main() { hello()}输入命令行如下: go run main.go sub.go运行结果如下:Hello World!如果在Mac原创 2022-02-20 21:50:22 · 235 阅读 · 0 评论 -
编译Go语言程序
Go语言中编译源代码的方法主要有以下两个:go build命令:go install命令:唯一的不同是,生成的可执行程序 文件被放在Go语言开发根目录下的bin子目录下。原创 2022-02-20 20:50:52 · 447 阅读 · 0 评论 -
Go语言的注释
//“/*”和“*/”原创 2022-02-19 17:04:08 · 239 阅读 · 0 评论 -
Go语言的I/O编程
一、输入/输出Go语言将IO操作封装在以下几个包中。io:为I/O原语(I/O primitives)提供基本的接口,在io包中最重要的是两个接口——Reader和Writer接口。io/ioutil:封装一些实用的I/O函数,这个包主要提供了一些常用、方便的I/O操作函数。fmt:实现格式化I/O,类似C语言中的printf和scanf。bufio:实现带缓冲的I/O。它封装于io.Reader和io.Writer对象,创建了另一个对象(Reader和Writer),在提供缓冲的同时实原创 2022-02-04 21:13:42 · 670 阅读 · 0 评论 -
Go语言的网络编程
一、Socket编程很多游戏服务都是采用Socket来编写服务器端的,因为HTTP协议相对而言比较耗费性能。对于底层网络应用开发者而言,几乎所有网络编程都是Socket,因为大部分底层网络的编程都离不开Socket编程。HTTP编程、Web开发、IM通信、视频流传输的底层都是Socket编程。1、什么是SocketSocket编程主要是面向OSI模型的第三层和第四层协议。Socket类型只有两种:流式Socket(SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。原创 2022-02-04 20:49:48 · 2870 阅读 · 0 评论 -
Go语言的并发编程
Go语言里的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为协程(goroutine)时,Go语言会将其视为一个独立的工作单元,这个单元会被调度到可用的逻辑处理器上执行。并发编程基础1、并发与并行(理论没看懂)理解操作系统的线程(thread)和进程(process),有助于理解Go语言运行时调度器如何得用操作系统来并发运行goroutine。并行是让不同的代码片段同时在不同的物理处理器上执行。并行的关键是同时做很多事情,而并发是指同时管理很多事情,这些事情可能只做了一半就被原创 2022-02-03 21:49:06 · 2614 阅读 · 1 评论 -
Go语言的包
包的结构:每个工作空间必须有由bin、pkg、src三个目录组成。bin目录主要存放可执行文件;pkg目录存放编译好的库文件,主要是*.a文件;src目录主要存放Go语言的源文件。1、工作空间GOROOT是一个全局并且唯一的变量,用于指定存放Go语言本身的目录路径(安装路径)。GOPATH是一个工作空间的变量,它可以有很多个(用;号分隔),用于指定工作空间的目录路径。通常go get会使用的第一个工作空间保存下载的第三方库(包)。需要注意的一点就是尽量不要把GOROOT和原创 2022-02-01 18:06:12 · 1698 阅读 · 0 评论 -
Go语言的面向对象编程
Go语言实现面向对象封装,代码如下:package mainimport ( "fmt")type Person struct { Name string Gender string Age int}func (p *Person) say(sentence string) { fmt.Print(p.Name, " says ", sentence, "\n")}func (p *Person) getAge() int { return p.Age}f原创 2022-01-29 17:53:06 · 653 阅读 · 0 评论 -
在Windows系统中安装Go语言
安装程序运行完毕后,打开命令提示符并执行命令go version。要完成安装,还需要为go项目创建目录结构。打开命令提示符,如下:mkdir %USERPROFILE%\gomkdir %USERPROFILE%\go\binmkdir %USERPROFILE%\go\pkgmkdir %USERPROFILE%\go\src创建这些文件夹后,添加环境变量GOPATH。操作步骤如下:1、打开控制面板。2、搜索环境变量。3、单击“编辑账户的环境变量”。4、单击“New原创 2022-01-27 19:23:43 · 4346 阅读 · 0 评论 -
部署Go语言代码
理解目标:命令go env,如下:GO111MODULE="auto"GOARCH="amd64"GOBIN="/Users/douxiaobo/go/bin"GOCACHE="/Users/douxiaobo/Library/Caches/go-build"GOENV="/Users/douxiaobo/Library/Application Support/go/env"GOEXE=""GOEXPERIMENT=""GOFLAGS=""GOHOSTARCH="amd64"GO原创 2022-01-27 19:15:48 · 1306 阅读 · 0 评论 -
Go语言时间编程
时间元素编程打印当前时间,程序清单如下:package mainimport ( "fmt" "time")func main() { fmt.Println(time.Now())}运行结果如下:2022-01-27 16:45:55.719641 +0800 CST m=+0.000094166通过终端的命令行将时间设置为2050年元旦,如下:sudo date +%Y%m%d -s "20500101之后,通过上面代码试一下运行结果以后,出现2050-原创 2022-01-27 17:53:46 · 573 阅读 · 0 评论 -
Go语言的正则表达式简介
定义正则表达式大海捞针,程序清单如下:package mainimport ( "fmt" "log" "regexp")func main() { needle:="chocolate" haystack:="Chocolate is my favorite!" match, err:=regexp.MatchString(needle,haystack) if err!=nil{ log.Fatal(err) } fmt.Println(match)}正则表原创 2022-01-27 16:36:53 · 1802 阅读 · 0 评论 -
Go语言的处理文件
使用ioutil包读写文件读取文件标准库提供了ioutil包,能够快速执行众多涉及读写文件的操作。读取一个文件并将其内容打印到终端,程序清单如下:package mainimport ( "fmt" "io/ioutil" "log")func main() { fileBytes, err:=ioutil.ReadFile("main.txt") if err!=nil{ log.Fatal(err) } fileString:=string(fileByt原创 2022-01-27 15:46:10 · 926 阅读 · 0 评论 -
Go语言的处理JSON
JavaScript对象表示法(JavaScript Object Notation,JSON)是一种用于存储和交换数据的格式。Go语言非常适合用来创建收发JSON的客户端和服务器。创建结构体,程序清单如下:package mainimport ( "fmt")type Person struct{ Name string Age int Hobbies []string}func main() { hobbies:=[]string{"Cycling","Chee原创 2022-01-26 21:40:03 · 463 阅读 · 0 评论 -
Go语言的创建HTTP客户端
超文本传输协议(Hypertext Transfer Protocol,HTTP)理解HTTP要理解HTTP请求的结构,一种不错的方式是使用curl。输入命令行如下:curl -s -o /dev/null -v http://google.com运行结果如下:* Trying 172.217.160.78:80...* Connected to google.com (172.217.160.78) port 80 (#0)> GET / HTTP/1.1>原创 2022-01-26 20:40:38 · 1477 阅读 · 0 评论 -
Go语言的创建HTTP服务器
通过hello World Web服务器宣告你的存在标准库存中的net/http包提供了多种创建HTTP服务器的方法,它还提供了一个基本路由器。使用Go语言编写的基础HTTP服务器,程序清单如下:查看请求和响应使用处理程序函数处理404错误设置报头响应以不同类型的内容响应不同类型的请求获取GET和POST请求中的数据...原创 2022-01-26 19:41:34 · 1911 阅读 · 0 评论 -
Go语言的使用命令行程序
出于如下原因,程序员想创建命令行程序:1、为创建能够定期自动运行的脚本。2、为创建与系统中的文件交互的脚本。3、为创建能够执行系统维护任务的脚本。4、为避免设计图形用户界面这种无谓的开销。在Mac os的终端上,输入命令行:vim beatles.txt打开vim,输入内容如下:JohnPaulRingoGeorge保存和退出。输入命令行如下:sort beatles.txt运行结果如下:GeorgeJohnPaulRingo操原创 2022-01-26 19:04:31 · 1884 阅读 · 0 评论 -
Go语言的调试
日志:Go语言提高了log包,让应用程序能够将日志写入终端或文件。Go语言提供的日志功能,程序清单如下:package mainimport( "log")func main(){ log.Printf("This is a log message.")}运行结果如下:2022/01/25 19:10:06 This is a log message.记录致命错误,程序清单如下:package mainimport( "errors" "lo原创 2022-01-25 20:18:36 · 1096 阅读 · 0 评论 -
Go语言的使用包实现代码重用
导入包,程序清单如下:package mainimport( "fmt")func main(){ fmt.Println("Hello World!")}Go语言以package语句打头。main包是一种特殊的包,其特殊之处在于不能导入。对main包的唯一要求是,必须声明一个main函数,这个函数不接受任何参数且不返回任何值。简而易之,main包是程序的入口。在main包中,可使用import声明来导入其它包。导入包后,可使用其中被导出的标识符。安装第三方包:要原创 2022-01-25 18:20:45 · 1643 阅读 · 0 评论 -
Go语言的通道
《Effective Go》有一句话很好地说明了Go语言的并发实现理念:“不要通过共享内在来通信,而通过通信来共享内存。”通道的创建语法如下:c:=make(chan string)使用内置函数make创建一个通道,这是使用关键字chan指定的。向通道发送消息的语法如下:c<="Hello World"从通道那里接收消息的语法如下:msg:=<-c要从通道那里接收消息,需要在<-后面加上通道名。可使用简短变量赋值,将来自通道的消息直接赋给变量。箭头向左表示数原创 2022-01-24 21:27:53 · 727 阅读 · 0 评论