Go语言中文网 为您找到相关结果 2379

使用 Go 添加 Nginx 代理

简介 反向代理 负载均衡 轮询 加权轮询 最少连接 iphash 通用 hash 总结 当前部分的代码 简介 Nginx 是一个高性能的 HTTP 服务器和反向代理服务器. 最常用的两个功能是反向代理和负载均衡. 反向代理 反向代理是正向代理的反面. 普通的代理服务器是需要用户主动去设置的, 用户在自己的电脑上设置并连接代理服务器, 从而可以隐藏自己的 IP, 使得应用服务器不知道客户端的 IP 地址. 而反向代理是作为应用服务器的代理, 安装在服务器上. 客户端实际上访问的反向代理服务器, 反向代理服务器再去访问实际的应用服务器, 然后将获取到的响应传送给客户端. 使用 Nginx 配置反向代理非常简单, 基础配置如下: upstream web { server 127.0.0.1:80...阅读全文

博文 2019-11-05 11:04:23 帅气猫咪

0-0 Golang笔记开篇

术语 Gopher 使用Golang开发的工程师,自称Gopher Golang 版本 目前Golang的版本 go version go1.11 darwin/amd64 建议目前可选版本 go1.10.4 开发环境 目前(2015-09-15),go-plus暂时不支持golang 1.5.1的 vendor 特性。 我在开发环境配置 vendor 特性,并将golang编写的若干项目,按照 vendor 方式重新组织。 在Atom编辑时,如果遇到与存储在 vendor 包的语法提示时,则不能自动获取。 Golang目前支持主流的操作系统 macOS Windows 32 & 64 Linux 推荐在 macOS环境下开发。 作者同时在 macOS 和 Docker Linux 环境下进...阅读全文

博文 2018-09-16 16:34:40 佛祖君

Go基础学习记录 - 编写Web应用程序 - 博客编辑功能之Model重构

每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享 https://github.com/durban89/typescript_demo.git tag: 1.1.3 针对于前面的几篇分享,觉的还是要勇于创新,发现更好的,更利于自己的,更能提高写代码效率的方式。于是将model这块的逻辑进行了重构之前的文章【Go基础学习记录 - 编写Web应用程序 - 博客编辑功能之Model的重新思考】也算是实现了一部分功能,小区域的是没有问题,比如只是针对Blog这一个model是没有问题的,但是如果在创建一个是不是要重新再写一遍Create、Update、Delete等方式。这个是很不方便的,在了解了创建一篇文章的时候大概就是需...阅读全文

博文 2018-10-18 22:34:38 DurbanZhang

(转)2018年,如何成为现代化的后端开发者

如今的网站开发与几年前的完全不一样了; 现在有很多让网站开发者感到困惑的东西。 这是我们决定做路线图指南 step by step visual guides demonstrating the bigger picture 的原因之一,并让每个人清楚的知道应该在网站开发中处于何种角色。 一周以前, 我们发表了一篇文章 Modern Frontend Developer in 2018 ,我们承诺了为后端和DevOps发布最新的路线图。现在履行承诺, 这篇文章是关于现代后端开发者的。 如果你还没有查看前端开发者路线图的话,去看一下吧。 之前的后端路线图只是一个纯粹的技术推荐,没有明确的方向和应该遵循的顺序。所以我们像前端路线图那样重新绘制了它,让它可以一步一步的引导以给你一个更好的建议。 我...阅读全文

博文 2018-10-31 16:34:54 haoxg

golang 指针类型引起的神奇 bug

下面是使用的结构体接口抽象定义,其实就是将结构体存进一个 map里。由于是读写都比较频繁,我加了读写锁。 // add progress listener. func (upload *UploaderGateway) AddProgress(key string, v ProgressListener) { upload.mutex.Lock() defer upload.mutex.Unlock() upload.ProgressMap[key] = v } //get progress listener. func (upload *UploaderGateway) GetProgress(key string) (v ProgressListener, err error) { up...阅读全文

博文 2019-06-03 23:34:19 张高元

golang 和 C++ 的内存对齐

内存对齐规则 有效对齐值是固定值和结构体中最长数据类型长度中较小的那个。固定值系统默认为 32 位是 4, 64 位是 8,#pragma pack(n)设置了则是对应的 n。 结构体第一个成员的 offset 为 0,以后每个成员相对于结构体首地址的 offset 都是 min{该成员大小, 有效对齐值}的整数倍,如有需要编译器会在成员之间加上填充字节。 结构体的总大小为 有效对齐值 的整数倍,如有需要编译器会在最末一个成员之后加上填充字节。 C++内存对齐 常见类型占用内存大小 类型/编译器 16 位编译器 32 位编译器 64 位编译器 bool 1 1 1 char 1 1 1 char* 2 4 8 int 2 4 4 float 4 4 4 double 8 8 8 long l...阅读全文

博文 2020-05-20 16:45:32 玖零儛

golang 学习笔记 1.2 常量

1.2 常量 常量值必须是编译期可确定的数字、字符串、布尔值。 const x, y int = 1, 2 // 多常量初始化 const s = "Hello, World!" // 类型推断 const ( // 常量组 a, b = 10, 100 c bool = false ) func main() { const x = "xxx" // 未使用局部常量不会引发编译错误。 } 不支持 1UL、2LL 这样的类型后缀。 在常量组中,如不提供类型和初始化值,那么视作与上一常量相同。 const ( s = "abc" x // x = "abc" ) 常量值还可以是 len、cap、unsafe.Sizeof 等编译期可确定结果的函数返回值。 const ( a = "abc" b...阅读全文

博文 2019-03-22 05:34:41 Diogoxiang

二)golang工厂模式

