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

Tinder迁移至Kubernetes之路

Why 大约两年前,Tinder决定将其平台移至Kubernetes。 Kubernetes为我们提供了一个通过不变的部署推动Tinder Engineering朝着容器化和少运维的方向发展的机遇。应用程序的构建,部署和基础结构将定义为代码。 我们还希望解决规模和稳定性方面的挑战。当扩展变得至关重要时,我们常常要等待几分钟才能等待新的EC2实例上线。容器在数秒而不是数分钟内调度和服务流量的想法吸引了我们。 这并不容易。在2019年初的迁移过程中,我们在Kubernetes集群中达到了临界规模,并且由于流量,集群规模和DNS而开始遇到各种挑战。我们解决了迁移200个服务并运行Kubernetes集群的有趣挑战,该集群的规模总计为1,000个节点,15,000个Pod和48,000个正在运行的容...阅读全文

博文 2020-01-23 19:32:39 iyacontrol

Go防缓存击穿——singleflight

我们在开发时,有时会碰到一个接口的访问量突然上升,导致服务响应延迟或者宕机的情况。这时,除了利用缓存之外,也可以用到singlefilght来解决,下面是一个简单的示例 package main import ( "fmt" "sync" "sync/atomic" "time" "golang.org/x/sync/singleflight" ) func main() { g := singleflight.Group{} wg := sync.WaitGroup{} for i := 0; i < 100; i++ { wg.Add(1) go func(j int) { defer wg.Done() val, err, shared := g.Do("a", a) if err !...阅读全文

2018-10-17

一、背景 最近接手一个 golang 的项目,存储于 gitlab 上,由于之前主要是 PHP 开发,版本库用得比较多的也是 SVN,此次的项目想要使用 Gitlab 自带的 CI 持续集成工具进行自动编译打包部署,之前从未接触过此类东西,故在网上苦苦寻觅,浏览了无数资料,踩了无数的坑,现将主要过程以及一些坑整理分享出来,方便即将入坑的朋友。 参考文献: GitLab-CI 从安装到差点放弃 使用gitlab的Ci自动部署项目 pipeline gitlab-runner 二、相关解释 1. Gitlab GitLab 是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的 Git 项目仓库,可通过 Web 界面进行访问公开的或者私人项目。 它拥有与 GitHub 类似...阅读全文

博文 2018-10-17 19:34:38 在那不遥远的地方_d449

Golang 使用tee将一个channel分拆成两个相同的channel

tees/channels.go package tees type TeeOp struct { } func NewTeeOp() *TeeOp { teeOp := &TeeOp{} return teeOp } func (teeOp *TeeOp) OrDone( done, c <-chan interface{}, ) <-chan interface{} { valStream := make(chan interface{}) go func() { defer close(valStream) for { select { case <-done: return case v, ok := <-c: if ok == false { return } select { c...阅读全文

博文 2019-06-18 12:02:40 FredricZhu

并发模型

互联网后台的最大特点就是海量请求,如何在有限的资源下尽可能服务更多的请求是后台开发主要的关注点。传统上设计一个高可用高并发的互联网后台主要原则有横向扩展和纵向扩展。横向扩展要求服务尽量无状态依赖,纵向扩展主要是提高单机的吞吐量,比如使用更好的硬件配置。在编程模型的选择上,采样哪种并发模型也会大大影响单机的吞吐量(参考著名的 C10K 问题)。 上古时期的互联网服务 以早期的 web 服务为例,浏览器中地址栏输入网址回车后,发起 HTTP 请求到 web 后台。web 容器(apache)收到请求后,解析请求然后生成浏览器需要的数据(读取静态文件或者启动一个 cgi 进程生成动态内容),最后通过 HTTP 响应返回给浏览器。 屏蔽掉网络通信息协议,进程间通信等等各种细节,以上例子可以说明一个互...阅读全文

博文 2018-12-10 14:39:48 litang.me

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 Win...阅读全文

2.蛤蟆笔记go语言——包

2.蛤蟆笔记go语言——包 每个 Go 程序都是由包组成的。 程序运行的入口是包 main。 这个程序使用并导入了包 "fmt" 和"math/rand"。 按照惯例,包名与导入路径的最后一个目录一致。例如,"math/rand" 包由 package rand 语句开始 代码 package main import ( "fmt" "math/rand" ) func main() { fmt.Println("Myfavorite number is", rand.Intn(10)) } 执行如下: Myfavorite number is 1 导入 代码用圆括号组合了导入,这是“打包”导入语句。 同样可以编写多个导入语句,例如: import "fmt" import "math" 不...阅读全文

博文 2016-09-07 10:00:02 notbaron

Golang学习笔记-1.8 switch语句

本文系第八篇Golang语言学习教程 switch是一个条件语句,用于将表达式的值与可能匹配的选项列表进行比较,并根据情况执行相应代码。是替代if else的常用方式。 下面通过讲解一个简单的运算程序来了解switch语句 package main import "fmt" func eval(a, b int, op string) int { //定义eval函数,输入三个值 a, b, op 输出类型为 int var result int switch op { // op 为表达式,将 op 的值与下面 case 比较 case "+": //若 op 值为 + , 则将 result 赋值 a + b 以此类推 result = a + b case "-": result = ...阅读全文

博文 2018-07-14 15:34:46 xunk1900

Go36-46-访问网络服务(socket)

访问网络服务 这篇开始讲网络编程。不过网络编程的内容过于庞大,这里主要讲socket。而socket可以讲的东西也太多了,因此,这里只围绕Go语言介绍一些它的基础知识。 IPC方法 所谓socket,是一种IPC(Inter-Process Communication)方法,可以被翻译为进程间通信。顾名思义,IPC这个概念(或者说规范)主要定义的是多个进程之间,相互通信的方法。这些方法主要包括: 系统信号(signal),os包和os/signal包有针对系统信号的API 管道(pipe),os.Pipe函数可以创建命名管道,os/exec包支持另一类管道:匿名管道 套接字(socket),net包中提供支持 文件锁(file lock) 消息队列(message queue) 信号灯(se...阅读全文

博文 2019-02-09 08:35:10 骑士救兵

go并发编程笔记

go语言高级编程笔记 并发编程 一、并发编程的相关概念 1、并发编程概念:使多个任务【程序】可以在同一时间执行以便能够更快的得到结果 2、多元程序:允许操作系统同时运行多个程序,cpu来回切换,缺点:对系统资源进行无限制的抢夺造成程序频繁发生死锁现象 3、串行程序:只能被顺序执行的指令列表 4、并行程序:可以在并行的硬件上执行的并发程序 5、并发程序:被并发的执行的两个或两个以上的串行程序的统称 6、并发系统 7、并发程序的不确定性:没有明确的执行顺序 8、并发程序的内部交互 同步的原则:某个资源同一时刻只能被一个程序占用 同步的作用:避免在并发访问共享资源时可能存在的冲突,以及确保在互相传递数据时能够顺利的接通 二、多进程编程 1、IPC:多进程程序中,程序之间需要互相协作完成任务,而多个...阅读全文

golang package(time)

开发十年,就只剩下这套Java开发体系了 >>> time package in there //time package //time 包为我们提供了一个数据类型 time.Time(作为值使用)以及显示和测量时间和日期的功能函数 //当前时间可以使用 time.Now() 获取,或者使用 t.Day()、t.Minute() 等等来获取时间的一部分;你甚至可以自定义时间/// 格式化字符串,例如: fmt.Printf("%02d.%02d.%4d\n", t.Day(), t.Month(), t.Year()) 将会输出 21.07.2011 //Duration 类型表示两个连续时刻所相差的纳秒数,类型为 int64。Location 类型映射某个时区的时间,UTC 表示通用协调/...阅读全文

博文 2018-09-23 00:33:10 ivandong_qifan

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

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" ...阅读全文

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)和复...阅读全文

Golang 入门 : 理解并发与并行

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

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

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语言-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

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 柠檬信息技术有限公司

学会使用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

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

【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 咔叽咔叽

V8垃圾回收?看这篇就够了!

什么是内存管理 内存管理是控制和协调应用程序访问电脑内存的过程。这个过程是复杂的,对于我们来说,可以说相当于一个黑匣子。 当咱们的应用程序运行在某个操作系统中的时候,它访问电脑内存(RAM)来达成下列几个功能: 运行需要执行的字节码(代码) 存储程序运行时候所需的数据 加载程序运行所需的运行时环境 上面用来存储程序运行时所需的数据,就是下面要说的堆(heap)和栈(stack)。 栈(stack) 顾名思义,是一种先进后出的结构,参考一下餐盘的取和放。 image 俄罗斯套娃,我这不禁 image 栈的特点 由于先进后出性质,在数据的处理上栈有着很好的速度,因为只需从最顶部压栈和出栈就好了,简单明了。 不过,存储在栈中的数据必须是大小有限,生存期确定。 函数执行的时候会创建一个明确的栈,并压...阅读全文

博文 2020-02-04 16:32:46 小雨小雨丶

Golang程序调试工具介绍(gdb vs dlv)

通过log库输出日志,我们可以对程序进行异常分析和问题追踪。但有时候,我也希望能有更直接的程序跟踪及定位工具能够帮助我们更方便快捷的追踪、定位问题,最直观的感觉还是使用调试器。Linux平台下,原生的C/C++程序,我们往往使用gdb进行程序调试,切换到Golang,我们同样还是可以使用gdb进行调试。同时我们还可以使用golang实现的调试器dlv进行调试。以下内容是我对gdb以及dlv使用及对比总结 准备工作为展示整个调试过程,准备了一个演示项目GoDbg,整个目录结构如下所示 [lday@alex GoDbg]$ tree . ├── main.go └── mylib └── dbgTest.go 其中,main.go为主函数入口,而dbgTest.go启动多个goroutine,用...阅读全文

博文 2018-08-31 09:41:33 lday的博客

Preface

‘‘Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.’’ (From the Go web site at golang.org) Go语言是开源的程序语言,它意在使人们能够构建更容易、更可靠、更有效率的软件 Go was conceived in September 2007 by Robert Griesemer, Rob Pike, and Ken Thompson, all at Google, and was announced in November 2009. Go语言是Robert Griesemer, ...阅读全文

【译】 Golang 中的垃圾回收:Go Traces(二)

前言 这系列的文章如下 Golang 中的垃圾回收(一) Golang 中的垃圾回收(二):Go Traces 第一部分,我花了时间去描述了golang 垃圾收集器的行为,并说明了程序运行时候收集器所产生的延迟。我分享了怎么样去产生以及去解释GC traces。并展示了堆内内存如何改变,并且解释了GC不同阶段对延迟代价的影响。 最后的结论是,如果你减少了堆的压力,你就会减少延迟代价并提高了程序性能。我也指出了,降低收集速率,推迟收集,设法增加两次收集的时间间隔并不是很好的策略。即使是收集速率很快,但是以一致的速度进行,也能保持程序以最佳性能运行。 这部分里,我会带你通过一个实际的web应用并向你展示怎么样生成GC traces和程序状态。然后我会解释这些工具的输出内容,这样你可以找到方法去提...阅读全文

博文 2019-07-18 14:35:34 lucifer_L

构建生产就绪的K8S集群的16点清单

Kubernetes是用于构建高度可扩展系统的强大工具。结果,许多公司已经开始或正在计划使用它来协调生产服务。不幸的是,像大多数强大的技术一样,Kubernetes也很复杂。我们整理了以下清单,以帮助你生产环境最佳实践Kubernetes。 容器最佳实践 Kubernetes提供了一种编排容器化服务的方法,因此,如果您没有按顺序实践你的容器,那么集群一开始就不会处于良好状态。请按照以下提示开始。 1: 使用精简基础镜像 what:容器是内置在系统镜像中的应用程序堆栈。从业务逻辑到内核的所有内容都打包在一起。最小的镜像会占用尽可能多的OS,并迫使您显式添加所需的任何组件。 why:仅在您的容器中包括要使用的软件,同时具有性能和安全性方面的好处。磁盘上的字节数更少,复制镜像的网络流量更少,并且潜...阅读全文

博文 2019-12-23 21:32:41 iyacontrol

Golang笔记03《Go程序设计语言》第一章入门

《Go程序设计语言》第一章入门 永痕的Hello World package main import "fmt" func main(){ fmt.Println("Hello World") } 输入命令 go run hello.go,如果您输入的程序是正确的,那么会输出 Hello World 这就是go语言的最简单的最基础的代码,但是我们需要注意的事情是: 简单的事情不代表不重要 简单的事情不代表不重要 简单的事情不代表不重要 重要的事情说三次 end.....阅读全文

博文 2019-06-14 23:32:43 我加入简书的路程

go网络编程学习笔记6(安全)

简介 尽管互联网最初被设计为可以承受敌对代理攻击的系统,但它过去一直是在一个可信的实体和合作的环境中发展起来的。可惜现在已经时过境迁。垃圾邮件,拒绝服务攻击,网络钓鱼这些东西使得每一个上网者都需要自行承担风险。 应用程序应当在复杂的互联网环境中仍然可以正确工作。“正确”不光意味着程序功能的正确,同时还意味着要确保数据传输过程中的保密性和完整性,甚至只允许合法用户进行访问和其它问题。 这自然使得编程更加复杂。在构建安全应用程序的过程中,会出现很复杂和微妙的问题。如果你想自己这样做(如实现一个自有安全库),通常都会以失败而告终。相反,你需要使用安全专家设计的安全库。 ISO 安全架构 功能层次 主要的安全系统功能 认证 - 身份校验文件 数据完整性 - 数据不被篡改 保密 - 数据不能暴露给他人...阅读全文

博文 2019-06-14 16:02:51 GeminiGirl0604

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

本节完整代码:GitHub 本文是关于使用 ReactJS 和 Go 构建聊天应用程序的系列文章的第 4 部分。你可以在这里找到第 3 部分 - 前端实现 这节主要实现处理多个客户端消息的功能,并将收到的消息广播到每个连接的客户端。在本系列的这一部分结束时,我们将: 实现了一个池机制,可以有效地跟踪 WebSocket 服务中的连接数。 能够将任何收到的消息广播到连接池中的所有连接。 当另一个客户端连接或断开连接时,能够通知现有的客户端。 在本课程的这一部分结束时,我们的应用程序看起来像这样: 拆分 Websocket 代码 现在已经完成了必要的基本工作,我们可以继续改进代码库。可以将一些应用程序拆分为子包以便于开发。 现在,理想情况下,你的 main.go 文件应该只是 Go 应用程序的入...阅读全文

博文 2019-08-03 00:34:15 咔叽咔叽