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

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

06-Go语言命令行参数

GO命令行操作指令 标准go语言项目文件目录格式 项目文件夹就是GOPATH指向的文件夹 src文件夹是专门用于存放源码文件的 main文件夹是专门用于存储package main包相关源码文件的 其它文件夹是专门用于存储除package main包以外源码文件的 bin文件夹是专门用于存储编译之后的可执行程序的 pkg文件夹是专门用于存储编译之后的.a文件的 |---项目文件夹 -----------|--------src文件夹 -----------------------------|--------main文件夹 -----------------------------|--------其它文件夹 -----------|--------bin文件夹 -----------|--...阅读全文

博文 2018-10-15 19:34:39 月色下的阳光

OS Thread Model

概念 线程: 程序执行时的最小单位,它是进程的一个执行流,是CPU调度和分派的基本单位,线程由CPU独立调度,在多CPU下可以多线程同时运行。 进程: 进程是资源(CPU、内存等)分配的基本单位,拥有独立的地址空间,它是程序执行时的一个实例,一个进程可有多个线程组成,线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。 操作系统线程模型 1:1核心线程模型 pthread线程库--NPTL image.png 内核线程(KLT)由操作系统内核直接支持的线程,内核通过操纵调度器对线程进行调用,程序不直接与内核线程接触而是通过轻量级进程(LWP),LWP内核线程一一对应,程序和内核线程通过轻量级进程联系起,这样的局限性就是每次线程操作都需要从用户态到内核态的转化,代价高,而且由于一一对应的...阅读全文

博文 2019-10-11 01:32:45 aside section ._1OhGeD

golang 项目实战简明指南

开发环境搭建 golang 的开发环境搭建比较简单,由于是编译型语言,写好 golang 源码后,只需要执行 go build 就能将源码编译成对应平台(本文中默认为 linux)上的可执行程序。本文不再赘述如何搭建 golang 开发环境,只说明下需要注意的地方。 从官网下载对应平台的 golang 安装包中包括 golang 的编译器、一些工具程序和标准库源码。早期的 golang 版本中,需要设置 GOROOT 和 GOPATH 两个环境变量。 从 1.8 版开始,GOPATH 不再需要显示设置。如果没有显示设置,则 GOPATH 的默认值为 $HOME/go 。GOPATH 可以设置多个目录,但推荐只设置一个或直接使用默认值,多个 GOPATH 会造成依赖管理的困难。推荐将 $GOP...阅读全文

博文 2018-12-10 14:43:13 litang.me

LINUX, GO GO GO!

计算机组成:CPU,存储设备,I/O设备,内存 linux发行版:slackware:SUSE Linux Enterprise Server (SLES)OpenSuse桌面debian: ubuntu, mintredhat: RHEL: RedHat Enterprise LinuxCentOS:兼容RHEL的格式Fedora:每6个月发行一个新版本ArchLinux:轻量简洁Gentoo:极致性能, 不提供传统意义的安装程序Linux的哲学思想:一切皆文件 在linux系统中,目录,配置文件,硬盘等等都是用文件来表示的 linux命令:pwd:显示当前工作目录echo:回显ifconfig:查看网卡信息tty:查看当前终端startx:切换图形界面export:设置或者显示系统环境变...阅读全文

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

每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享 https://github.com/durban89/typescript_demo.git tag: 1.1.1 上篇文章【Go基础学习记录 - 编写Web应用程序 - 博客编辑功能完善】我们只是将需要的文章从数据库读取出来,然后在前端展示,那么如果要修改的话,改如何操作,今天的分享继续上篇文章 第一步、添加更新Model 既然更新,就涉及到了更新的逻辑,即如何将更新写入数据库,这里我将之前的Update函数进行完善操作,将Update改为了UpdateData,主要原因是我在另外要给sqlite库中也写了一个Update的函数,go工具提示我重复了,这个不知道是不...阅读全文

博文 2018-10-16 23:34:37 DurbanZhang

