go语言学习(四):数组和切片

在go语言中,数组和切片都是集合类型,他们都是用来存储同一种类型的元素。1.数组类型的长度是固定的,而切片类型的长度是可变长的。如下面代码声明一个长度为5的数组s1和长度为5的切片s2,s1 := [5]int{1,2,3,4,5} s2 := []int{1,2,3,4,5}但是s1是不可变的,而s2是可变的,可以增加元素,长度随着元素数量而增长。因此数组是一个值类型,而切片是一个引用类型。2.切片的底层是一个数组,如下面代码:s3是s4的底层数组,s3 := []int{1, 2, 3, 4...阅读全文

51CTO博客 2021-04-20 09:23:22 朱晋君

Go strings

strings是Golang提供的专门用于字符串操作的标准库 字符串类型可视为特殊的切片类型,因此获取长度可直接使用内置的len函数,同时支持切片操作。 字符串中的字符实际是rune类型,即一个UTF-8字符(Unicode码点)。 strings库包括Render和Replacer两个结构体 字符 字符是信息表示单位,字符是一种符号。不同符号在不同的编码格式下所需存储单位不一样。 例如:ASCII编码中一个英文字母会占用1个字节的存储单位,一个中文汉字则会占用2个字节的存储单位。UTF8编码中...阅读全文

简书 2021-04-20 04:32:31 JunChow520

Visdom: RUST版使用类jQuery API的html解析操作库

在node里,cheeriojs这类的库对于html的解析与操作非常方便,熟悉jQuery的用户使用起来基本没有什么负担。Golang里也有Goquery这样优秀的库,提供了类似的书写体验。有了它们,我们在项目中需要用到对html文档进行处理,比如html网页内容抓取时,极大地减轻了我们的工作。相比于Node和Golang,RUST这类的库相对要欠缺一些,虽然也有scraper/select这样的crate存在,但对于习惯于jQuery这类库写法的人来说,总觉得书写有时候会有些繁琐不够直观。因此...阅读全文

手撸golang 仿spring ioc/aop 之11 增强2

缘起 最近阅读 [Spring Boot技术内幕: 架构设计与实现原理] (朱智胜 , 2020.6) 本系列笔记拟采用golang练习之 Talk is cheap, show me the code. Spring Spring的主要特性: 1. 控制反转(Inversion of Control, IoC) 2. 面向容器 3. 面向切面(AspectOriented Programming, AOP) 源码gitee地址: https://gitee.com/ioly/learning....阅读全文

简书 2021-04-20 00:32:32 老罗话编程

Go实践:Goroutine(go协程)调度原理及应用

什么是协程? 进程和线程 一个应用程序时运行在操作系统上的一个进程。进程是一个运行在自己独立内存空间的独立执行体,是操作系统进行资源分配的最小单位。一个进程则有一个或多个线程组成,这些线程是共享进程内存地址空间的执行体,是操作系统进行任务调度的最小单位。而使用多线程进行工作时,由于共享父进程的内存空间等资源,访问同一个数据需要对其进行加锁,保证同一时间只有一个线程操作一个数据。这样不仅会提高编码的复杂度,还会有多个线程抢占锁、线程切换带来的额外开销。 协程 在Go中,应用程序并发处理的部分被称作...阅读全文

简书 2021-04-20 00:32:31 HYIndex

闪电网络——区块链领域基于 Golang 的核心技术之一

在 2019年第五届 Gopher China 大会上,讲师方圆进行了主题为《闪电网络——BTC小额支付解决方案》的演讲,以下为演讲实录。 00 前言 今天我分享的主要内容包括以下两部分:首先简单介绍 BTC 的基本原理和交易流程;然后介绍闪电网络的基本原理和Go语言的实现版本LND。鉴于大家基本没有接触过闪电网络,我也会补充说明 LND 的使用过程。 在正式话题开始之前,我们先简单回顾下 Go 语言在区块链领域两个著名的项目。第一个是以太坊,以太坊相比于比特币的主要特点在于支持智能合约。智能合...阅读全文

51CTO博客 2021-04-19 22:42:39 mob604756f0bbf4

斗鱼基于 Golang 在高并发场景下的日志系统实践

1 概述 日志是记录系统中各种问题信息的关键,也是一种常见的海量数据。做好日志可以有效的解决排查问题效率低、业务异常无法及时发现等等问题。 斗鱼的业务是经典的高并发场景:我们会由于某些业务场景,用户请求量会十倍秒级突增。为了针对这种场景,提高服务性能,我们不仅要优化业务逻辑,同时还要提升日志等基础组件的性能。以下是我们斗鱼go的日志类库架构图: 从架构图的日志组件中我们列举了三个重要组成部分。首先是日志的使用,我们提供了sugar、desugar、lazy-output的三种模式。根据使用场景,...阅读全文

51CTO博客 2021-04-19 22:39:27 mob604756f0bbf4

TutorABC 董海冰:Golang + WebRTC 搭建实时音视频云实践

在 2019年第五届 Gopher China 大会上, TutorABC研发总监董海冰进行了题为《 用Golang搭建实时音视频云》的演讲。主要内容如下: 什么是TutorMeet+ 为什么使用Golang WebRTC 问题总结 关于SaaS 以下为演讲实录。 No.1 什么是TutorMeet+ 大家好,非常高兴来到 Gopher China 分享一下我们用 Go 语言做的事情。可能这个领域稍微有一点特殊,我准备的内容蛮多的。主要还是跟大家讲一下我们实时交互的研发过程和为什么采用 Go 语...阅读全文

51CTO博客 2021-04-19 22:32:22 mob604756f0bbf4

go学习笔记(二):go语言工作区介绍

上篇文章介绍了go语言开发环境的搭建,本文介绍一下go语言的工作区。在go语言的环境搭建过程中,需要了解3个环境变量:1)GOROOT:go语言安装的根目录,上篇文章中:D:\Program Files\go2)GOPATH:自己定义的工作空间3)GOBIN:生成的可执行文件的路径GOPATH是最复杂的一个环境变量。GOPATH是多个工作区的目录路径。这些路径存放go语言的源码文件、归档文件和编译后的可执行文件。要理解这个概念,就需要理解下面的3个知识:1.源码组织方式同java类似,go语言的...阅读全文

