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

如何从单独的容器调试运行中的Docker容器

容器非常适合封装软件,但是有时一味地改造容器镜像以使其尽可能小时,您可能走得太远。我们需要在“简洁”的镜像和无法调试的镜像之间找到很好的平衡。 看到人们调试正在运行的容器的正常方法是docker exec -it $ CONTAINER sh并根据需要在容器中安装调试工具。但是,如果您的容器没有/ bin / sh怎么办?如果没有包管理器怎么办?您可以使用docker cp将实用程序复制到容器中,然后将exec复制到正在运行的容器中,但这也很麻烦。 因此,一个朋友最近没有询问如何从容器中进行调试,而是询问如何从其他容器中进行调试。我没有那么聪明,所以我在网上问了很多聪明的人,并得到了很好的答复。 我们创建一个只有caddy的精简容器。 首先下载/提取caddy二进制文件 $: curl ht...阅读全文

博文 2019-10-19 19:32:54 iyacontrol

Go module 使用说明

go modules 是 golang 1.11 新加的特性。 1、设置go mod GO111MODULE GO111MODULE 有三个值:off, on和auto(默认值)。 GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。 GO111MODULE=on,go命令行会使用modules,而一点也不会去GOPATH目录下查找。 GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形: 当前目录在GOPATH/src之外且该目录包含go.mod文件 当前文件在包含go.mod文件的目录下面。 当modules 功能启...阅读全文

博文 2020-03-21 16:32:45 whoam1_python

linux安装golang

系统命令安装 yum install go 手动下载配置 访问golang中国 下载最新版本 wget http://golangtc.com/static/go/go1.5rc1/go1.5rc1.darwin-amd64.tar.gz 配置环境变量 打开/etc/profile文件 export GOPATH=/usr/local/go export PATH=$GOPATH/bin:$PATH 编译profile文件,使之立即生效 source /etc/profile 检测go安装成功与否 go version 源码编译安装 下载go1.4二进制编译器 访问下载地址找到对应系统的1.4压缩包,下载后解压并复制到user目录下命名为go1.4 从Github获取源码 $ git clo...阅读全文

博文 2017-07-01 17:04:05 buglife

Golang 入门 : 数组

数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),这种类型可以是任意的原始类型,比如 int、string 等,也可以是用户自定义的类型。一个数组包含的元素个数被称为数组的长度。在 Golang 中数组是一个长度固定的数据类型,数组的长度是类型的一部分,也就是说 [5]int 和 [10]int 是两个不同的类型。Golang 中数组的另一个特点是占用内存的连续性,也就是说数组中的元素是被分配到连续的内存地址中的,因而索引数组元素的速度非常快。 本文将介绍 Golang 数组的基本概念和用法,演示环境为 ubuntu 18.04 & go1.10.1。 Golang 数组的特点 我们可以把 Golang 数组的特征归纳为以下三点: 固定长度:这意味着数组...阅读全文

博文 2019-04-15 12:34:41 菜鸟飞不动

Golang 使用 protobuf 的教程

1、下载protobuf的编译器protoc 网站:https://github.com/google/protobuf/releases 选择各自平台的版本下载window: 下载: protoc-3.3.0-win32.zip 解压,把bin目录下的protoc.exe复制到GOROOT/bin下,GOROOT/bin加入环境变量。 当然也可放在其他目录,需加入环境变量,能让系统找到protoc.exelinux: 下载:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip 解压,把bin目录下的protoc复制到GOROOT/bin下,GOROOT/bin加入环境变量。 如果喜欢编译安装的,也可下载源码自行安装,最后...阅读全文

博文 2020-01-20 17:32:43 佳闯天涯

Go channel实现源码分析