GoLang 学习笔记 - 常量

常量   常量是在程序运行时不会被修改也不可修改的量。在GoLang 中,常量的数据类型只可以是布尔型、数值型(整数型、浮点型和复数)和字符串,通常用下划线分隔大写字母来命名常量。   GoLang 中常量的定义格式: const A string = "a" // 显式类型定义 const B = "b" // 隐式类型定义   多个相同类型的声明可以简写为: const NUM_1, NUM_2 = 3, 4   常量还可以用作枚举(枚举篇会讲): const ( Unknown = 0 Female = 1 Male = 2 ) iota   iota,特殊常量,可以认为是一个可以被编译器修改的常量,通常用作常量计数器。   iota iota 每次出现都会初始化为 0,const 中...阅读全文

博文 2019-07-21 05:32:39 凉丶心园

Rio手把手教学:如何打造容器化应用程序的一站式部署体验

11月19日,业界应用最为广泛的Kubernetes管理平台创建者Rancher Labs(以下简称Rancher)宣布Rio发布了beta版本,这是基于Kubernetes的应用程序部署引擎。它于今年5月份推出,现在最新的版本是v0.6.0。Rio结合了多种云原生技术,从而简化了将代码从测试环境发布到生产环境的流程,同时保证了强大而安全的代码体验。 什么是Rio? 下图是Rio的架构: image Rio采用了诸如Kubernetes、knative、linkerd、cert-manager、buildkit以及gloo等技术,并将它们结合起来为用户提供一个完整的应用程序部署环境。 Rio具有以下功能: 从源代码构建代码,并将其部署到Kubernetes集群 自动为应用程序创建DNS记录,...阅读全文

学习笔记-go库源码文件

库源码文件 库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话)。他代码”可以与被使用的程序实体在同一个源码文件内,也可以在其他源码文件,甚至其他代码包中。 怎样把命令源码文件中的代码拆分到其他库源码文件? cat demo4.go package main //这里也申明了属于main包 import ( "flag" ) var name string func init() { flag.StringVar(&name, "name", "everyone", "The greeting object.") } func main() { flag.Parse() hello(name) //调用了代码包一个叫作he...阅读全文

博文 2019-11-08 15:03:13 1350368559

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

每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享 https://github.com/durban89/typescript_demo.git tag: 1.1.2 上篇文章【Go基础学习记录 - 编写Web应用程序 - 博客编辑完善更新功能】,在修改的过程中,遇到了一个问题就是Update函数与sqlite中的函数有冲突的提示,提示内容大概意思是重新定义了这个函数,这次我将更新的逻辑进行了更改,重新定义了下Model,同时将QueryOne函数也进行了更新。 第一步、重新定义Model 重新定义Model,主要是从概念上抽象了一些逻辑,比如一个查询语句最基本的where、select和更新中的update部分,我将...阅读全文

博文 2018-10-17 15:34:40 DurbanZhang

[Golang软件推荐] Golang通用连接池

连接池在编程中并不少见,链接数据库,redis等操作都需要连接池,否则就会出现并发问题,如果每次操作都建立一条新的链接将会大大消耗资源,笔者也是在使用thrift-Clinet链接Service端使用的时候出现了并发问题,然后找到了一个通用的连接池的库在这里分享给大家. 附上: 喵了个咪的博客:w-blog.cn go-commons-pool-Github地址:github.com/jolestar/go-commons-pool 1.连接池 在使用之前我们需要先了解清楚连接池的概念,总结下来连接池主要解决以下几类问题: 减少连接创建时间 与数据库还是Thrift等程序建立连接都是有开销的。如果这类连接是“循环”使用的,使用该方式这些花销就可避免。 简化的编程模式 当使用连接池时,具体的操...阅读全文

博文 2020-02-21 14:32:47 文振熙

leetcode_459