51CTO博客 2021-04-19 23:08:56 朱晋君

go学习笔记(一):go语言开发环境搭建

最近开始接触go语言,先搭建一套开发环境。1.进入go官方网站,https://golang.org/,国内有些网络可能不能访问,如果打不开,访问go语言中文网https://studygolang.com/dl我的开发环境是windows,下载windows安装包,如下图所示:2.软件100多M,下载完成后直接打开。点击next选择I accept ...,继续点击next,我选择安装在D盘,继续点击next,点击Install,等待几分钟,最后点击Finish,完成。3.打开IDEA,点击右...阅读全文

51CTO博客 2021-04-19 23:08:40 朱晋君

go语言学习(三):源码文件

go语言的源码文件包括命令源码文件、库源码文件和测试源码文件。 命令源码文件是程序执行的入口,属于main包,包含无参数无返回结果的main函数,同java类似,同一个包下面不建议存放多个main函数。命令源码文件编译或安装后生成可执行文件,存在当前执行命令的目录下。 库源码文件用于存放供其他代码使用的程序实体,构建时进行检查和验证,生成临时文件,安装时生成归档文件,存放在当前工作区的pkg目录。 测试源码文件主要存放测试相关的源码文件,包括功能测试、性能测试、程序运行示例等。下面详细讲一下命令...阅读全文

51CTO博客 2021-04-19 23:08:19 朱晋君

使用 Go 语言实现 ELF 文件保护——GoHack 冠军项目KAP

KAP 意在对 Linux ELF 在构建之后到上线运行的过程中对应用进行保护,可以通过加密的方式来保护 ELF 泄漏后无法被执行,还可以保护 ELF 在运行过程中不会被调试,也能监控被保护的 ELF 被篡改。且解密校验后运行是采用无文件的方式来运行,保证了解密后的 ELF 不落盘,且可以自定义运行前基线检查。相比于 Linux 默认方式,KAP 对完整性和保密性上进行了大幅度提升,并且还有一个未完全完成的Linux驱动来从内核态来保护 ELF。 1 目标 我 https://github.co...阅读全文

51CTO博客 2021-04-19 22:56:53 mob604756f0bbf4

[深度]Go同步和并发设计模式

