Golang在视频直播平台的高性能实践(含PPT下载)

Golang在视频直播平台的高性能实践(含PPT下载) 编者按:本文是杨武明在 2 月 27 日在 Gopher 北京聚会演讲基础上整理而成。转载请注明来自高可用架构公众号「ArchNotes」。 杨武明,熊猫 TV 首席架构师,曾担任奇虎 360 PC 网游技术架构负责人,前新浪微博平台资深后端开发、技术专家。对大型互联网架构有丰富的实践经验,擅长后端基础服务与组件开发,尤其高性能、高并发、大数据业务场景。 熊猫 TV 是一家视频直播平台,先介绍下我们系统运行的环境,下面这 6 大服务只是我们...阅读全文

51CTO博客 2020-11-08 20:47:26 高可用架构

用Go构建Teamwork项目的9条教训

用Go构建Teamwork项目的9条教训 编者按:本文由 Teamwork 高级工程师 Peter Kelly 授权「高可用架构」发布中文版。转载请注明来自高可用架构公众号「ArchNotes」。 我们爱 Go。 在过去的一年中,我们为了构建 Teamwork Desk 多个服务,写下了将近 20 万行 Go 代码。我们已经构建了该产品的十多个小型 HTTP 服务。 为什么要使用 Go? Go 是一种快速(非常快)的静态类型编译语言,它有强大的并发模型、垃圾收集、优异的标准库、无继承、传奇的作者...阅读全文

51CTO博客 2020-11-08 20:07:43 高可用架构

Spring Security 实战干货:OAuth2第三方授权初体验

1. 前言 Spring Security实战干货系列 现在很多项目都有第三方登录或者第三方授权的需求,而最成熟的方案就是OAuth2.0授权协议。Spring Security也整合了OAuth2.0,在目前最新的Spring Security 5中整合了OAuth2.0的客户端,我们可以很方便的使用Spring Security OAuth2来实现相关的需求。 接下来跟着胖哥的节奏搞一个第三方授权先直观的感受一下。假设我现在也不会OAuth2.0从零开始,产品给了一个使用码云做授权的需求,我...阅读全文

简书 2020-11-09 09:32:42 码农小胖哥

golang反射自定义tag

维基百科中反射的定义:在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。golang reflect包实现了反射。动态的获得程序运行时对象的结构和信息。reflect 包中提供了两个基础的关于反射的函数来获取上述的接口和结构体:func TypeOf(i interface{}) Type func ValueOf(i interface{}) Value大体上可以这样...阅读全文

简书 2020-11-09 01:32:41 nil_ddea

关于 go 切片与数组的三个结论

# 关于 go 切片与数组的三个结论 众所周知,在方法中改变字段的值是否对外界生效取决于该方法是值类型还是指针类型 ``` go func (s Struct)setX() {……} // 值方法 无效 func (s *Struct)setY() {……} // 指针方法 生效 ``` 同样的,在函数中改变参数是否对外界生效也取决于参数是值类型还是引用类型 ``` go i := 1 func setI(I int) { I = 2 } /...阅读全文

Go语言中文网 2020-11-08 23:59:40 yvii2202

Docker 中使用 scratch 镜像构建 Go 应用镜像,容器报错:X509: Certificate Signed by Unknown Authority

本文首发于 Ficow Shen's Blog,原文地址: Docker 中使用 scratch 镜像构建 Go 应用镜像,容器报错:X509: Certificate Signed by Unknown Authority。 内容概览 前言 将证书添加到镜像中 不使用 HTTPS 总结 前言 当使用 FROM scratch 构建基于 scratch 镜像的 Go 应用镜像时,如果没有向镜像中添加证书颁发机构(CA, Certificate Authority)发布的证书,您就有可能遭遇这个错...阅读全文

简书 2020-11-08 21:32:42 FicowShen

Golang编译器源码分析(1)

一、Golang源码下载及安装官网地址: https://golang.google.cn/dl/ 下载安装包或源码包均可 wget https://golang.google.cn/dl/go1.15.4.src.tar.gz 安装包下载很简单 设置好环境变量。。 源码安装 cd go/src ./all.bash 安装报错 # ./all.bash ./make.bash: line 165: /root/go1.4/bin/go: No such file or directory Bui...阅读全文

Segmentfault 2020-11-10 15:32:33 Kevin_Guo

struct

1、声明 type human struct { name string age int height int } var h human fmt.Printf("%p,%v\n",&h,h) 0xc000004460,{ 0 0} 简化写法 type human struct { name string age,heignt int } 使用new type human struct { name string age,heignt int } h :=new(human) fmt.Print...阅读全文

简书 2020-11-08 17:32:42 陆人知

go语言参数传递到底是传值还是传引用?

前言哈喽,大家好,我是asong。今天女朋友问我,小松子,你知道Go语言参数传递是传值还是传引用吗?哎呀哈,我竟然被瞧不起了,我立马一顿操作,给他讲的明明白白的,小丫头片子,还是太嫩,大家且听我细细道来~~~。​实参与形参数我们使用go定义方法时是可以定义参数的。比如如下方法:func printNumber(args ...int)这里的args就是参数。参数在程序语言中分为形式参数和实际参数。形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。实际参数:在...阅读全文