Golang: 思路:这题难道就是区别优秀程序员和一般程序员的那种智商题吗?正确思路是:将两个s字符串拼接起来,如果拼接好的字符串去头掐尾,里面还会出现s的话,就可以知道它是重复字符串了。大佬们一行就能解决了,而我。。。 我自己的代码如下(不建议看): func repeatedSubstringPattern(s string) bool { i:=0 for i阅读全文

博文 2020-01-30 21:32:39 淳属虚构

可视化Go内存管理

本文翻译自《Visualizing memory management in Golang》。 “内存管理”系列的一部分 在这个由多部分组成的系列文章中,我旨在揭示内存管理背后的概念,并对某些现代编程语言的内存管理机制做更深入的探究。我希望该系列文章可以使您对这些语言在内存管理方面正在发生的事情能有所了解。 在本章中,我们将研究Go编程语言(Golang)的内存管理。和C/C++、Rust等一样,Go是一种静态类型的编译型语言。因此,Go不需要VM,Go应用程序二进制文件中嵌入了一个小型运行时(Go runtime),可以处理诸如垃圾收集(GC),调度和并发之类的语言功能。 如果您还没有阅读本系列的第一部分,请先阅读它,因为在那篇文章中我解释了栈(stack)和堆(heap)内存之间的区别,...阅读全文

5.1.1Golang开发环境搭建

目录:https://www.jianshu.com/p/e406a9bc93a9 搭建go开发环境 安装go开发包 Go官方镜像站(推荐):https://golang.google.cn/dl/ 根据系统下载相应的安装包。Windows直接是msi文件,直接安装即可。 安装完成 配置GOPATH 因为go是一个编译性语言,所以他需要一个自己的工作空间来存储代码文件(src),中间文件(pkg),编译文件(bin)。 示意图 同时配置环境变量: 示意图 安装vscode 官方文档:https://code.visualstudio.com/docs/?dv=win 中文插件 go插件 第一个go语言程序 目录树 package main import "fmt" func main() {...阅读全文

Golang——安装和第一个Go语言

Go(Golang)、静态编译型语言 UTF8编码 1.官网下载安装包(Mac) 安装包完成之后,在命令后确认 $ go version go version go1.14.2 darwin/amd64 # Go语言默认安装目录 $ echo $GOROOT #查看go的相关环境变量 $ go env 2.配置GOPATH GOPATH是一个环境变量,用来表示go项目的存放路径(工作目录)。 GOPATH路径最好只设置一个,所有的项目代码放到GOPATH的src目录下。 3.Go目录结构 在GOPATH有三个目录 (1)bin:存放编译后的二进制文件 (2)pkg:存放编译后的库文件 (3)src:存放源码文件,可以放多个项目的 image.png image.png image.png 4...阅读全文

go的time

package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now()) fmt.Println(time.Now().Unix()) fmt.Println(time.Now().Second()) //程序耗时可以用结束时间-开始时间 fmt.Println(time.Now().UnixNano()) //里面的时间必须按照这些数值来 fmt.Println(time.Now().Format("02/1/2006 15:04")) fmt.Println(time.Now().Format("2006-1-02 15:04")) } 输出:2019-01-22 13:44:16.0255278 +0800 C...阅读全文

博文 2019-01-22 18:35:15 梁十八

golang的几个问题

面试中有遇到几个golang的问题,记录一下 recover能处理所有的异常吗 根据目前查到的资料和实践, recover能处理程序主动触发的panic和除0以及空指针访问、异常地址访问等错误,因此可以认为是能处理所有异常了。 golang中常量是怎么实现的 这个问法还是很奇怪的, 从汇编中看是对字符串常量加了一个标号,同时设置为SRODATA,也就是只读,对数字常量直接在代码中作为立即数使用了 简单描述下golang的gc算法 golang现行的gc算法是三色标记法,三色指的是在gc过程中会把对象标记给黑,灰,白三色。 三色标记法是对标记-清除算法的优化,目的是减少stop the world的时间。 标记-清除算法: 对象只有黑白两色 stop the world,即停止所有gorout...阅读全文

博文 2019-07-01 00:32:42 王小二黑

