go
文章平均质量分 78
烟草的香味.
这个作者很懒,什么都没留下…
展开
-
使用Go实现一个百行聊天服务器
作为客户端连接, 实现的功能简单来说就是一个大的聊天室, 用户发的消息会同步发给所有用户. (因代码篇幅和复杂度原因, 就不对代码做详细说明了)但总得来说, 作为一个玩具还是可以的, 而且也达到百行的要求咯.(这也是我改了几版才改到百行的…于是, 心血来潮下, 我也整了个。语言版本的聊天服务器嘛,, 代码量拢共不过百行.原创 2023-12-16 22:11:21 · 716 阅读 · 0 评论 -
Go打包附件内容到执行文件
将附件直接打包到二进制文件中原创 2023-03-11 13:53:15 · 684 阅读 · 0 评论 -
Go 管道关闭引发的探索
如何正确关闭 channel原创 2023-02-19 15:58:09 · 759 阅读 · 2 评论 -
Go内存逃逸
很久以前就听过过**内存逃逸**这个词, 最近了解了一下, 才发现是个很简单的概念. 只要把前言部分看完, 就已经了解了. 来吧...原创 2023-01-15 17:40:56 · 553 阅读 · 0 评论 -
golang error 使用
golang error原创 2022-12-11 23:01:09 · 773 阅读 · 0 评论 -
Go 异常处理流程
Go 异常处理流程原创 2022-10-09 19:47:55 · 580 阅读 · 0 评论 -
Go sync.Map探究
go sync.Map 内部实现原创 2022-09-14 09:13:30 · 299 阅读 · 0 评论 -
Golang 接口原理
以上, 简单的了解了GO接口的内部实现, 发现接口在实现上和普通的结构体变量十分不同, 其内部是通过一个特定的结构体来记录信息的. 知道了接口的实现, 我们在平常开发时, 碰到接口就应该注意一下, 若interface判断不为nil, 存储的值也可能为nil.最后,GO1.18之后增加了泛型的支持, 以前使用interface接收任意参数的场景 也可以使用泛型替代了....原创 2022-08-03 17:34:06 · 148 阅读 · 0 评论 -
Golang Context 简介
在写程序调用各种第三方库的时候, 经常会传一个叫做的参数. 之前基本上见到接, 根本不管是干什么用的, 直接无脑.但是, 传着传着就不免发生一些小疑问, 这个参数到底是干什么用的呢? 这么多库都在使用, 至少说明其是中的一个共识, 一个基础元素. 除了一定还有其他的值, 否则也不会作为参数来接收了.用了这么久, 都不知道它的作用, 这实在有点说不过去了, 于是抽时间来好好研究研究在中的作用.在源码包中, 很贴心的给出来官网介绍的文章: https://blog.golang.org/context在中, 协原创 2022-06-18 15:53:38 · 640 阅读 · 0 评论 -
GO/testing包
前言之前在写GO单元测试的时候, 使用了这个结构testing.T. 进来无事翻了翻, 发现testing包中还有一些其他的结构体, 想来是不同用处. 没想到GO的testing包竟然默默做了这么多支持, 之前竟然不知道.在testing包中包含一下结构体:testing.T: 这就是我们平常使用的单元测试testing.F: 模糊测试, 可以自动生成测试用例testing.B: 基准测试. 对函数的运行时间进行统计.testing.M: 测试的钩子函数, 可预置测试前后的操作.testin原创 2022-05-28 10:11:35 · 593 阅读 · 0 评论 -
go1.18新特性
前言最近突然发现golang更新版本1.18了, 于是迫不及待的来看看这个版本加了些什么新特性. 没准就有之前困扰很久的问题, 在新版本被官方解决了呢.先简单概述一下都有些什么变化, 后面再细说:增加泛型的支持系统库方法增加修复 bug另外, 像"系统内核更新"这种, 我们在实际开发中根本就无需关心的内容, 我就没有列出, 完整更新内容到官网去看吧. 1.18版本的官方说明链接: https://golang.google.cn/doc/go1.18其实, 整个看下来, 最大的变动就是增加原创 2022-03-19 23:36:46 · 530 阅读 · 0 评论 -
Golang 反射操作整理
前言反射是什么? 我们平常也是经常用到, 而且这名词都用烂了, 这里就不再详细介绍了.简单说, 就是有一个不知道是什么类型的变量, 通过反射可以获取其类型, 并可操作属性和方法.反射的用途一般是用作生成工具方法, 比如你需要一个ToString方法, 要将变量转为字符串类型, 如果没有反射, 就需要写: ToStringInt, ToStringBool…等等, 每一个类型都要加一个方法. 而有了反射, 只需要一个ToString方法, 不管是什么类型的变量, 都扔给他就好啦.对于PHP这种弱类型的原创 2021-10-29 22:04:46 · 556 阅读 · 0 评论 -
Go 常量定义
定义常量在各个语言中都是不可或缺的语法了. 而有些语言在常量的基础上, 增加了枚举类型, 比如C.enum Weekday { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY};上面的枚举, 对应的值依次为0到6.而在Go中, 是没有提供枚举类型的. 如果实现上面相同的功能, 难道要写成这样么?const .原创 2021-06-12 14:14:08 · 641 阅读 · 0 评论 -
GO 内存对齐
前言之前遇到过这样一个情况(发现问题的结构体并不长这样, 不过为了引出问题, 改了一下): type Test struct { b bool i3 int32 i8 int8 i64 int64 by byte } func main() { t := Test{} fmt.Printf("%d", unsafe.Sizeof(t)) } ...原创 2020-11-21 00:31:32 · 484 阅读 · 0 评论 -
golang chan 探究
前言之前在看golang多线程通信的时候, 看到了go 的管道. 当时就觉得这玩意很神奇, 因为之前接触过的不管是php,java,Python,js,c等等, 都没有这玩意, 第一次见面, 难免勾起我的好奇心. 所以就想着看一看它具体是什么东西. 很明显, 管道是go实现在语言层面的功能, 所以我以为需要去翻他的源码了. 虽然最终没有翻到C的层次, 不过还是受益匪浅.见真身结构体要想知道他是什么东西, 没什么比直接看他的定义更加直接的了. 但是其定义在哪里么? 去哪里找呢? 还记得...原创 2020-10-11 14:06:01 · 213 阅读 · 0 评论 -
golang 多协程的同步方法总结
之前用 go 写一个小工具的时候, 用到了多个协程之间的通信, 当时随手查了查, 结果查出来一大坨, 简单记录一下. golang中多个协程之间是如何进行通信及数据同步的嘞.共享变量一个最简单, 最容易想到的, 就是通过全局变量的方式, 多个协程读写同一个变量. 但对同一个变量的更改, 就不得不加锁了, 否则极易引发数据问题. 一般系统库都提供基本的锁, go 也提供了.package mainimport ( "fmt" "sync" "time")var num = 0// 互斥原创 2020-09-30 22:53:18 · 3525 阅读 · 0 评论 -
GO 文档笔记
引出在实际使用中经常会有这样的需求, 多个PHP项目中用到了同一套代码, 如果靠复制粘贴的话, 不光代码不好维护, 而且同步起来也麻烦.但是可以用 PHP 的包管理呀, composer. 那新的问题来了, 我们自己私人的包, 并不想开源出去, 怎么办呢?来了, 利用gitlabgithubgitee等管理自己的私有 composer 包. 这三个都是 git 管理工具, 使用起来都是一模一样的流程, 我就以访问速度比较快的gitee来举例.发布 composer 包首先创建一个项...原创 2020-06-18 22:35:57 · 181 阅读 · 0 评论 -
GO 切片实力踩坑
概述GO 语言的切片这两天用了用, 可以支持切割数组的中间部分. 但今天使用中, 出了 bug, 查了半天, 发现是切片的问题, 简单写个 demo 复现当时的情况:package mainimport "fmt"func main() { a := []int{1, 2, 3, 4, 5} b := a[2:4] b[0] = 9 fmt.Println(a)}你以为输出的是什么? 来, 看结果:[1 2 9 4 5]懵没懵?? 这是怎么回事呢?(我用个语言怎么老踩坑, 笨原创 2020-07-18 01:19:51 · 151 阅读 · 0 评论 -
GO 的方法集
前言之前在写 GOdemo 的时候, 写了这么一段程序(大概意思):package maintype Test struct {}func (test *Test) print() { println("test fun")}func main() { Test{}.print()}结果一编译就报错了: cannot call pointer method on Test literal差不多意思是不能调用指针方法. 我一看, 确实, print方法声明的是指针类型. 这么原创 2020-07-15 23:43:10 · 180 阅读 · 0 评论