Go语言
levonmo
关注后端, Java
展开
-
golang协程池
package mainimport ( "fmt" "time")type Pool struct { work chan func() // 任务 size chan struct{} // 数量}func New(size int) *Pool { return &Pool{ work: make(chan func()), size: make(chan struct{}, size), }}func (p *Pool) worker(task .原创 2021-01-20 17:16:16 · 309 阅读 · 0 评论 -
GO语言使用map的创建于要注意的
var m1 map[int]string m1[1] = "11" //还没有初始化,不能使用,这行代码会报错 fmt.Println(m1) m2 := make(map[int]string) //初始化,可以使用了 m2[2] = "12313" fmt.Println(m2) m3 := make(map[int]string,10) //指定初始化的容量(这里可以考...原创 2018-07-21 16:30:49 · 497 阅读 · 0 评论 -
关于go的数组与切片
go语言的数组是切片的基础,切片是由一个底层数组提供元素的,切片可以理解为对底层数组的一个索引,对切片进行修改会影响底层数组,直接对底层数组进行更改,同样会对切片造成影响。一个数组可以有多个切片语法上,a := [5]int{} 这种写死元素个数的就是数组,像这样 b := []int{} 没有写死的是切片把数组传递给形参,形参的类型必须是与实参的元素个数一致,但是如果是切片的话,任何切片...原创 2018-07-21 16:53:16 · 208 阅读 · 0 评论 -
对内置函数make和new的理解
make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。new就是new ,跟所有语言的new一样的,make主要是用来处理chan 和数组切片和map对于new出来的结构体会进行初始化,但是如果new一个切片类型的: new([]int),那么这个切片是没有底层数组的支持是不能使用的如果new一个结构体里面有指针的话,那么这个指针类型初...原创 2018-07-21 20:04:15 · 309 阅读 · 0 评论 -
关于go语言的继承,封装和多态(持续更新)
对于继承,go语言没有继承,go是使用组合的形式实现了代码重用,当一个结构体包含了另一个结构体,那么外面的结构体就拥有里面结构体的所有 成员变量 和 方法 ,这就有点继承的味道了。外面的结构体就是里面结构体的子类,里面的是父类,子类拥有更加强大的功能。子类还可以重写父类的方法,这就有点多态的味道了(这里要主要的是里面的结构体一定要是匿名才可以,我也不知道为什么)接口: 定义一个接口:例如...原创 2018-07-21 21:34:02 · 4302 阅读 · 0 评论 -
go的strings常用的对字符操作的api
func main() { //找到第一次出现该字符串的位置 fmt.Println(strings.Index("qwertyu","er")) //复制该字符串几次 fmt.Println(strings.Repeat("qwe",3)) //替换字符串 fmt.Println(strings.Replace("mkl mkl mkl","mk","mo",-1))原创 2018-07-21 22:18:35 · 416 阅读 · 0 评论 -
go语言中结构体,map与json和之间的转换需要注意的(持续更新)
type IT struct { Company string `json:"comp"` //在json中的别名 Subjects []string IsOk bool `json:",string"` //在json中 将bool类型转换为string类型 Price float64 `json:"-"` //在json中不输出该字段}结构体转json//结构体转jso...原创 2018-07-22 05:59:29 · 2060 阅读 · 0 评论 -
go语言的读写文件
以create方法写文件//以新建的方式打开,Create方法每次打开都会清空里面的内容f,err := os.Create("hah.txt")if err != nil { fmt.Println(err) return}defer f.Close()f.WriteString("hello,KingSoft")以open只读的方式打开//open是以只读的...原创 2018-07-22 18:10:15 · 310 阅读 · 0 评论 -
Golang中关闭管道channel需要注意的问题
当执行了 close(ch) ,那么就不能向 管道发送信息了,但是在关闭之前留在管道里面的消息还可以 被消费。当之前的消息被消费完了,那么继续消费不会阻塞了,而是返回零值 ...原创 2018-07-22 18:27:44 · 2211 阅读 · 4 评论 -
Golang心跳包
server端 package mainimport ( "net" "fmt" "os" "time")func main() { server := ":7373" netListen, err := net.Listen("tcp", server) if err != nil{ LogC("connect error: "原创 2018-09-17 18:46:25 · 2688 阅读 · 0 评论 -
Go语言产生随机数
func main() { //产生随机数,设置种子,种子参数一样,每次程序重新运行的随机数都一样 rand.Seed(666) for i := 0; i < 5 ; i++ { fmt.Println(rand.Int()) //产生很大的随机数 fmt.Println(rand.Intn(100)) //可以产生指定范围下的随机数 } //以当前的系统时间作为种...原创 2018-07-21 14:26:46 · 2498 阅读 · 0 评论 -
go语言数组的始化方式,swap()方法
func main() { var a [5]int = [5]int{1,2,3,4,5} fmt.Println(a) //使用自动类型推导 b := [5]int{1,2,3,4,4:999} //可以指定初始化数组中的第几个元素 fmt.Println(b) c := [...]int{1,2,3,4,5,6,7} fmt.Println(len(c)) ...原创 2018-07-21 13:57:12 · 4110 阅读 · 0 评论 -
实现grpc的unix通讯
server端//go:generate protoc -I ../helloworld --go_out=plugins=grpc:../helloworld ../helloworld/helloworld.protopackage mainimport ( "log" "net" "golang.org/x/net/context" "google.golang.or...原创 2018-07-23 11:13:15 · 1442 阅读 · 0 评论 -
用Go语言写的一个多人聊天室
package mainimport ( "net" "fmt" "strings" "time")//保存在线用户var onlineMap map[string]Client = make(map[string]Client)var message = make(chan string)type Client struct { C chan string Na...原创 2018-07-11 17:06:04 · 600 阅读 · 0 评论 -
《Go程序设计语言》第五章总结
第五章:函数 ·当函数存在返回值的时候必须显式地以return语句结束,除非函数明确不会走完整个流程(比如一个for死循环) ·函数的类型 称为函数签名,当一个函数拥有相同的形参列表和返回列表时,认为这两个函数的类型或签名是相同的。形参和返回参数的名称不会影响函数的类型 ·实参是按值传递的,所以函数接收到的是没有实参的副本,修改形参的变量并不会影响到实参的值。 但是,如果提供的实...原创 2018-07-23 16:33:18 · 285 阅读 · 0 评论 -
GO的多协程程序,多个CPU执行,共享数据出现不一致的问题
首先,先看看这一段代码var x, y intfunc main() { go func() { x = 1 fmt.Println("y = ", y) }() go func() { y = 1 fmt.Println("x = ", x) }() time.Sleep(time.Second)}打印的结果又很多种y = 0 x = 1x =...原创 2018-07-18 15:54:42 · 2160 阅读 · 1 评论 -
go语言的走迷宫算法
package mainimport ( "os" "fmt" "strings" "strconv")func main() { arr := read("1.txt") ss := walk(arr, point{0, 0}, point{len(arr) - 1, len(arr[0]) - 1}) for _,v := range ss{ for _,vv ...原创 2018-07-24 13:58:04 · 457 阅读 · 0 评论 -
解决go语言访问网站编码不一致问题
package mainimport ( "net/http" "fmt" "io/ioutil" "golang.org/x/text/transform" "io" "bufio" "golang.org/x/net/html/charset" "golang.org/x/text/encoding")func mai原创 2018-07-24 14:28:51 · 2172 阅读 · 0 评论 -
《Go程序设计语言》第三,四章总结
第三章:基本数据 ·Go的数据类型分四大类: 基本类型,聚合类型,引用类型,接口类型 ·基本类型:数字,字符串,布尔 ·聚合类型:数组,结构体 ·引用类型:指针,map,函数,通道 ·接口类型:见第七章 ·字符串 ·内置的len(str),返回的是str的字节数(而不是字符的个数) ·字符串是不可变的,所以不允许修改,eg: s := "hello,wor...原创 2018-07-19 11:09:05 · 218 阅读 · 0 评论 -
《Go程序设计语言》第一,二章总结
第一章: ·必须精确导入需要的包,否则出现编译错误 ·GO不需要在语句或声明的后面加分号,除非有多个语言出现在同一行,换行符会被转化为分号 ·在doc下使用go fmt + 文件 可以格式化源代码(就是有的你后面加上分号,go fmt会帮你去掉) ·在go中,所有的索引都是半开区间,即是包含第一个索引,不包含最后一个索引。比如[m:n]表示第m个元素到第n-1个元素 ·os.Args可...原创 2018-07-15 14:40:40 · 409 阅读 · 0 评论 -
go语言实现unix通讯
service端package mainimport ( "bufio" "fmt" "net" "time")func main() { var addr *net.UnixAddr addr, _ = net.ResolveUnixAddr("unix", "/tmp/unix_ss") unixListener, _ := net.ListenUni原创 2018-07-23 10:09:11 · 1969 阅读 · 0 评论