「golang」go 交叉编译 (转)

自“http://blog.csdn.net/panshiqu/article/details/53788067” 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...阅读全文

在 Fefora 上开启 Go 语言之旅

Go 编程语言于 2009 年首次公开发布,此后被广泛使用。特别是,Go 已经成为云基础设施领域的一种代表性语言,例如 Kubernetes、OpenShift 或 Terraform 等大型项目都使用了 Go。 Go 越来越受欢迎的原因是性能好、易于编写高并发的程序、语法简单和编译快。 让我们来看看如何在 Fedora 上开始 Go 语言编程吧。 在 Fedora 上安装 Go Fedora 可以通过官方库简单快速地安装 Go 语言。 $ sudo dnf install -y golang $ go version go version go1.12.7 linux/amd64 复制代码既然装好了 Go ,让我们来写个简单的程序,编译并运行。 第一个 Go 程序 让我们来用 Go 语言写...阅读全文

博文 2019-09-02 23:34:37 Linux中国

zero down-time update服务的方案

从问题开始 先来抛一块砖,对于静态编译的应用程序,比如用C、C++、Golang或者其它的语言编写的程序,如果我们修改一个BUG或者添加一个新的特性后,如何在服务不下线的情况下更远应用程序呢?抛出了一个问题,一个很平常的问题,有人对问题思考比较透彻,比如牛顿,被苹果砸中了之后,引起了很多的思考,最后发现了万有引力定律。 如果你被苹果砸中了怎么办? 玩笑话一句,那我们如果被苹果砸中了会不死变成智障呢? 那么我们回到刚才这个问题 :当我们修复BUG,添加新的需求后,如何如丝般顺滑地升级服务器应用程序,而不会中断服务?这个问题意味着:C / C++ / GO都是静态语言,所有的指令都编译在可执行文件,升级就意味着编译新的执行文件替换旧的执行文件,已经运行的进程如何加载新的image(可执行程序文件...阅读全文

博文 2019-07-02 21:32:44 Yt_cc

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

本节完整代码:GitHub 本文是关于使用 ReactJS 和 Go 构建聊天应用程序的系列文章的第 3 部分。你可以在这里找到第 2 部分 - 后端实现 Header 组件 我们先来创建一个非常简单的 Header 组件。我们需要在 frontend/src/ 目录下 创建一个叫 components/ 的新目录,并在其中添加一个 Header/ 目录,它将容纳 Header 组件的所有文件。 - src/ - - components/ - - - Header/ - - - - Header.jsx - - - - index.js - - - - Header.scss 复制代码 注意 - 每当我们创建一个新组件时,我们将在 components/ 目录中创建一个新目录,我们会在该目...阅读全文

博文 2019-08-02 19:34:18 咔叽咔叽

运维大神如何使用 Golang 日志监控应用程序

你是如何使用 Golang 日志监控你的应用程序的呢?Golang 没有异常,只有错误。因此你的第一印象可能就是开发 Golang 日志策略并不是一件简单的事情。不>支持异常事实上并不是什么问题,异常在很多编程语言中已经失去了其异常性:它>们过于被滥用以至于它们的作用都被忽视了。-- Nils 本文导航1、Golang 日志基础 使用 Golang “log” 库 2、为你 Golang 日志统一格式 JSON 格式的结构优势 标准化 Golang 日志 3、Golang 日志上下文的力量 4、 Golang 日志对性能的影响 不要在 Goroutine 中使用日志 使用异步库 使用严重等级管理 Golang 日志 5、集中化 Golang 日志 6、希望你享受你的 Golang 日志之旅 ...阅读全文

Golang的WaitGroup陷阱

sync.WaitGroup是并发环境中,一个相当常用的数据结构,用来等待所有协程的结束,在写代码的时候都是按着例子的样子写的,也没用深究过它的使用。前几日想着能不能在协程中执行Add()函数,答案是不能,这里介绍下。 陷阱在WaitGroup的3个函数的调用顺序上。先回顾下3个函数的功能: Add(delta int):给计数器增加delta,比如启动1个协程就增加1。 Done():协程退出前执行,把计数器减1。 Wait():阻塞等待计数器为0。 考一考 下面的程序是创建了协程father,然后father协程创建了10个子协程,main函数等待所有协程结束后退出,看看下面代码有没有什么问题? package main import ( "fmt" "sync" ) func fath...阅读全文

博文 2018-10-29 15:35:10 shitaibin

Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(二)

添加编辑和保存功能 继续上篇文章【Go基础学习记录 - 编写Web应用程序 - 添加编辑和保存功能(一)】 如果将上篇文章的逻辑进行构建并运行,试图访问一个不存在的wiki,比如/view/APageThatDoesntExist,将看到包含HTML的空页面。这是因为它忽略了loadPage的错误返回值,并继续尝试填写没有数据的模板。相反,如果请求的页面不存在,它应该将客户端重定### 处理不存在的页面修改下viewHandler来达到我们的需求,如下 func viewHandler(w http.ResponseWriter, r *http.Request) { title := r.URL.Path[len("/view/"):] p, err := loadPage(title) ...阅读全文

博文 2018-08-08 11:34:48 DurbanZhang

[译]像专家一样使用 panic

作者: Vladimir Kovpak | 发布时间:2018-08-21 (i do it cause i need to...) 预备知识 本文假定你已经熟悉 go 语言及其 panic/recorer 函数、以及任何其他具有异常(try-catch)概念的编程语言。 介绍 你可能已经在《The Little Go Book》中看到诸如这样的句子: Go 处理错误的首选方式是 return values,而不是抛出错误 也许你在 go wiki 上看到过《CodeReviewComments》,上面写着: 不要在平常的错误处理中使用 panic,而应使用 error 和多参数返回* 另外,你可能已经看过文章《Effective Go》 ,上面说: 向调用者报告错误的通常方法,是将错误作为...阅读全文

博文 2020-05-05 23:34:23 henry_chen

Go学习笔记一(实用的基础概念)

引言 自己对学习go语言的心得进行个记录,方便未来复习。也见证自己的一个学习过程 应用程序⼊⼝ 必须是 main 包:package main 必须是 main 方法:func main() ⽂件名不一定是 main.go main函数的传参和返回 main 函数不不⽀支持传⼊入参数,在程序中直接通过 os.Args 获取命令⾏行行参数。 Go 中 main 函数不不⽀支持任何返回值,通过 os.Exit 来返回状态。 func main() { if len(os.Args) > 1 { fmt.Println("Hello World", os.Args[1]) os.Exit(11) } } 在终端go run文件,在后面带上参数即可,下面是打印的结果 打印的结果 编写测试程序 源码⽂...阅读全文

博文 2019-07-10 09:02:39 Jabir2HLJ

Spring 中获取 request 的几种方法,及其线程安全性分析

概述在使用Spring MVC开发Web系统时,经常需要在处理请求时使用request对象,比如获取客户端ip地址、请求的url、header中的属性(如cookie、授权信息)、body中的数据等。由于在Spring MVC中,处理请求的Controller、Service等对象都是单例的,因此获取request对象时最需要注意的问题,便是request对象是否是线程安全的:当有大量并发请求时,能否保证不同请求/线程中使用不同的request对象。 这里还有一个问题需要注意:前面所说的“在处理请求时”使用request对象,究竟是在哪里使用呢?考虑到获取request对象的方法有微小的不同,大体可以分为两类:(1)在Spring的Bean中使用request对象:既包括Controller...阅读全文

博文 2019-02-21 18:34:41 MyBatis

Golang交叉编译

Golang从1.5版本起支持交叉编译,可以在一个平台上生成另一个平台的可执行程序,非常方便,交叉编译依赖于环境变量GOOS(操作系统),GOARCH(架构),CGO_ENABLED(是否启用cgo)。 Windows 下编译 Mac 和 Linux 64位可执行程序 SET CGO_ENABLED=0 SET GOOS=darwin SET GOARCH=amd64 go build main.go SET CGO_ENABLED=0 SET GOOS=linux SET GOARCH=amd64 go build main.go Mac下编译 Linux 和 Windows 64位可执行程序 CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build m...阅读全文

博文 2019-08-16 00:32:44 土豆吞噬者

Golang 大杀器之性能剖析 PProf

文地址:Golang 大杀器之性能剖析 PProf 前言 写了几吨代码,实现了几百个接口。功能测试也通过了,终于成功的部署上线了 结果,性能不佳,什么鬼????? 想做性能分析 PProf 想要进行性能优化,首先瞩目在 Go 自身提供的工具链来作为分析依据,本文将带你学习、使用 Go 后花园,涉及如下: runtime/pprof:采集程序(非 Server)的运行数据进行分析 net/http/pprof:采集 HTTP Server 的运行时数据进行分析 是什么 pprof 是用于可视化和分析性能分析数据的工具 pprof 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告) profile.proto 是一个 Protocol Bu...阅读全文