Segmentfault 2020-11-10 15:32:33 asong

Golang基本语法

date: 2019-03-21 21:30:00 本文为2019春节期间用golang刷LeetCode时遇到的基础使用方式,备注一下,后续可直接复制取用。 array package main import "fmt" func main() { //dealare way1 var arr1 [5]int //可以认为[5]int是一种类型 fmt.Println(arr1) //dealare way2 arr2 := [...]int{1,2,3,4,5} fmt.Println(ar...阅读全文

简书 2020-11-08 16:32:43 满地可_1994

Egg.js+MongoDB+uni-app 开发小程序 (一) 项目后台基搭建

相关说明 Egg.js(以下简称Egg) Express 是 Node.js 社区广泛使用的框架,简单且扩展性强,非常适合做个人项目。但框架本身缺少约定,标准的 MVC 模型会有各种千奇百怪的写法。Egg 按照约定进行开发,奉行『约定优于配置』,团队协作成本低。 Sails 是和 Egg 一样奉行『约定优于配置』的框架,扩展性也非常好。但是相比 Egg,Sails 支持 Blueprint REST API、WaterLine 这样可扩展的 ORM、前端集成、WebSocket 等,但这些功能都...阅读全文

简书 2020-11-08 10:32:41 大王派你去巡山

「推荐系统从0到1」前言

奥利给! 初衷 自己在工作中做推荐系统也有不短的时间了,基本上把推荐系统的各个环节都接触到并自己亲自动手操作了一遍,但是并没有完整的自己去实现一整套推荐系统,心里感觉总是少了点什么。 程序员嘛,就算有现成的轮子,也想自己实现一套,这样可以更好的了解其中的细节,查缺补漏,从而提升自己。 同时也可以给正在学习推荐系统的同学们提供个参考吧!另外,我自己的经验肯定也有不对或者不完善的地方,所以也希望在这个过程中可以和大家探讨和学习! 计划 会定期更新「推荐系统从 0 到 1」的这个系列,目标一周至少更新...阅读全文

简书 2020-11-07 22:32:43 金小锋

2020-11-07:已知一个正整数数组,两个数相加等于N并且一定存在,如何找到两个数相乘最小的两个数?

福哥答案2020-11-07: 1.哈希法。 2.排序+双指针夹逼。 golang代码如下: package main import ( "fmt" "sort" ) const INT_MAX = int(^uint(0) >> 1) func main() { nums := []int{2, 1, 3, 4, 5, 6, 9, 8, 7} fmt.Println(twoSumMultiplication1(nums, 12), "哈希法") fmt.Println(twoSumMultip...阅读全文

简书 2020-11-07 22:32:43 福大大架构师每日一题

go wire 依赖注入入门

什么是依赖注入(DI)要理解什么是依赖注入首先我们要知道什么事控制反转控制反转控制反转是面向对象编程中的一种设计原则或者设计模式,可以用来降低代码之间的耦合度,例如如下代码, class A 中有一个属性的类型是class B,如果在不使用控制反转的模式时,class需要自己新建class B的实例,这就导致了耦合。为了解耦,就出现了控制反转的模式,即将依赖的获得反转,不再由使用方创建依赖,而是由外部系统注入。class A { Entity B; }什么是依赖注入依赖注入是一种标准的技术,用于...阅读全文

Segmentfault 2020-11-10 13:32:33 Leoython

Golang中的&与*

&和*用于指针和值的转换 var a int = 3 这时候,&a代表变量a的内存地址,可以自行Printf一下,stackoverflow上也有案例 则有*&a == a == 3,*姑且可视为取值 让我们来看以下代码: package main import "fmt" //简单的一个函数,实现了参数+1的操作 func add1(a *int) int { // 请注意, *a = *a+1 // 修改了a的值 return *a // 返回新值 } func main() { x := ...阅读全文

简书 2020-11-07 20:32:47 Cyvadra

golang基于redis和机器内存的多级缓存

matryoshka 支持分布式环境,基于redis和机器内存(memory)的多级缓存。 一级缓存使用 freecache作为本地缓存,当数据在本地缓存中不存在时,会向第二级缓存请求数据。 二级缓存默认使用redis作为分布式缓存,当数据在二级缓存中不存在时,会向资源层请求数据。 当资源层某条数据更新,可以将缓存中对应的数据删除,二级分布式缓存会直接删除,一级内存缓存会默认利用redis的 sub/pub 机制,将所有机器下的数据删除。 功能 支持每级缓存的请求qps、命中qps、请求资源层q...阅读全文

简书 2020-11-07 20:32:47 smoke_zl

构造请求日志分析系统

请求日志记录哪些数据time_local : 请求的时间remote_addr : 客户端的 IP 地址request_method : 请求方法request_schema : 请求协议,常见的 http 和 httpsrequest_host : 请求的域名request_path : 请求的 path 路径request_query : 请求的 query 参数request_size : 请求的大小referer : 请求来源地址,假设你在 a.com 网站下贴了 b.com 的链接,那...阅读全文

Segmentfault 2020-11-10 10:32:37 rife