在通用的工厂模式中,一般涉及到 简单工厂模式(顾名思义:工厂 > 创建)、工厂方法(顾名思义:将方法工厂化)、抽象工厂模式(顾名思义:将工厂抽象化 工厂 > 工厂 > 创建) 特点:将接口与具体实现分离,根据需要实例化对象使用场景:日志记录,文件服务平台,数据库访问 1.定义产品接口 type P interface {} 2.定义实现结构 type P1 struct {} //implement P type P2 struct {} //implement P ...//简单3.工厂方法(简单工厂完) func F (name string) P {} //抽象3.工厂接口,用于生产工厂 type Factory interface { CreateP(name string) Cre...阅读全文

go可执行程序携带附件

###### 1.灵感来源 主要是看到这个开源项目: https://github.com/jteeuwen/go-bindata 该项目就是将文件生成go代码,编译出来的可执行程序可以创建携带的文件。我之前有个工具需要7za.exe,因为怕别人的电脑上没有这个文件,所以我想在我代码中判断环境不存在7za.exe或md5值不正确的时候,自动生成正确的7za.exe。当时就是使用上面的库,但是我仔细研究了一下源码发现生成的go源文件还是有点大,而且我也不需要太多复杂功能,因此我自己写了一个简化版的代码。 ###### 2.放上源码 ```go package main import ( "compress/zlib" "fmt" "io" "log" "os" "path/filepath" ...阅读全文

Golang学习笔记5——数组array

1.array的定义 定义数组的格式: var a[4]int //元素自动初始化为零 a := [...]int{19:1} //编译器按照初始化值数量确定数组长度 a := [5]int{1,2} //未提供初始值的元素自动初始化为零 数组长度也是类型的一部分,因此具有不同长度的数组为不同类型 数组在go中为值类型 2.数组指针和指针数组 //数组指针是指获取数组变量的地址。 //此时变量p就是指向数组的指针。特别注意p定义的类型为长度为100的数组的指针。 长度必须相等才能赋值。 func main() { var a = [...]int{99:1} var p *[100]int = &a fmt.Println(p) } //指针数组是指元素为指针类型的数组 func main(...阅读全文

博文 2017-10-25 16:00:05 marks-gui

5步实现规模化的Kubernetes CI/CD 流水线

一、背景在近几年,Kubernetes迅速成为了容器编排的事实上的开源标准。与虚拟机不同,Kubernetes在抽象化基础架构的同时可靠地大规模编排容器,这可以帮助开发人员将工作负载与基础架构的复杂性分开。Kubernetes是CI/CD自动化的理想选择,因为它提供了许多内置功能,这些功能使应用程序部署实现标准化和可重用,提高了开发人员的生产力,并加快了云原生应用程序的采用。Platform9是成立于2013年的云服务提供商,能够提供业界唯一由SaaS管理的混合云解决方案,使用户能够快速采用云技术并在私有部署或公共云中的任何基础架构上一致地管理VM、Kubernetes和无服务器功能。Platform9提供的Kubernetes解决方案也是业界的佼佼者。在2019年巴塞罗那举行的KubeCo...阅读全文