博文 2019-07-19 21:32:40 李_MAX

使用Envoy 作Sidecar Proxy的微服务模式-3.分布式追踪

本博客是深入研究Envoy Proxy和Istio.io 以及它如何实现更优雅的方式来连接和管理微服务系列文章的一部分。 这是接下来几个部分的想法(将在发布时更新链接): 断路器(第一部分) 重试/超时(第二部分) 分布式跟踪(第三部分) Prometheus的指标收集(第四部分) 服务发现(第五部分) 第三部分 - 使用envoy proxy 实现分布式追踪 第一篇博文向您介绍了Envoy Proxy的断路功能实现。在第二部分中,仔细研究了如何启用额外的弹性功能,如超时和重试。在第三部分中,我们将了解如何在服务网格中启用分布式跟踪。有意进行一些简单的演示,因此我可以单独说明模式和用法。请下载此演示的源代码并按照说明进行操作! 该演示由一个客户端和一个服务组成。客户端是一个Java http...阅读全文

博文 2019-02-23 19:34:41 iyacontrol

Golang sync.WaitGroup基础用法

package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() fmt.Println("First goroutine sleep") time.Sleep(1 * time.Second) }() wg.Add(1) go func() { defer wg.Done() fmt.Println("Second goroutine sleep") time.Sleep(2 * time.Second) }() wg.Wait() fmt.Println("All goroutines complete") } 程序输出...阅读全文

