聊聊golang的类型断言

序本文主要研究一下golang的类型断言类型断言x.(T)断言x不为nil且x为T类型如果T不是接口类型,则该断言x为T类型如果T类接口类型,则该断言x实现了T接口实例1func main() { var x interface{} = 7 i := x.(int) fmt.Println(reflect.TypeOf(i)) j := x.(int32) fmt.Println(j) }直接赋值的方式,如果断言为true则返回该类型的值,如果断言为false则产生runtime panic;j...阅读全文

Segmentfault 2020-11-29 03:32:37 codecraft

码了2000多行代码就是为了讲清楚TLS握手流程

来自公众号:新世界杂货铺前言呼,这篇文章的准备周期可谓是相当的长了!原本是想直接通过源码进行分析的,但是发现TLS握手流程调试起来非常不方便,笔者怒了,于是实现了一个极简的net.Conn接口以方便调试。码着码着,笔者哭了,因为现在这个调试Demo已经达到2000多行代码了!虽然码了两千多行代码,但是目前只能够解析TLS1.3握手流程中发送的消息,因此本篇主要分析TLS1.3的握手流程。特别提醒:有想在本地调试一番的小伙伴请至文末获取本篇源码。结论先行鉴于本文篇幅较长,笔者决定结论先行,以助各位...阅读全文

Segmentfault 2020-11-29 03:32:36 新世界杂货铺

golang的chan特性

