golang

Go语言实战流媒体视频网站

泪湿孤枕 提交于 2020-01-27 22:10:02
第1章 课程介绍 介绍这门课程大纲,技术堆栈以及环境 1-1 prestudy 1-2 课程介绍及知识要点预习 第2章 一个例子了解golang工具链 通过一个简单的webservice具体从golang的工具链,到test,全面介绍golang在工程项目里需要掌握的知识点。 2-1 一个例子了解golang常用工具链 2-2 golang项目中test的写法 2-3 golang项目中benchmark的写法 2-4 章节总结 第3章 流媒体网站架构以及API模块的实现 本章通过实战演练,从网站的整体架构设计,到服务划分,数据库设计,到api模块的实现,全面讲述golang对webservice的实现以及代码分层架构的思想,同时辅以test cases的全程编写与指导,全面了解工程化golang项目的实现。 3-1 流媒体网站整体介绍与架构梳理 3-2 api设计与架构 3-3 api实现之详细设计(上) 3-4 api实现之详细设计(中) 3-5 api实现之详细设计(下) 3-6 api之http handler层 3-7 api之数据库层设计 3-8 api之数据库层实现_数据库连接 3-9 api之数据库层实现_实现User 3-10 api之数据库层实现_编写User Test Case 3-11 api之数据库层实现_User部分代码优化 3-12

构建最小的golang的docker环境

故事扮演 提交于 2020-01-27 06:17:58
来源 使用官方的镜像随便打包1G起步,依赖的centos或者ubantu环境太大。不仅浪费服务器磁盘空间,而且测试的时候频繁打包很慢。 直接上案例 FROM golang:1.12 as builder # 配置代理 ENV GOPROXY https://goproxy.cn # 设置go缓存 ENV GO111MODULE = on # 设置编码格式 ENV LANG en_US.UTF-8 ENV LANGUAGE en_US:en ENV LC_ALL en_US.UTF-8 # go缓存 WORKDIR /go/cache ADD go.mod . ADD go.sum . RUN go mod download # 项目工作路径 WORKDIR /go/release # 增加所有的项目到该工作路径下 ADD . . # 运行命令 RUN CGO_ENABLED = 0 GOOS = linux GOARCH = amd64 go build -o app main.go # 解决镜像太大的问题 FROM alpine:latest # 安装 /bin/bash 方便调试 RUN echo "https://mirror.tuna.tsinghua.edu.cn/alpine/v3.4/main/" > /etc/apk/repositories RUN apk

Chapter009 golang中map

為{幸葍}努か 提交于 2020-01-27 00:33:50
上一章: Chapter008 golang中数组和切片 本章纲要 一、map快速入门 一、map快速入门 1、map是key-value数据结构,又称为字段或者关联数组。类似其他编程语言的集合,在编程中经常使用 2、基本语法 var map 变量名 [ keytype ] valuetype 3、key的类型 (1)key可以为bool、数字、string、指针、channel (2)接口、结构体、数组 (3)通常为int 、string (4)注意:slice、map和function ** 不可以**,因为这几个没有办法用 == 来源: CSDN 作者: jessyl 链接: https://blog.csdn.net/qq_43681877/article/details/104088927

Golang 限流器 time/rate 使用介绍

烂漫一生 提交于 2020-01-27 00:05:28
  本主题为系列文章,分上下两篇。本文主要介绍 time/rate 的具体使用方法,另外一篇文章 《Golang 限流器 time/rate 实现剖析》 则着重介绍其内部实现原理。   限流器是后台服务中的非常重要的组件,可以用来限制请求速率,保护服务,以免服务过载。 限流器的实现方法有很多种,例如滑动窗口法、Token Bucket、Leaky Bucket 等。   其实 golang 标准库中就自带了限流算法的实现,即 golang.org/x/time/rate。该限流器是基于 Token Bucket(令牌桶) 实现的。   简单来说,令牌桶就是想象有一个固定大小的桶,系统会以恒定速率向桶中放 Token,桶满则暂时不放。 而用户则从桶中取 Token,如果有剩余 Token 就可以一直取。如果没有剩余 Token,则需要等到系统中被放置了 Token 才行。   本文则主要集中介绍下该组件的具体使用方法: 构造一个限流器   我们可以使用以下方法构造一个限流器对象: limiter := NewLimiter ( 10 , 1 ) ;   这里有两个参数: 第一个参数是 r Limit。代表每秒可以向 Token 桶中产生多少 token。Limit 实际上是 float64 的别名。 第二个参数是 b int。b 代表 Token 桶的容量大小。   那么

golang Context for goroutines