博文 2019-06-08 15:32:42 FredricZhu

GoLang-Scheduling In Go : Part I - OS Scheduler

Scheduling In Go系列文章 本文主要针对Go语言中的调度。 目录 Part I - OS Scheduler Part II - Go Scheduler Part III - Concurrency Part I - OS Scheduler 第一部分,将提供对Go中调度器背后的机制和语义的理解。 Introduction Go调度的设计与实现提供了高效率和高性能的多线程,然而如果你的Go程序多线程设计不支持Go调度的工作,那这也将无济于事。本文主要集中于调度程序的高级机制和语义,展现出多线程工作的一些细节,从而帮助你更好的做出工程决策。 OS Scheduler 操作系统调度器是软件非常重要的部分。我们的程序在运行运行的时候只是一串需要被顺序执行的指令,为了执行这些指令,操...阅读全文

博文 2020-03-16 09:32:57 帘外五更风

golang进行交叉编译

golang进行交叉编译 交叉编译即编译不同操作系统平台的可执行程序 golang执行交叉编译,只需要使用两个变量 - GOOS:目标操作系统 - GOARCH:目标操作系统的架构 根据下面这个表格指定就行了。 其中386指的是32位系统 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 build命令的用法如下 usage: go build [-o output] [-i] [build flags]...阅读全文

博文 2020-03-27 06:32:42 泥之天空

生产环境容器落地最佳实践 --JFrog 内部K8s落地旅程