在 2019年第五届 Gopher China 大会上,新浪微博平台研发中心架构组的工程师晁岳攀进行了主题为《Go同步和并发设计模式》的演讲,内容分为5个主题: 基本的同步原语 拓展同步原语 原子操作 Channel 内存模型 以下为演讲实录。 01 基本同步原语 基本同步原语简介什么是同步原语呢? 同步原语就是方便我们进行并发编程的一些类库工具。首先第一个大家最常用到基本的原语就是Mutex,他是一个互斥锁.我们都知道Goroutine中Mutex退出的时候,另外一个Goroutine才会可以...阅读全文

51CTO博客 2021-04-19 22:52:15 mob604756f0bbf4

Go 语言在百度 APP 中的实践

前言 在 2019年第五届 Gopher China 大会上,百度资深研发工程师陈肖楠进行了主题为《百度APP Go语言实践》的演讲,以下为演讲实录。 No.0 简介 我来自百度APP平台部,主要负责公司内规范建立和系统工具的开发。首先我将介绍一下我们公司的开发规范,然后针对这个规范,介绍我们在Go语言体系建设所做的工作;再针对这些体系建设,对其中三个项目展开详细的介绍。 这个是今天分享的大纲,主要分为以下四个部分: Go开发规范 Go语言体系 依赖管理 代码检查 No.1 Go 开发规范 首先...阅读全文

51CTO博客 2021-04-19 22:35:33 mob604756f0bbf4

腾讯微服务框架 Tars 的 Go 性能提升之路

前言 在 4 月 27 日举办的 Gopher China 2019 中,来自腾讯 Tars 团队的核心成员陈明杰进行了一场题为《Tars Go 性能提升之路》的演讲。陈明杰,负责腾讯容器云平台及机器学习平台的建设和运营,目前专注 Tars 开发框架的 Golang 版本开发。 以下为演讲实录。 No.0 前言 今天给大家带来微服务的解决方案 Tars 以及过程中的性能优化和容器解决方案里面的一些问题和经验。Tars 是将腾讯内部使用的微服务架构 TAF(Total Application Fr...阅读全文

51CTO博客 2021-04-19 22:29:02 mob604756f0bbf4

GO vs PHP ,谁更适合创业公司的中台搭建?(文末赠书)

前言 在 4 月 27 日举办的 Gopher China 2019 中,来自花椒直播的周洋进行了题为《花椒直播关于创业公司中台的技术思考与实践》的演讲,以下为演讲实录。 No.0 背景介绍 周洋:2009年我作为应届生,在金山软件工作过一年,主要从事的是C和C++的系统开发,简单接触了一些epoll和libevent还有boost asio等,这些工作经历相信也是我早期被Go语言从事网络开发所吸引的原因。2010年我来到新浪,学会了世界最好的语言,两年的时间一直从事PHP开发,即使转型Go语言...阅读全文

51CTO博客 2021-04-19 22:25:39 mob604756f0bbf4

深入理解Prometheus(GO SDK及Grafana基本面板)

最近我对Prometheus刮目相看了, 服务加一行代码就能轻轻松松地监控起来服务的CPU使用率、内存、协程数、线程数、打开的文件描述符数量及软限制、重启次数等重要的基本指标, 配合Grafana建立了直观的图表, 对查问题很有帮助, 故想写写折腾Prometheus和Grafana后得到的值得一讲的实践与理解. GO服务几个重要的基本指标Dashboard 介绍Prometheus是CNCF 的项目之一(ps.CNCF的项目代码都值得研究), 而且还是Graduated Projects. 同...阅读全文

51CTO博客 2021-04-19 22:21:34 mob604756f0bbf4

基于 Go 开源项目 MIMIO 的对象存储方案在探探的实践

前言 在 2019年第五届 Gopher China 大会上,探探研发工程师于乐做了题为《基于 MINIO 的对象存储方案在探探的实践》的技术演讲。探探作为一个亿级用户千万日活的社交平台,每天会处理用户上传的大量图片、视频等媒体文件。最初将所有的对象存储在S3上,但随着存储容量越来越大,开始着手调研自己的存储系统。 经过一番比较,纯 Go 写的 Minio 最适合探探的业务场景。Minio 在设计上去繁就简,接口完全兼容 S3 协议。本次演讲会重点分享 Minio 在探探应用实践过程中积累的一些...阅读全文

51CTO博客 2021-04-19 22:16:44 mob604756f0bbf4