博文 2020-03-27 18:36:31 JFrogChina

初始Prometheus

监控的目标 在《SRE: Google运维解密》一书中指出,监控系统需要能够有效的支持白盒监控和黑盒监控。通过白盒能够了解其内部的实际运行状态,通过对监控指标的观察能够预判可能出现的问题,从而对潜在的不确定因素进行优化。而黑盒监控,常见的如HTTP探针,TCP探针等,可以在系统或者服务在发生故障时能够快速通知相关的人员进行处理。通过建立完善的监控体系,从而达到以下目的: 长期趋势分析:通过对监控样本数据的持续收集和统计,对监控指标进行长期趋势分析。例如,通过对磁盘空间增长率的判断,我们可以提前预测在未来什么时间节点上需要对资源进行扩容。 对照分析:两个版本的系统运行资源使用情况的差异如何?在不同容量情况下系统的并发和负载变化如何?通过监控能够方便的对系统进行跟踪和比较。 告警:当系统出现或者...阅读全文

博文 2019-10-08 18:33:04 aside section ._1OhGeD

图解Golang的GC算法

虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。 以下是Golang GC算法的里程碑: v1.1 STW v1.3 Mark STW, Sweep 并行 v1.5 三色标记法 v1.8 hybrid write barrier 经典的GC算法有三种:引用计数(reference counting)、标记-清扫(mark & sweep)、复制收集(Copy and Collection)。 Golang的GC算法主要是基于标记-清扫(mark and sweep)算法,并在此基础上做了改进。因此,在此主要介绍一下标记-清扫(mark and sweep)算法,关于引用计数(reference counting)和复...阅读全文

go gl 彩色的三角形

go 彩色三角形 之前在网上想找一个能渲染颜色的go gl图形编程例子,,找了半天都是白色的三角形。。。于是自己研究了半天,大概是研究出来的样子,记录到这里来分享一下。 作者用的是mac开发的,windows的go gl需要麻烦一点的操作,读者自行裁决吧。 配置 1.go下载 2.配置mac go环境请自行搜索一下。 3.IDE。作者用的是goland,破解的话,也请自行搜索一下。 go开发包 由于国内的墙比较严重,建议用github上的镜像下载,然后本地配置一下。 借助github的golang下载 下载下来之后把包拖动到指定的目录,比如golang.org中: 配置 核心开发包 "github.com/go-gl/gl/v4.1-core/gl" "github.com/go-gl/gl...阅读全文

博文 2019-02-08 16:34:43 不求甚解_4703

Golang中容易出现的一个赋值bug

Golang中,:=同时进行了变量声明和赋值。 当:=左边有多个变量时,编译器只检查左边至少有一个新变量。 如果其中有的变量已经声明,则只做赋值操作。 比如: _ := 1 // error. Nothing New declared a, _ := foo() // ok. Declare a a, b := foo() // ok. Declare b, assign a _, b := foo() // error. Nothing New declared 设想下面这种状况: func main() { var err error if true { data, err := strconv.Atoi("x") if err == nil { fmt.Println("Atoi su...阅读全文

博文 2019-03-21 19:34:41 平仄_pingze

Golang 入门 : 理解并发与并行