引言Kubernetes已经成为市场上事实上领先的编配工具,不仅对技术公司如此,对所有公司都是如此,因为它允许您快速且可预测地部署应用程序、动态地伸缩应用程序、无缝地推出新特性,同时有效地利用硬件资源。本期我们将回顾采用Kubernetes作为容器编排工具的公司所面临的复杂性和挑战。我们希望我们提供的经验教训、最佳实践和技巧将帮助您在前往K8s旅途中起步并继续前进。本期将介绍关于在Kubernetes生产环境的最佳实践,包括::为上K8s容器云准备好应用程序在Kubernetes中获得灵活性和通用性为所有应用程序使用单一、可信和可靠的源自动部署到Kubernetes在Kubernetes中构建可靠且可伸缩的环境可见性和安全性:在Kubernetes中保护您的应用程序在Kubernetes中记...阅读全文

博文 2020-03-12 13:37:17 JFrogChina

【转载】关于docker的15个小tip

文地址:http://www.cnblogs.com/elnino/p/3899136.html 获取最近运行容器的id 这是我们经常会用到的一个操作,按照官方示例,你可以这样做(环境ubuntu): $ ID=$(docker run ubuntu echo hello world) hello world $ docker commit $ID helloworld fd08a884dc79 这种方式在编写脚本的时候很有用,比如你想在脚本中批量获取id,然后进一步操作。但是这种方式要求你必须给ID赋值,如果是直接敲命令,这样做就不太方便了。 这时,你可以换一种方式: $ alias dl=’docker ps -l -q’ $ docker run ubuntu echo hello w...阅读全文

博文 2019-01-31 12:34:43 Mr_Leung

面试都在问的微服务,一文带你彻底搞懂!

来自公众号:后端技术学堂 作者LemonCoder 单体式应用程序 与微服务相对的另一个概念是传统的「单体式应用程序」( Monolithic application ),单体式应用内部包含了所有需要的服务。而且各个服务功能模块有很强的耦合性,也就是相互依赖彼此,很难拆分和扩容。 在座的各位都写过单体程序,给大家举个栗子,刚开始写代码你写helloworld 程序就是单体程序,一个程序包含所有功能,虽然helloworld 功能很简单。 单体应用程序的优点 开发简洁,功能都在单个程序内部,便于软件设计和开发规划。 容易部署,程序单一不存在分布式集群的复杂部署环境,降低了部署难度。 容易测试,没有各种复杂的服务调用关系,都是内部调用方便测试。 单体应用程序的缺点 单体程序的缺点一开始不是特别明...阅读全文

博文 2020-05-28 06:32:45 码农小光

Golang单元测试入门实践总结

背景: 之前很长一段时间再写Golang程序时,不会有意识去写单元测试,直到后来写了独立项目后,慢慢才发现给一个功能编写对应的单元测试是多么高效和方便,接下来就再一起复习下Golang中的测试. UnitTest(单元测试) 单元测试是程序开发者适用一段代码来验证另外一段代码写的是否符合预期的一种相对高效的自我测试方法。 还记得最早开始搞运维时,写的程序基本上是通过main程序去调用具体的功能函数,然后通过具体的输出来主观验证结果是否符合预期,这种方式对于搞正统的软件开发者而言会感觉很傻,但这对于运维领域来说却很实用,很有效,因为通常运维工作中需要的一些开发都不会是逻辑较为复杂的程序,所以没有必要专门去写测试程序去测试另外一个程序是否符合预期。 但是随着工作内容和运维需求的变化,不得不使用一...阅读全文

博文 2019-11-10 03:32:58 更多精彩内容【实践】Golang的单元测试入门go test笔名辉哥[译]golang基础-编写单元测试GeminiGirl0604GO语言静态代码测试---应用于区块链构建性测试老余2017golang 单元测试 UnitTest 覆盖率 基准测试木猫

最新golang开发环境搭建