♀尐吖头ヾ 提交于 2020-01-26 18:06:13
概要 goroutine 的控制 取消控制 超时控制 goroutine 之间的传值 总结 概要 golang 的提供的 channel 机制是基于 CSP(Communicating Sequencial Processes)模型的并发模式. 通过 channel, 可以很方便的写出多个 协程 (goroutine)之间协作的代码, 将顺序的代码改成并行的代码非常简单. 改造成并行的代码之后, 虽然可以更好的利用多核的硬件, 有效的提高代码的执行效率, 但是, 也带来了代码控制的问题. 并行的代码显然比顺序执行的代码更难于管理和控制, 这时, 就得靠 golang 提供的 Context 接口来帮助我们控制 goroutine 了. goroutine 的控制 goroutine 之间最基本的控制, 就是通过 channel 来交互数据: 1 func routineSample() { 2 ch := make(chan int, 10) 3 go p1(ch) 4 go c1(ch) 5 go c2(ch) 6 7 time.Sleep(10 * time.Second) 8 } 9 10 func p1(ch chan int) { 11 fmt.Println("Parent go routine!") 12 13 for i := 0; i < 10; i++ { 14

Golang库集合

旧时模样 提交于 2020-01-26 14:45:33
golang用于创建和发送电子邮件的库 douceur - HTML 邮件中的内联 CSS email - 一个健壮的、灵活的 email 库 Go-dkim - DKIM 库,用于对 email 进行签名和验证 Go-imap - IMAP 库,用于客户端和服务器 Go-message - 用于触雷互联网消息格式和邮件的库 Gomail - Gomail 是一个非常简单且强大的库,用于发送电子邮件 Hectane - 轻量级 SMTP 客户端,提供 HTTP API hermes - 一个用于生成干净、响应式 HTML e-mail 的包 MailHog - Email 及 SMTP 测试工具,具有 web 及 API 接口 SendGrid - SendGrid 的 Go 语言库,用于发送电子邮件 smtp - SMTP 服务器协议状态机 golang处理日期和时间的库 carbon - 简单的时间扩展程序,有很多有用的方法,是 PHP Carbon 库的接口 durafmt - 持续时间格式化 feiertage - 一组计算德国公共假期的函数,比如复活节、感恩节等 Go-persian-calendar - 太阳历 Goweek - 处理星期的库 now - Now 是一个 Go 语言的时间工具集 NullTime -时间可以是 NULL 的库 timeutil - 为

用golang开发python动态模块

余生长醉 提交于 2020-01-26 03:49:48
python常用的是开发内嵌的C模块,现在没有golang直接内嵌的方法,方式一般为通过C作为传输中介,一边开发python程序,一边开发golang模块,最终再将golang的模块嵌入的python的直接调用。 以下为一个例子,我们直接开始一个传递复杂参数数组的例子: 本例是计算数组中元素值的总和,如下 test.go (golang文件) package main import "C" import "fmt" import "unsafe" //export addArr func addArr(arr *C.float, size C.int) C.int { arrList := (*[1<<5]C.float)(unsafe.Pointer(arr))[:size:size] fmt.Println(arrList) return 100 } func main() {} 注意编译方式: go build -x -v -ldflags "-s -w" -buildmode=c-shared -o test.so test.go test.py(python文件) #!/usr/bin/env python import ctypes addArr = ctypes.CDLL('./test.so').addArr TenFloat = ctypes.c_float*10

[Journey with golang] 6. Reflection

被刻印的时光 ゝ 提交于 2020-01-25 22:57:09
在计算机科学中,反射是指计算机程序在运行时可以访问、检测和修改本身状态或行为的一种能力。通俗地说,反射就是程序能够在运行时动态地查看自己的状态,并且允许修改自身的行为。 golang的反射基础是编译器和运行时把类型信息以合适的数据结构保存在可执行程序中。golang提供的reflect标准库知识为语言使用者提供一套访问接口,反射实现是语言设计者在设计语言时考虑的。本文主要讲解reflect标准库的用法。golang的反射建立在go类型系统的基础之上,和接口有紧密的关系。 go的反射巧妙地借助了实例到接口的转换所需要的数据结构,首先将实例传递给内部的空接口,实际上是将一个实例类型转换为接口可以表述的数据结构eface,反射基于这个转换后的数据结构来访问和操作实例的值和类型。在学习interface的过程中我们知道实例传递给interface{}类型时,编译器会进行一个内部的转换,自动创建相关类型数据结构。如果不做这个设计,则可能语言实现者还要再设计一套类型数据结构来支持反射。 // to be continued 来源: https://www.cnblogs.com/JHSeng/p/12233493.html

docker 操作记录-1

旧巷老猫 提交于 2020-01-25 21:54:04
docker操作记录(Ubuntu-16.04环境) Xshell 6 (Build 0115) Copyright (c) 2002 NetSarang Computer, Inc. All rights reserved. Type `help' to learn how to use Xshell prompt. [C:\~]$ Connecting to 192.168.114.130:22... Connection established. To escape to local shell, press Ctrl+Alt+]. Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.15.0-70-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage * Overheard at KubeCon: "microk8s.status just blew my mind". https://microk8s.io/docs/commands#microk8s.status 13 个可升级软件包。 10 个安全更新。

Fabric中配置Golang环境

六眼飞鱼酱① 提交于 2020-01-24 22:26:22
Fabric配置Golang环境 前言: 配置Fabric环境中需要一些模块,其中必不可少的就是Golang语言,笔者一开始选择了直接命令行 sudo apt install golang 安装,但是发现后来执行后面步骤时,出现问题,所以推荐选择源码安装,祝好~ 如何卸载原来安装的Golang?建议使用源码安装,如果你使用了apt-get 等方式安装了,就先把它卸载 apt-get purge golang-go 下载压缩包地址:https://golang.google.cn/dl/ 解压安装在目录/usr/local下: sudo tar -xvzf go1.8beta1.linux-amd64.tar.gz 此时会发现已经有了go文件夹 建立go的工作空间:需要在home目录下创建文件夹 cd /home mkdir gopath chmod 777 gopath cd gopath mkdir src mkdir pkg mkdir bin chmod 777 src chmod 777 bin chmod 777 pkg gedit ~/.bashrc # 末尾添加以下两行 export PATH=$PATH:/usr/local/go/bin export GOPATH=/home/gopath # 命令生效 source ~/.bashrc # 检查版本 go