
go
码灵
爱码。
平时学习新的知识,看到了新的东西,记录下来。
展开
-
Goland 使用小技巧
1 使用GOPATH配置项目时,记得关闭下面选项。原创 2024-09-18 08:39:21 · 156 阅读 · 0 评论 -
GoLand设置GOROOT报错The selected directory is not a valid home for Go SDK
文件,加上自己的版本号即可。进入Go的安装目录,如。原创 2023-10-24 15:32:39 · 793 阅读 · 0 评论 -
go 生成强密码(大小写字母、数字、特殊字符)
【代码】go 生成强密码(大小写字母、数字、特殊字符)原创 2022-09-05 15:34:07 · 868 阅读 · 0 评论 -
go编译问题收集
在linux上,在目录$GOPATH/src/project1下存在main.go importPackage。go build 报错,格式不对;这时去掉“./”,go build 编译ok。main.go文件引入如下。原创 2022-08-11 11:35:53 · 542 阅读 · 0 评论 -
go学习笔记
1.1 go hello Word1.2 go 变量定义1.4 go多重赋值和匿名变量1.5 go常量的定义1.6 go多种变量和常量的定义1.7 go iota枚举1.8 go常用数据类型1.9 go格式化输出1.10 go输入1.11 go类型转换1.12 go类型别名1.13 go运算符1.15 go switch语句1.16 go循环语句2.1 go无参数无返回值的函数2.2 go有参数无返回值函数2.3 go 不定参数函数2.原创 2022-03-16 22:28:05 · 868 阅读 · 0 评论 -
Go Modules 终极入门
目录什么是 Go ModulesGOPATH 的那些点点滴滴GOPATH 是什么为什么弃用 GOPATH 模式在 GOPATH 模式下的产物Go Modules基本使用所提供的命令所提供的环境变量开启 Go Modules初始化项目查看 go.mod 文件查看 go.sum 文件查看全局缓存Go Modules 下的 go get 行为go get 的拉取行为go get 的版本选择Go Modules 的导入路径说明不同版本的导入路径原创 2022-01-26 10:28:23 · 886 阅读 · 0 评论 -
librdkafka配置参数
Configuration propertiesGlobal configuration propertiesPropertyC/PRangeDefaultImportanceDescriptionbuiltin.features*gzip, snappy, ssl, sasl, regex, lz4, sasl_gssapi, sasl_plain, sasl_scram, plugins, zstd, sasl_oauthbearer, http, oidclow原创 2022-01-25 10:53:36 · 1683 阅读 · 0 评论 -
flag包使用
包flagpackage flagimport "flag"flag包实现了命令行参数的解析。要求:使用flag.String(), Bool(), Int()等函数注册flag,下例声明了一个整数flag,解析结果保存在*int指针ip里:flagname为命令行输入参数import "flag"var ip = flag.Int("flagname", 1234, "help message for flagname")...原创 2021-10-29 10:24:54 · 248 阅读 · 0 评论 -
go 报错undefined: syscall.SIGUSR1处理-小白笔记
在 go 的安装目录修改 Go\src\syscall\types_windows.go,增加如下代码:var signals = [...]string{ // 这里省略N行。。。。 /** 找到此位置添加如下 */ 16: "SIGUSR1", 17: "SIGUSR2", 18: "SIGTSTP", } /** 兼容windows start */func Kill(...interface{}) { return;}const原创 2021-07-17 08:21:49 · 6990 阅读 · 2 评论 -
解决go包管理代理网址无法访问:proxy.golang.org-小白实操记录
默认使用的是proxy.golang.org,在国内无法访问,如下图所示:github.com/Shopify/sarama@v1.27.0: Get "https://proxy.golang.org/github.com/ time out解决方法换一个国内能访问的代理地址:https://goproxy.cn执行命令go env -w GOPROXY=https://goproxy.cn重新执行命令,完美通过!...原创 2021-06-07 14:48:34 · 3656 阅读 · 0 评论 -
golang 不翻墙安装golang.org/x/net
下载安装golang.org/x/net其实网上有很多的文章,但总的归来是有两种:方法一:为了使包的导入方式不变,我们需要在src目录下面构造目录结构$mkdir -p $GOPATH/src/golang.org/x/$cd $GOPATH/src/golang.org/x/$git clone https://github.com/golang/net.git net$go install net执行go install之后没有提示,就说明安装好了。方法二有人说 https:/原创 2021-03-21 10:46:29 · 1235 阅读 · 0 评论 -
7 go http接口的使用
下面介绍如何用go实现http客户端服务端1 http协议 超文本传输协议(HTTP HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,它详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。 HTTP协议通常承载于TCP协议之上,有时也承载于TLS或SSL协议层之上,这个时候就成了我们常说...原创 2020-04-25 22:41:35 · 1398 阅读 · 0 评论 -
6.6 go 文件tcp传输客户端
/**文件传输客户端*/package mainimport ( "io" "fmt" "os" "net" )//发送数据func SendFile(path string,conn net.Conn){ //打开文件 f,err:=os.Open(path) if err!=nil{ fmt.Println("os.Open err=",err); r...原创 2020-04-13 22:55:50 · 173 阅读 · 0 评论 -
6.5 go 获取文件属性 os.Stat
/**获取文件属性*/package mainimport ( "fmt" "os")func main(){ list:=os.Args // go run goname fileName if len(list)!=2{ fmt.Println("use: xxx file") return } fileName:=list[1] info,err:=...原创 2020-04-13 22:53:41 · 503 阅读 · 0 评论 -
6.4 go tcp客户端可输入也可接收服务端回复
/*tcp客户端可输入也可接收服务端回复*/package mainimport ( "fmt" "net" "os")func main(){ //主动连接服务器 conn,err:=net.Dial("tcp","127.0.0.1:8000") if err!=nil{ fmt.Println("err=",err) return } defer c...原创 2020-04-13 22:51:26 · 373 阅读 · 0 评论 -
6.2 go tcp客户端简单实现
/*tcp客户端*/package mainimport ( "fmt" "net")func main(){ //主动连接服务器 conn,err:=net.Dial("tcp","127.0.0.1:8000") if err!=nil{ fmt.Println("err=",err) return } defer conn.Close() //发送数...原创 2020-04-13 20:31:19 · 197 阅读 · 0 评论 -
6.1 go tcp服务端简单实现
/*tcp服务端*/package mainimport ( "fmt" "net")func main(){ //监听 listener,err:=net.Listen("tcp","127.0.0.1:8000") if err!=nil{ fmt.Println("err=",err) return } //阻塞等待用户连接 conn,err...原创 2020-04-13 20:29:07 · 197 阅读 · 0 评论 -
5.23 go 通过select 实现超时功能
/**通过select实现超时功能*/package mainimport ( "fmt" "time")func main(){ ch:=make(chan int) quit:=make(chan bool) go func(){ for{ select{ case num:=<-ch: fmt.Println...原创 2020-04-12 21:22:49 · 267 阅读 · 0 评论 -
5.22 go select介绍
/* Go里面提供了一个关键字select,通过select可以监听channel上的数据流动 selec的用法与switch语言非常类似,由select开始一个新的选择快,每个选 择条件由case语句来描述。 但是select的每个case语句必须是一个IO操作。 select结构 select{ case <-chan1: //如果chann...原创 2020-04-12 21:20:57 · 367 阅读 · 0 评论 -
5.21 ticker的使用
/** ticker定时器周期执行*/package mainimport ( "fmt" "time")func main(){ ticker:=time.NewTicker(time.Second) i:=0 for{ <-ticker.C i++ if i==6{ //停止定时器 ticker.Stop() break ...原创 2020-04-12 21:18:54 · 559 阅读 · 0 评论 -
5.20 go停止和重置定时器(time)
package mainimport ( "fmt" "time")//01 停止定时器func main2(){ timer:=time.NewTimer(time.Second*2) go func(){ <-timer.C fmt.Println("时间到") }() timer.Stop() for{} }//01 重置定时...原创 2020-04-12 21:17:13 · 1615 阅读 · 0 评论 -
5.19 go time实现延时功能
package mainimport ( "fmt" "time")func main(){ //01定时2s,阻塞2s,2s后产生一个事件,往channel写内容 <-time.After(2*time.Second) fmt.Println("时间到") //02 time.Sleep(time.Second*2) fmt.Println("时间到") //...原创 2020-04-12 21:14:41 · 1762 阅读 · 0 评论 -
5.18 time定时器
/**timer定时器*/package main import ( "time" "fmt")func main1(){ //创建一个定时器,设置时间为2s,2s后,往time通道写内容(当前时间) timer:=time.NewTimer(2*time.Second) fmt.Println("当前时间:",time.Now()) //2s后,往time...原创 2020-04-12 21:12:15 · 379 阅读 · 0 评论 -
5.17 go单向通道的应用
/** 单向通道作为参数**/package mainimport "fmt"func write(ch chan<-int){ for i :=0;i<11;i++{ ch<-i*i } close(ch) }func read(ch <-chan int){ for num:=range ch{ fmt.Println("接收...原创 2020-04-09 12:45:55 · 225 阅读 · 0 评论 -
5.16 go 单向的channel
/** 默认情况下 通道是双向的,可以发送接收数据 但是,我们常见一个通道作为参数进行传递而值希望对方是单向使用的,要么只让它发送 数据,要么只让他接收数据,这时我们可以指定通道的方向。 单向channel变量声明非常简单如下: var ch1 chan int //ch1是一个正常的channel双向的 var ch2 chan<- float64 //ch2...原创 2020-04-09 12:45:18 · 451 阅读 · 0 评论 -
5.15 go 通过range读取channel值
package mainimport ( "fmt")func main(){ //创建一个无缓存的channel ch:=make(chan int) //新建一个goroutine go func(){ for i:=0;i<5;i++{ ch <- i //往通道写数据 } close(ch)//关闭后无法在发送数据 //ch&...原创 2020-04-08 12:53:41 · 1178 阅读 · 0 评论 -
5.7 go runtime GOMAXPROCS
/**GOMAXPROCE调用runtime.GOMAXPROCS()用来设置可以并行计算cpu核数的最大值并返回之前的值。默认值所有机器核数*/package mainimport ( "fmt" "runtime")func main(){ //设置cpu最大核数 n:=runtime.GOMAXPROCS(1) fmt.Println("之前核数=",n)...原创 2020-04-08 12:48:45 · 626 阅读 · 0 评论 -
5.9 go channel
1channel goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine奉行通过通信来 共享内存,而不是共享内存来通信。 引用类型channel 是CSP模式的具体实现,用于多个goroutine通信。其内部实现了同步,确保并 发安全。 2channel 类型 和map类似,channel也是一个...原创 2020-04-08 12:50:40 · 261 阅读 · 0 评论 -
5.10 go通过channel实现同步
/** 两人同时打印,竞争资源;通过channel实现同步*/package mainimport ( "fmt" "time")//全局变量 创建一个channelvar ch=make(chan int)func Printer(str string){ for _,data:=range str{ fmt.Printf("%c",data) time.Sle...原创 2020-04-08 12:51:13 · 259 阅读 · 0 评论 -
5.14 go 关闭channel
/** channel 不像文件一样需要经常去关闭,只有当你确定没有任何发送数据了,或者你想显式的结束range 循环之类的,才去关闭channel. 关闭channel后,无法再向channel发送数据,否则引起panic 关闭channel后,可以继续接收数据 对于nil channel 无论收发都会被阻塞*/package mainimport ( "fmt")f...原创 2020-04-08 12:52:59 · 319 阅读 · 0 评论 -
5.13 go 有缓冲的channel
/**有缓冲的通道是一种在被接收前能存储一个或者多个值得通道这种类型不要求goroutine之间必须同时完成发送和接收。只有在通道中没有要接收的值时,接收动作才会阻塞。只有在通道中没有可用缓冲区容纳被发送值时,发送动作才会阻塞。*/package mainimport ( "fmt" "time")func main(){ //创建一个无缓冲的channel ch:...原创 2020-04-08 12:52:34 · 257 阅读 · 0 评论 -
5.12 go 无缓冲的channel
/** 无缓冲的channel 无缓冲的通道是指在接收前没有能力保存任何值得通道。 这种通道进行发送和接收的交互行为本身就是同步的。其中任意一个操作 都无法离开另一个操作单独存在。*/package mainimport ( "fmt" "time")func main(){ //创建一个无缓冲的channel ch:=make(chan int,0) f...原创 2020-04-08 12:52:03 · 218 阅读 · 0 评论 -
5.11 go 通过channel实现数据同步和交互
package mainimport ( "time" "fmt")func main(){ //创建channel ch:=make(chan string) defer fmt.Println("主协程结束") go func(){ defer fmt.Println("子协程结束") for i:=0;i<6;i++{ fmt.Println...原创 2020-04-08 12:51:40 · 395 阅读 · 0 评论 -
5.8 go 解决多任务资源竞争问题
/** 两人同时打印,竞争资源 输出:F:\goWorkSpace\study\05协程>go run 08_解决多任务资源竞争问题.gowheolrlldo 并不是helloword,为了解决此问题;后续我们来学习chanel*/package mainimport ( "fmt" "time")func Printer(str string){ fo...原创 2020-04-08 12:49:12 · 233 阅读 · 0 评论 -
5.6 go runtime Goexit使用
/**Goexit调用runtime.goExit()将立即终止当前goroutine执行,调度器确保所有已注册defer延迟调度被执行。*/package mainimport ( "fmt" "runtime")func main(){ go func(){ defer fmt.Println("A defer go") func(){ de...原创 2020-04-08 12:48:23 · 642 阅读 · 0 评论 -
5.5 go runtime Gosched使用
/** runtime.Gosched()用于让出cpu时间片,让出当前的goroutine的执行权限 调度器安排其他的任务运行,并在下次某个时候从该位置恢复运行. 这就像跑接力赛,A跑了一会代码遇到runtime.Gosched()就该把接力棒交给B了 A歇着了,B继续跑。*/package mainimport ( "fmt" "runtime")fu...原创 2020-04-07 21:22:20 · 367 阅读 · 0 评论 -
5.4 主协程退出导致其他子协程没有运行就结束
package mainimport ( "fmt" "time")//主协程退出了,其它子协程也会退出func main(){ go func(){ i:=0 for{ i++ fmt.Println("i=",i) time.Sleep(time.Second) } }()//别忘了() }...原创 2020-04-07 21:19:33 · 954 阅读 · 0 评论 -
5.2 go goruntine的创建
/** 1goroutine 是什么? goroutine是Go并行设计的核心。goroutine说到底其实就是协程,但是它比线程更小,十几个goroutine可能体现在底层就是五六个线程,go语言内部帮你实现了这些goroutine之间的内存共享。执行goroutine只需极少的栈内存(大概是4-5kb),当然会根据相应的数据伸缩。正因为如此,可同时运行成千上万个并发任务。...原创 2020-04-07 21:14:42 · 495 阅读 · 0 评论 -
4.23 go拷贝文件
package mainimport( "fmt" "os" "io")func main(){ //1获取 命令行参数 执行方式 >go build 24_拷贝文件.go >24_拷贝文件.exe demo.txt dem2o.txt list:=os.Args if len(list)!=3{ fmt.Println("use xxx srcFi...原创 2020-04-07 12:31:27 · 324 阅读 · 0 评论 -
4.22 go 文件的读写
package mainimport( "fmt" "os" "io" "bufio")/** 新建文件*/func WriteFile(path string){ //打开文件,新建文件 f,err:=os.Create(path) if err!=nil{ fmt.Println(err) return } //使用完文件后要关闭文件 defer ...原创 2020-04-07 12:31:06 · 147 阅读 · 0 评论