本文将以mac环境为例给读者一个搭建golang开发环境的方案 golang安装 在mac 系统下,大部分用户都安装有home brew(https://brew.sh/ ),我们可以通过home brew来安装golang。 brew install go 执行完毕后 执行go version可以查看go的版本。 设置GOPROXY echo "export GOPROXY=https://goproxy.cn" >> $HOME/.zshenv source $HOME/.zshenv VSCode安装 打开https://code.visualstudio.com/。点击“Download For Mac” 下载Vscode。下载完成后解压,可以得到Visual Studio Code...阅读全文

golang 基础(28)defer

square-gopher.png 资源管理与出错处理 defer 调用 有的时候我们需要程序发生错误后需要进行后续的处理,例如关闭文件、结束网络连接等。这时候我们就会用到 def ,如果是 java 的 developer 可以理解为 finally。 确保在函数结束时发生 参数在 defer 语句时计算 defer 列表为后进先出 var wg sync.WaitGroup func say(s string){ for i:=0; i < 3; i++ { fmt.Println(s) time.Sleep(time.Millisecond * 100) } wg.Done() } func main(){ wg.Add(1) go say("Hey") wg.Add(1) go sa...阅读全文

博文 2019-04-03 08:34:39 zidea

你的Helm安全吗?

一、背景Kubernetes是目前最为流行、成为事实标准的容器集群管理平台,为容器化应用提供了部署运行、资源调度、服务发现和动态伸缩等一系列完整功能。在Kubernetes当中,用户通过使用API对象,如Pod、Service、Deployment等,来描述应用的程序规则,而这些资源对象的定义一般需要写入一系列的YAML文件中,然后通过 Kubernetes 命令行工具Kubectl进行部署。由于通常应用程序都涉及到多个Kubernetes API对象,而要描述这些API对象就可能要同时维护多个YAML文件,从而在进行 Kubernetes 软件部署时,通常会面临下述几个问题:如何管理、编辑和更新这些这些分散的 Kubernetes 应用配置文件如何把一套相关的配置文件作为一个应用进行管理如...阅读全文

没有“银弹” 之 微服务架构

没有“银弹”没有一种单纯的技术或管理上的进步,能够独立地承诺在10年内大幅度地提高软件的生产率、可靠性和简洁性。 什么是微服务 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。 系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。 每个微服务仅关注于完成一件任务并很好地完成该任务。 在所有情况下,每个任务代表着一个小的业务能力。 其实微服务本身不是什么新技术,只是随着业务的不断发展,对业务不断分层,不断拆分,形成的一种架构风格。 微服务与SOA 技术为业务而生,架构也为业务而出现。 随着业务的发展、用户量的增长,系统数量增多,调用依赖关系也变得复杂,为了确保系统高可用、高并发的要求,系统的架构也从单体时代慢慢迁移至服务SOA时代。 根据不同服务对系统资源的要求不同,我...阅读全文

博文 2020-03-27 16:32:46 陌若尘_c167

2019-01-17

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

博文 2019-01-17 17:35:04 青春埋在这

Part I - 操作系统调度(翻译)

Part I - 操作系统调度 简介 多线程程序是如何正确的调度工作的,在这里作者给出了很多详细的例子一步步深入。 OS Scheduler 您的程序只是一系列需要一个接一个顺序执行的机器指令。为了实现这一点,操作系统使用了线程的概念。线程的任务是说明并顺序执行分配给它的指令集。执行一直持续到线程不再有指令可执行。这就是为什么我称线程为“执行路径” 您运行的每个程序都创建一个进程,每个进程都有一个初始线程。线程能够创建更多的线程。所有这些不同的线程彼此独立运行,调度决策是在线程级别而不是在进程级别做出的。线程可以并行运行(每个线程在单个内核上轮流运行),也可以并行运行(每个线程在不同内核上同时运行)。线程还保持自己的状态,以允许安全、本地和独立地执行它们的指令。 如果有线程可以执行,操作系统...阅读全文

博文 2019-07-15 15:34:57 chenxull