Golang 的语法和运行时直接内置了对并发的支持。Golang 里的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为 goroutine 时,Golang 会将其视为一个独立的工作单元。这个单元会被调度到可用的逻辑处理器上执行。Golang 运行时的调度器是一个复杂的软件,能管理被创建的所有 goroutine 并为其分配执行时间。这个调度器在操作系统之上,将操作系统的线程与语言运行时的逻辑处理器绑定,并在逻辑处理器上运行 goroutine。调度器在任何给定的时间,都会全面控制哪个 goroutine 要在哪个逻辑处理器上运行。 Golang 的并发同步模型来自一个叫作通信顺序进程(Communicating Sequential Processes,CSP)的范型(pa...阅读全文

博文 2019-06-11 15:03:46 xjtuhit

[系列] - 使用 go modules 包管理工具(一)

概述 我想实现一个开箱即用的 API 框架的轮子,这个轮子是基于 Gin 基础上开发的。 为什么是开箱即用,它会集成哪些功能? 以上功能点,都是常用的,后期可能还会增加。 废话不多说,咱们开始吧。 创建一个项目,咱们首先要考虑一个依赖包的管理工具。 常见的包管理有,dep、go vendor、glide、go modules 等。 最开始,使用过 dep,当时被朋友 diss 了,推荐我使用 go modules 。 现在来说一下 go modules ,这个是随着 Go 1.11 的发布和我们见面的,这是官方提倡的新的包管理。 说一个环境变量:GO111MODULE,默认值为 auto 。 当项目中有 go.mod 时,使用 go modules 管理,反之使用 旧的 GOPATH 和 v...阅读全文

博文 2019-08-27 11:34:29 訢亮

golang-101-hacks(21)——类型断言&类型开关

通过类型断言(type assertion)方式来判断接口的具体类型, Sometimes, you may want to know the exact type of an interface variable. In this scenario, you can use type assertion: x.(T) x”的类型必须为interface的变量,“T”表示是推断的类型。例如: x is the variable whose type must be interface, and T is the type which you want to check. For example: package main import "fmt" func printValue(v inte...阅读全文

博文 2019-06-23 23:32:43 羊羽shine

[转载]Golang 交叉编译跨平台的可执行程序 (Mac、Linux、Windows )

Golang支持交叉编译,也就是说你在32位平台的机器上开发,可以编译生成64位平台上的可执行程序.mac 下可以编译linux 下的执行程序 又或者windows下的执行程序 交叉编译依赖下面几个环境变量: GOOS 目标平台(编译后的目标平台)的操作系统(darwin、freebsd、linux、windows) 各平台的GOOS和GOARCH参考 OS ARCH OS version linux 386 / amd64 / arm >= Linux 2.6 darwin 386 / amd64 OS X (Snow Leopard + Lion) freebsd 386 / amd64 >= FreeBSD 7 windows 386 / amd64 >= Windows 2000 跨...阅读全文

博文 2019-10-19 23:32:48 aside section ._1OhGeD

Go安装使用

引言: 上篇 《Golang快速入门(不用急,但要快)》 我们大致过了一遍Go语言的基本语法,但在开始正式的项目创建前,有必要选择一个比较顺手的 IDE (编辑器),由于之前一直都是做Java相关的开发,自然而然地想着能否用一样的编辑器来进行开发,毕竟 Eclipse 还是挺强大的,但是它并不具备跨平台特性,目前只支持Windows平台。不过,对于日常开发已经够用了,最后发布的时候再将项目部署到Linux即可,通常我们也不会直接在Linux环境进行开发。接下来我们就来配置一下我们的 Eclipse ,让它支持Go项目的开发。 安装配置: 进行此操作的前提是你已经安装好了Eclipse,假如还没有,可以到官方下载指定版本的安装包,先完成Eclipse的安装:Eclipse下载页 1.安装goc...阅读全文

博文 2019-06-13 18:32:42 Saxon_323e

Elasticsearch初识

开源分布式搜索分析引擎, 基于Java语言开发, 采用Lucene内库构建 近实时 分布式存储, 搜索, 分析引擎 特性 支持分布式, 可水平扩展, 集群规模可以单个扩展到数百个节点 降低全文检索的学习曲线 可以被任何编程语言调用 生态圈 ELK 日志套件(Elasticsearch, Logstash, Kibana) Logstash 数据处理管道, 支持从不同来源采集数据, 转换数据, 并将数据发送到不同的存储库中. Kibana 可视化分析利器,帮助用户解开对数据的任何可疑问题 Beats是轻量的数据采集器.基于golang开发 Elasticsearch的应用 搜索 日志管理 指标分析 安全分...阅读全文

博文 2020-01-18 15:32:40 百里江山

GO语言-GC

引言 垃圾回收机制是高级语言常见的一类内存资源管理方式,C/C++这类语言内存分配及回收很大的主动权在调用者,gc机制较弱;像JAVA、PYTHON及后来的GOLANG都添加了GC机制来减少编程人员的内存管理压力。但于此同时也带来了gc效率问题,接下来我们看下常见的GC方式。GC算法 常见GC方式有引用计数(reference counting)、标记-清除(mark & sweep)、节点复制(Copying Garbage Collection),分代收集(Generational Garbage Collection)。 引用计数 引用计数算是在gc算法中最简单,也是最直接的gc算法。引用计数是在对象赋值操作时进行额外的清除操作,赋值时减少右值对象所有域的引用计数,计数为0立即进行垃圾...阅读全文

博文 2019-07-26 01:32:46 木工007

Go的gc机制(转)

虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。 以下是Golang GC算法的里程碑: v1.1 STW v1.3 Mark STW, Sweep 并行 v1.5 三色标记法 v1.8 hybrid write barrier 经典的GC算法有三种:引用计数(reference counting)、标记-清扫(mark & sweep)、复制收集(Copy and Collection)。 Golang的GC算法主要是基于标记-清扫(mark and sweep)算法,并在此基础上做了改进。因此,在此主要介绍一下标记-清扫(mark and sweep)算法,关于引用计数(reference counting)和复...阅读全文

博文 2019-11-16 03:32:53 更多精彩内容[转]GO GC 垃圾回收机制贺大伟图解Go语言的gc算法RyuGou图解Golang的GC算法RyuGouJava垃圾回收手册(四):垃圾回收算法实现foxracleJVMcocohaifang

Go基础学习记录 - 编写Web应用程序 - 博客编辑功能完善

每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享 https://github.com/durban89/typescript_demo.git tag: 1.1.0 一般我们在进行博客文章编辑的时候都要进行查询数据库,查找要编辑的文章是否存在,最后将查询出来的内容传到前端进行展示。 第一步 完善Model的查询逻辑 修改models/blog.go文件的QueryOne函数,代码修改如下 // QueryOne 获取一条数据 func (blog *Blog) QueryOne() (*helpers.Page, error) { var selectString = strings.Join(blog.Select...阅读全文

博文 2018-10-15 18:34:39 DurbanZhang

go语言环境搭建

安装 软件的安装常用三种方式1. 在线安装这种安装方式是通过系统提供的安装工具,自动下载安装包,并自动安装到系统的固定目录下2. 离线二进制安装通过手动下载官方提供编译好的二进制执行程序压缩包,在本地手动的解压到指定的目录下,并将可执行程序的路径加入到环境变量PATH中,使得在命令行工具中,可以在任意目录中使用该命令行工具。3. 离线源码安装在本地对源码进行make操作,将其编译为二进制的可执行程序。并将其copy到执行的目录下并加入到PATH环境变量中 以上对三种安装的原理做了简单的阐述。go语言环境同样适用。 选择喜欢的安装方式,在go语言中文网下载对应的包,安装以上的说明进行安装 GOPATH GOPATH是一个go语言的环境变量,官方给出的说明 The GOPATH environm...阅读全文

Golang 在 Mac、Linux、Windows 下如何交叉编译

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。 Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Wind...阅读全文

博文 2018-12-17 11:34:55 柠檬信息技术有限公司

使用GDB等验证Golang的“编译器会为某些场合进行专门优化,避免字符串转换时的额外分配和复制操作”

编译器会为某些场合进行专门优化,避免字符串转换时的额外分配和复制操作: 将[]byte转换为string key,去map[string]查询的时候。 将string转换为[]byte,进行for range迭代时,直接取字节赋值给局部变量。 Example Code package main func main() { m := map[string]int { "abc" : 123, } key := []byte("abc") x, ok := m[string(key)] println(x, ok) } ➜ go build -gcflags "-N -l" example.go GDB go1.7.6 验证成功 地址都是0xc420047ee0 ➜ gdb example GN...阅读全文

博文 2018-03-23 11:34:40 Anderson_liu

学会使用context取消goroutine执行的方法

Go语言里每一个并发的执行单元叫做goroutine,当一个用Go语言编写的程序启动时,其main函数在一个单独的goroutine中运行。main函数返回时,所有的goroutine都会被直接打断,程序退出。除此之外如果想通过编程的方法让一个goroutine中断其他goroutine的执行,只能是通过在多个goroutine间通过context上下文对象同步取消信号的方式来实现。 这篇文章将介绍一些使用context对象同步信号取消中断程序执行的常用模式和最佳实践,从而让我们能构建更迅捷、健壮的应用程序。如果对context对象不太了解的同学建议先仔细看看《Golang 并发编程之Context》了解一下基础。 为什么需要取消功能 简单来说,我们需要取消功能来防止系统做一些不必要的工作。...阅读全文

Golang的压测工具 hey源码分析

项目地址:https://github.com/rakyll/hey项目简介:HTTP负载发生器,是ApacheBench(ab)替代品用法:选项:-n 运行的的请求数。默认200.-c 并发运行请求数,请求数不能小于并发级别。默认值50-q 速率限制,已每秒查询(QPS)为单位。默认没有限制。-z 发送请求的应用程序配置,当时间到了应用程序停止并退出,如果指定了持续时间,则忽略n-o 输出类型。如果没有提供就打印在终端。csv是唯一支持的替代方案,转储文件的响应以逗号分割。 -m HTTP method, one of GET, POST, PUT, DELETE, HEAD, OPTIONS.-H 自定义HTTP头,可以通过重复的标记指定所需的头。例如 F -H "Accept: tex...阅读全文

博文 2020-04-29 00:34:27 lizhengxiang

问个游览器缓存问题

~~~ 用户中心URL都是验证session存在不 ,不存在返回登录页面 如果此时程序重启了,当再次访问URL,URL就会自动退出【此时游览器也记录了缓存】,当重新登录 这个页面始终无法访问,必须清理本地缓存才行,, 这个如何解决不让进游览器缓存? 是不是要设置头文件之类的 ~~...阅读全文

# golang JWT的简单使用

golang JWT的简单使用 JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。 JWT和session有所不同,session需要在服务器端生成,服务器保存session,只返回给客户端sessionid,客户端下次请求时带上sessionid即可。因为session是储存在服务器中,有多台服务器时会出现一些麻烦,需要同步多台主机的信息,不然会出现在请求A服务器时能获取信息,但是请求B服务器身份信息无法通过。JWT能很好的解决这个问题,服务器端不用保存jwt,只需要保存加密用的secret,在用户登录时将jwt加密生成并发送给客户端,由客户端存储,以后客户端的请求带上,由...阅读全文

博文 2019-02-05 17:34:41 w85278161

Golang交叉编译

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序,最近使用了一下,非常好用,这里备忘一下。 Mac 下编译 Linux 和 Windows 64位可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Wi...阅读全文

博文 2018-12-01 11:34:41 泡泡龙吐泡泡

Go 中的请求处理概述

使用 Go 处理 HTTP 请求主要涉及两件事:ServeMuxes 和 Handlers。 [ServeMux](https://docs.studygolang.com/pkg/net/http/#ServeMux) 本质上是一个 HTTP 请求路由器(或多路复用器)。它将传入的请求与预定义的 URL 路径列表进行比较,并在找到匹配时调用路径的关联 handler。 handler 负责写入响应头和响应体。几乎任何对象都可以是 handler,只要它满足[http.Handler](https://docs.studygolang.com/pkg/net/http/#Handler) 接口即可。在非专业术语中,这仅仅意味着它必须是一个拥有以下签名的 `ServeHTTP` 方法: `Se...阅读全文

博文 2019-06-30 22:45:43 watermelo

现代软件开发流程-by 12-Factor

简介 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论: 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。 将开发环境和生产环境的差异降至最低,并使用持续交付实施敏捷开发。 可以在工具、架构和开发流程不发生明显变化的前提下实现扩展。 这套理论适用于任意语言和后端服务(数据库、消息队列、缓存等)开发的应用程序。 背景 本文的贡献者参与过数以百计的应用程序的开发和部署,并通过 Heroku 平台间接见证了数十万应用程序的开发,运作以及扩展的过程。...阅读全文

博文 2019-08-14 23:02:40 如来神掌

2019-08-06 go 交叉编译

Golang 支持交叉编译,在一个平台上生成另一个平台的可执行程序 Mac 下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Linux 下编译 Mac 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go Windows 下编译 Mac 和 Linux 6...阅读全文

博文 2019-08-07 08:32:41 cityhash123

go交叉编译

Golang 支持在一个平台下生成另一个平台可执行程序的交叉编译功能。 1.Mac下编译Linux, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go2.Linux下编译Mac, Windows平台的64位可执行程序: CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build test.go CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go3.Windows下编译Mac, Linu...阅读全文

博文 2019-10-09 19:32:42 aside section ._1OhGeD

Go语言的变量、函数、Socks5代理服务器

Go语言中变量的声明和JavaScript很像,使用var关键字,变量的声明、定义有好几种形式 1. 变量和常量 // 声明并初始化一个变量 var m int = 10 // 声明初始化多个变量 var i, j, k = 1, 2, 3 // 多个变量的声明(注意小括号的使用) var( no int name string) // 声明时不指明类型,通过初始化值来推导 var b = true // bool型 // := 隐含声明变量并赋值 str := "mimvp.com" // 等价于var str string = "mimvp.com" Go 语言中 = 和 := 有什么区别? = 是赋值, := 是声明变量并赋值 // = 使用必须使用先var声明例如: var a a ...阅读全文

博文 2017-09-28 12:34:49 mimvp

【Golang 基础】Go 语言的程序结构

Go 语言的项目结构    一般,一个 Go 项目在 GOPATH 下,会有如下三个目录 . ├── bin // 存放编译后的可执行文件 ├── pkg // 存放编译后的包文件 └── src // 存放项目源文件 一般情况下,bin 和 pkg 目录可以不创建,go 命令会自动构建(如 go install),只需要创建 src 目录即可。 Go 程序的一般结构 // 当前程序的包名 package main // 导入其他包 import "fmt" // 常量的声明 const _PI float64 = 3.14 // 全局变量声明 var title string = "Go 语言学习笔记" // 一般类型声明 type newType int // 结构声明 type Stu...阅读全文

博文 2018-09-26 18:34:39 hvkcoder

【译】Go和WebAssembly:在浏览器中运行Go程序

在过去很长一段时间里,Javascript是Web开发人员中的通用语言。如果你想写一个稳定成熟的 Web 应用程序,用javascript几乎是唯一的方法。 WebAssembly(也称为wasm)将很快改变这种情况。使用WebAssembly可以用任何语言编写Web应用程序。在本文中,我们将了解如何编写Go程序并使用wasm在浏览器中运行它们。 但首先,什么是WebAssembly webassembly.org 将其定义为“基于堆栈的虚拟机的二进制指令格式”。这是一个很好的定义,但让我们将其分解为我们可以轻松理解的内容。 从本质上讲,wasm是一种二进制格式; 就像ELF,Mach和PE一样。唯一的区别是它适用于虚拟编译目标,而不是实际的物理机器。为何虚拟?因为不同于 C/C++ 二进制...阅读全文

博文 2019-01-14 10:34:40 启程

Golang 交叉编译

golang 跨平台(跨操作系统系统)编译 Windows 下编译 Mac 64位可执行程序: SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build -v Windows 下编译 Linux 64位可执行程序: set CGO_ENABLED=0 set GOOS=linux set GOARCH=amd64 go build Mac 下编译 Linux 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build Mac 下编译 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go ...阅读全文

兄弟连区块链培训带你实战GO案例(49)Go 时间

Go语言是谷歌2009发布的第二款开源编程语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。不仅可以开发web,可以开发底层,目前知乎就是用golang开发。区块链首选语言就是go,以-太坊,超级账本都是基于go语言,还有go语言版本的btcd. 兄弟连Go全栈与区块链培训课程共计22周学习时长,划分为9个学习阶段,即区块链主流语言-Go语言开发实战、区块链后端技术体系-Go语言高并发和服务器开发、Go开发区块链公链(区块链密码学、分布式编程、共识算法、基本概念,Golan公链开发)、以-太坊与智能合约与DAPP开发、区块链分布式应用开发、区块链系统框架开发-超级账本与区块链3.0EOS、Go与区块链面试...阅读全文

博文 2018-07-30 15:34:54 Delete_88c3

C/C++语言的适用性

在 2017年 本年度计算机语言榜这篇中, 我们汇报总结了 2017 年最最火的 TOP 20 计算机语言,全部的语言中,Java、C、C++ 名列前三。Java 凭着可移植性、可扩展性及其庞大的社区性傲视群雄,那麼最原始的 C 和 C++ 为什么依然成活至今?本文的创作者亦发表了自身的观点,他觉得,硬件访问、效率高、跨平台性、持续演进、应用领域广泛等等全是他们风靡迄今不可缺少的关键因素。 下列为译文: C 语言问世于 1972 年(45 年前),而 C ++ 问世于 1985 年。或许有些人会觉得在这般悠长的时间里,像 C、C++ 那样古老的语言早已日薄西山,显然你弄错: 访问硬件 在许多应用程序中浏览硬件是十分关键的,C 和 C ++ 能够或多或少让人完全控制硬件。直接操控硬件的益处有:...阅读全文

博文 2019-01-17 16:04:46 Yaphets123

GO语言学习笔记(三)初写GO程序

一、第一个程序名称:helloworld.go package main import "fmt" func main() { fmt.Println("hello world!") } 知识点1:Go语言的代码文件一般是以.go作为后缀。 运行helloworld.go执行:go run helloworld.go输出结果:hello world!知识点2:使用run参数的意思是编译并运行。 编译成二进制文件执行:go build -o helloworld helloworld.go执行:ls查看helloworld helloworld.go在当前目录下会产生一个helloworld的二进制文件,我们可以直接运行这个二进制文件执行二进制文件:./helloworld执行结果:hello...阅读全文

博文 2019-01-25 18:35:14 Mr大表哥

万用大数据修炼手册!教你如何在成为大牛的路上保护好你的秀发!

也许你想在数据研究领域工作,你对数据工程师和数据科学家之间的区别还不是很清楚,甚至很多人可能认为这是同一件事。如果你真的这么认为,那是个大错误!这两个位置之间的差别正在增大。如果你不能深入理解这些异同,那么在未来绝对不会有几声雷鸣在等你。这篇文章必须读!数据工程师在技术上工作。他们负责数据系统架构的设计和维护,包括从基础设施分析到数据仓库的许多概念。数据工程师需要对常用的脚本语言有一个透彻的理解,并通过使用和改进数据分析系统,稳步提高数据的质量和数量。他们还负责创建建模、挖掘、验证和获取数据的步骤和过程。 预计行业对熟练数据工程师的需求将迅速增长。在现代世界,企业和组织需要一个可靠的数据体系结构来获取和存储数据。当企业发展到需要使用数据科学的程度时,它需要数据工程师。因此,迫切需要数据工程师...阅读全文

博文 2019-01-29 00:34:43 大数据的风风

【Golang 基础】Go 语言的控制语句

Go 语言的控制语句 (示例代码) 判断语句 if-else,支持初始化表达式; package basic import "fmt" func main(){ if num := 0; num == 0{ fmt.Println("Zero") }else if num == 1 { fmt.Println("One") }else { fmt.Println("Other") } } 循环语句 for,有 3 种形式 do-while 形式; package basic func DoWhile(){ a := 1 for{ a++ if a > 3 { break } } } while 形式; package basic func While(){ a := 1 for a < 3 ...阅读全文

博文 2019-03-24 01:34:41 爱写作的程序猿

[译] 使用 Go 和 ReactJS 构建聊天系统 (二)

本节完整代码:GitHub 本文是使用 ReactJS 和 Go 来构建聊天应用程序的系列文章的第 2 部分。你可以在这里找到第 1 部分 - 初始化设置 现在我们已经建立好了基本的前端和后端,现在需要来完善一些功能了。 在本节中,我们将实现一个基于 WebSocket 的服务器。 在该系列教程结束时,我们将有一个可以与后端双向通信的前端应用程序。 服务 我们可以使用 github.com/gorilla/websocket 包来设置 WebSocket 服务以及处理 WebSocket 连接的读写操作。 这需要在我们的 backend/ 目录中运行此命令来安装它: $ go get github.com/gorilla/websocket 复制代码一旦我们成功安装了这个包,我们就可以开始构...阅读全文

博文 2019-08-02 14:34:31 咔叽咔叽

搭建网站,和把大象装冰箱一样简单?

摘要: 一个流行了很多年的梗,至今仍然热度不减,当年本山大叔在春晚上说出这个段子时,不知是不是预料到了很多人这辈子都指着这个笑话活着了。 一个流行了很多年的梗,至今仍然热度不减,当年本山大叔在春晚上说出这个段子时,不知是不是预料到了很多人这辈子都指着这个笑话活着了。 Q:“要把大象装冰箱,总共分几步?” A:“分三步。1. 把冰箱门打开;2.把大象放进冰箱;3.把冰箱门关上”。 一个听上去很困难的事情,在脑筋急转弯的世界里,不用考虑它的实现成本和实现可行性,其实只需分三步即可完成。其实生活中的很多事,换个角度,也是如此。 搭建网站,这个词,很多人都听说过,但是当你还未了解建站的具体步骤时,你会觉得这件事好难,没有技术底子很难实现。其实,当你勇敢的打开冰箱门以后,你会发现...阅读全文