go routine之间可以通过channel来通信。 1、<-chan只能用来发送的单向channel;chan<-只能用来接收的单向channel;chan双向channel 向<-chan发送数据 或者 接收chan<-的数据;编译失败 ``` var cc = make(<-chan int) close(cc) cc <- 23 # command-line-arguments .\main.go:48:7: invalid operation: close...阅读全文

Go语言中文网 2020-11-28 16:18:58 minwell

MAC安装VSCode,写GOLANG例子

1,下载VSCode1.1 下载地址:https://code.visualstudio.com1.2 点击安装包,安装完成1.3 设置简体中文。打开VSCode,按下command+shitf+p,进入命令行,然后输入Configure Language,选择简体中文,若没有则选择其他,安装简体中文,安装完成之后重启VSCode,即会显示中文。1.4 安装go包,进入命令行,输入go,然后点击install安装即可。1.5 规划路径。点击VSCode左上角文件图标,显示添加文件夹,即添加对应需...阅读全文

简书 2020-11-28 15:33:20 CStart

Golang 文件操作的那些事儿

Os模块的使用与源码研究 文件:计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。例如咱们常见的文件后缀名.exe,.txt,'.word'...等等 文件的基本操作可简单分为增、删两类,也就是咱们所说的CURD(增删改查),也是基于此两类操作。可简单理解为打开文件夹、CURD、关闭文件夹。结束~ golang对于文件基本上都是基于Golang的os模块,那让我们一起了解一下,那么Golang是如何对文件进行操作呢。Let's Go~ 打开文件 Golang...阅读全文

简书 2020-11-28 15:33:15 Payne_Wu

2020-11-28 Go iris 学习

环境:Mac Goland 一、Mac 上的 go环境的安装 1、下载安装包https://golang.org/dl/ 如果访问不了的话可以使用国内的地址https://golang.google.cn/ 2、配置环境变量 (1)打开.bash_profile文件,可以直接用文本编辑打开,一般这个文件在/Users/yep/.bash_profile 路径下(yep是个人电脑的用户名) image.png (2)打开bash_profile后添加以下路径 export GOROOT=/usr/...阅读全文

简书 2020-11-28 15:33:13 路飞lep

J2SE II一一HTTP、TCP、UDP、Socket解读

<meta charset="utf-8"> OSI是Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。 记忆方法:记住前面的第一个字 物 数 网 传 会 表 应 这七层每一层都有自己的作用,作用如下图分解: image 2、Http HTTP(Hyp...阅读全文

Linux IO模式及 select、poll、epoll详解(含部分实例源码)

同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。视频解析:epoll具体实现:https://www.bilibili.com/video/BV1PA41147Ad/支撑亿级io的底层基石 epoll实战揭秘:https://www.bilibili.com/video/BV1iJ411S7mv/异步IO原理:https://www.bilibili.com/video/BV1kt4y1v7Lj/一 概念说明在进行解释之前,首先要说...阅读全文

简书 2020-11-28 15:32:52 linux大本营

GolangRuntime学习

Runtime 简介和发展 Runtime 简介 Golang Runtime 是go语言运行所需要的基础设施 协程调度,内存分配,GC 操作系统以及CPU相关的操作的封装 Proof,trace,race检测 Map, channel,string等内置类型以及反射实现 同python和java不同,Go没有虚拟机的概念,runtime直接被编译成native code Go的runtime和用户代码一起打包在一个可执行的文件中 go 对系统调用的指令进行了封装,可以不依赖glibc Gola...阅读全文

简书 2020-11-28 15:32:46 LegendGo

Go的内存模型

这篇文章主要是为了阅读一篇 go 的文档,解释了什么情况下一个 goroutine 对变量写的值能被另一个 goroutine 可靠观察到,主要以意译为主,括号内为个人理解。无论是用单个通道来守护并发数据的实现还是使用 sync 和 sync/atomic 中的同步原语的实现,程序中多个 goroutine 并发操作相同数据时一定是串行的。(两种常见的并发模型: 使用专门 channel 来操作并发访问的数据,其它 goroutine 把自己的操作请求发给这个 channel;多个 gorout...阅读全文

Segmentfault 2020-11-29 03:32:36 focus

记一次mac安装php,以及redis扩展

说明该文档未使用mac自带的php要安装好的有brew安装phpbrew install php默认安装brew资源里的最新的安装路径启动:brew services start php 关闭:brew services stop php 重启:brew services restart php 安装路径: /usr/local/etc/php/7.4(我这里是7.4版本) 扩展路径: /usr/local/lib/php/pecl/20190902 下面这两个是为了编译redis.so使用: ...阅读全文

Segmentfault 2020-11-29 03:32:35 吃馍夹菜

Gox语言中使用OpenGL库进行GUI图形界面编程-GX24

Gox中使用fyne库进行GUI图形界面编程比较方便,唯一需要注意的是该库依赖于GLFW和OpenGL,有些虚拟机可能不支持,此时,Gox语言也支持使用Sciter库(请参见本系列有关文章),如何选择可以按自己所需考虑。 Gox中使用该库引用fyne包即可。 我们直接来看例子,实现一个简单计算器的代码如下: // 创建一个fyne的applicaition对象 appT = fyne_app.New() // 创建一个窗体对象,作为本程序的主窗体 windowT = appT.NewWindow...阅读全文

简书 2020-11-27 22:32:44 陆满庭

golang的理解

golang 1、天然的并发优势,特别适合 IO 密集应用(goroutine 有栈协程2k,OS thread是8m,内存方面有优势) 2、Golang 社区活跃,生态比较完善 3、go语言是一门静态语言,多人协作开发和维护更加安全可靠,直接编译成机器字节码后只需一个可执行文件即可,方便部署,性能方面接近c,c++(对比java,因为JVM每次运行相应的字节码(class字节码平台无关,一次编译到处运行)时,都要将字节码解释成对应的机器码。其中有很多的重复性工作,例如一个将被运行10000次的...阅读全文

简书 2020-11-27 22:32:44 邵红晓

带你踩gorm v2的坑-模型关系

最近在学习golang, 使用gin框架搭了个网站,于是在网上找golang的orm 找到gorm使用了两天突然发现v2已经发布了,看更新日志说提高了性能修复了很多bug,于是赶紧换了v2,以下纪录我使用gorm v2 踩过的坑 我使用gorm连接的是mysql, 在使用automigrate根据关系模型创建表的时候总是创建失败 首先看官方文档,简单的关联关系,其实理解了官方案例问题就不大. 但是在复杂关系的时候创建就会报错(无法添加外键约束等).这里我提供我自己实验出的一种解决方式: 以我自己...阅读全文

简书 2020-11-27 22:32:44 Kris_Shin

Kubelet 组件占用 CPU 过高的解决思路

问题发现 最近通过监控发现,我们容器云平台其中一个 kubernetes 集群的所有 worker 节点的 kubelet 进程均长时间占用 CPU 过高,奇怪的是 master 节点跟 monitor 节点都没有这个问题。 我们的第一反应是跟负载有关系,这些 worker 节点都运行了很多我们的业务 Pod 幸运的是,这个集群是我们的开发集群,并且这些 worker 节点都是物理机,资源是充足的,还没影响到业务,所以我们有充足的排查处理时间 环境信息 Kubernetes: v1.18.8 操...阅读全文

简书 2020-11-27 22:32:44 陈光辉_6c9f

golang面试 探探

发送http请求的过程以及用到的协议,传输层用到的是tcp还是udp tcp与udp协议以及三次握手四次挥手的详细过程 ?传输的具体东西 http协议有哪些 ?区别是啥?你们公司开发用的是什么http协议?https的加密过程? mysql的索引什么时候不能生效? mysql事务的特性?mysql的原子性是怎么做到的? redis用来做什么在项目里,redis的值更新怎么做的?redis宕机了之后怎么处理?mysql记录操作日志的日志名称 redis的定期删除key 项目里怎么处理的房间已经被预...阅读全文

简书 2020-11-27 22:32:40 呆临