go通道基于go的并发调度实现,本身并不复杂,go并发调度请看我的这篇文章:go并发调度原理学习 1.channel数据结构 type hchan struct { qcount uint // 缓冲区中已有元素个数 dataqsiz uint //循环队列容量大小 buf unsafe.Pointer // 缓冲区指针 elemsize uint16 //元素大小 closed uint32 //关闭标记,0没关闭,1关闭 elemtype *_type //数据项类型 sendx uint //发送索引 recvx uint //接收索引 recvq waitq //等待接收排队链表 sendq waitq //等待发送排队链表 lock mutex //锁 } type waitq s...阅读全文

Go语言基础(三)—— 面向对象编程

前言: 本专题用于记录自己(647)在Go语言方向的学习和积累。 系列内容比较偏基础,推荐给想要入门Go语言开发者们阅读。 目录如下: Go语言基础(一)—— 简介、环境配置、HelloWorld Go语言基础(二)—— 基本常用语法 Go语言基础(三)—— 面向对象编程 Go语言基础(四)—— 优质的容错处理 Go语言基础(五)—— 并发编程 Go语言基础(六)—— 测试、反射、Unsafe Go语言基础(七)—— 架构 & 常见任务 Go语言基础(八)—— 性能调优 本篇将介绍如下内容: 1.Go是面向对象的语言么? 2.结构体与行为(方法)的定义 3.接口(协议) 我们先来看个引子:“Is Go an object-oriented language?” 在Go的官方论坛里有世界各地的...阅读全文

博文 2020-02-03 10:34:16 奇舞647

Go基础学习记录之阻止Session劫持(Preventing session hijacking)

阻止Session劫持(Preventing session hijacking) Session劫持是一种常见且严重的安全威胁。在与服务器通信时,客户端使用Session ID进行验证和其他目的。不幸的是,恶意第三方有时可以跟踪这些通信并找出客户端Session ID。本次分享,将向您展示如何为教育目的劫持Session。 Session劫持过程 以下代码是count变量的计数器: // WelcomeLogin 欢迎登录页 func WelcomeLogin(w http.ResponseWriter, r *http.Request) { session, err := appSession.SessionStart(w, r) if err != nil { fmt.Fprintf(...阅读全文

博文 2018-11-06 14:34:44 DurbanZhang

go modules 的一些细节

前言 在一些Java的项目中,有 Maven等这些版本管理工具,可以很好的管理各种版本依赖关系,但是在 Golang 的项目中,之前官方并没有提供版本管理工具,以前都是用 go get 进行安装, 随着项目的变大, 就处理这种依赖关系就变得很麻烦, 原文 如果你对Go感兴趣, 可以关注我的公众号: GoGuider vendor 机制 为了解决版本依赖问题, 官方出了一个 vendor 机制,将项目依赖的包都放在该目录中,但这也并没有很好地管理依赖的版本。 因为vendor 机制有几个大的问题: 1、需要将外部库放到项目中, 导致项目体积变得很大 2、项目版本很难指定和控制 go dep 和 go modules 之后官方出了一个准官方版本管理工具 go dep,这也算是 go module...阅读全文

Golang 复制文件的三种做法

主要介绍三种复制文件的方法: 使用io.Copy()方法 一次性读取输入文件,然后再一次性写入目标文件 使用buffer一块块地复制文件 方法一 : 使用io.Copy func copy(src, dst string) (int64, error) { sourceFileStat, err := os.Stat(src) if err != nil { return 0, err } if !sourceFileStat.Mode().IsRegular() { return 0, fmt.Errorf("%s is not a regular file", src) } source, err := os.Open(src) if err != nil { return 0, err...阅读全文

博文 2019-03-10 22:34:40 Wenchao

用Go实现冒泡排序、选择排序和快速排序的运行效率

//环境和语言版本:go version go1.13 windows/amd64/********************************代码如下:*****************************************/package mainimport ( "fmt" "math/rand" "time")func main() { // b := [...]int{7, 89, 99, 55, 2235, 515, 88, 22, 2} // b2 := [...]int{7, 89, 99, 55, 2235, 515, 88, 22, 2} // // b3 := [...]int{7, 89, 99, 55, 2235, 515, 88, 22, 2} //...阅读全文

博文 2020-02-11 17:56:29 whalert

关于一致性hash,这可能是全网最形象生动最容易理解的文档,想做架构师的你来了解一下

问题提出 一致性hash是什么?假设有4台缓存服务器N0,N1,N2,N3,现在需要存储数据OBJECT1,OBJECT2,OBJECT3,OBJECT4,OBJECT5,OBJECT5,OBJECT7,OBJECT8, 我们需要将这些数据缓存到这4台服务器上,相应的问题是 如何设计数据存放策略?即ObjectX 应该存放在哪台服务器上? 为了解决这个问题,我们有如下几个思路。 1. 余数hash方案 采用hash(Objectx)%4来确定服务器节点 假设 hash(OBJECT1)=2,由 2%4=2,可知,Object1则应该存放到节点N2上 假设 hash(OBJECT2)=3,由 3%4=3,可知,Object2则应该存放到节点N3上 假设 hash(OBJECT3)=1,由 1%...阅读全文

博文 2019-08-24 01:32:49 非正式解决方案

风中的 FAQ-2

51.go modules依赖管理 简介 一般从GOPATH、vendor文件夹下寻找依赖包。使用该功能后根据go.mod文件中的记录下载依赖。 go.mod中使用//作为注释 module:定义当前模块和包路径 require:定义依赖的模块和版本 exclude:排除特定模块和版本的使用 replace:模块源的替换 使用 go get xxx会自动将依赖模块添加到go.mod文件中 网络访问不了golang.org/x等谷歌扩展包,可以使用replace replace ( golang.org/x/crypto => github.com/golang/crypto latest golang.org/x/sys => github.com/golang/sys latest ) g...阅读全文

博文 2019-07-12 14:32:44 我就是小政政

通过例子学习 Go 和 Rust ---- IO Reader

IO操作是咱编程时经常会遇到的,两种语言都提供了通用的Read方法,可以让咱从reader结构体里面读出数据。 Go //io/io.go type Reader interface { Read(p []byte) (n int, err error) } //bytes/reader.go type Reader struct { s []byte i int64 // current reading index prevRune int // index of previous rune; or < 0 } // Read implements the io.Reader interface. func (r *Reader) Read(b []byte) (n int, err er...阅读全文

博文 2020-03-05 12:32:42 Tericoder