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

etcd快速入门

## 安装 下载地址:https://github.com/etcd-io/etcd/releases 下载完成解压后,目录中有两个二进制文件, etcd以及 etcdctl。其中 etcd就是运行etcd服务的二进制文件, etcdctl是官方提供的命令行etcd客户端,使用 etcdctl可以在命令行中访问etcd服务。 查看etcd版本 `./etcd --version` ## 运行 ### 单点启动 查看启动帮助 `./etcd -h` 启动 `./etcd` ``` 2019-11-01 10:04:11.922204 I | embed: name = default 2019-11-01 10:04:11.922204 I | embed: data dir = defaul...阅读全文

博文 2019-11-05 13:17:37 bytemode

译文:Go 内存分配器可视化指南

译文:Go 内存分配器可视化指南 Sat 23 February 2019 当我第一次开始尝试理解 Go 语言的内存分配器时,整个过程让我抓狂。一切看起来都像一个神秘的黑盒子。因为几乎所有技术魔法(technical wizardry)都隐藏在抽象之下,所以你需要一层一层的剥离才能去理解它。 我们将通过这篇文章来一层层的剥离这些细节。如果你想学习所有关于 Go 内存分配器的知识,那么这篇文章正适合你。 物理内存和虚拟内存 每一个内存分配器都需要运行在由底层操作系统管理的虚拟内存空间(Virtual Memory Space)之上。 下图是一个物理内存单元(Physical Memory Cell)的简要说明(非精准) 一个内存单元的概述经过大大简化之后描述如下: 地址线(Address li...阅读全文

博文 2019-06-10 15:49:26 www.linuxzen.com

[]T 还是 []*T, 这是一个问题 全面分析Go语言中的类型和类型指针的抉择

目录 [−] 副本的创建T的副本创建*T的副本创建如何选择 T 和 *T什么时候发生副本创建最常见的casemap、slice和数组for-range循环channel函数参数和返回值Method Receiver不同类型的副本创建bool,数值和指针数组map、slice 和 channel字符串函数参考文档 在编程语言深入讨论中,经常被大家提起也是争论最多的讨论之一就是按值(by value)还是按引用传递(by reference, by pointer),你可以在C/C++或者Java的社区经常看到这样的讨论,也会看到很多这样的面试题。 对于Go语言,严格意义上来讲,只有一种传递,也就是按值传递(by value)。当一个变量当作参数传递的时候,会创建一个变量的副本,然后传递给函数或...阅读全文

博文 2017-02-08 12:53:45 smallnest

理解 Golang 中 slice 的底层设计

Slice 结构体 golang 中的 slice 数据类型,是利用指针指向某个连续片段的数组。一个 slice 在 golang 中占用24个 bytes a = make([]int, 0) unsafe.Sizeof(a) // 24 var c int unsafe.Sizeof(c) // 8, 一个 int 在 golang 中占用 8 个bytes(本机是64位操作系统) 在 runtime 的 slice.go 中,定义了 slice 的 struct type slice struct { array unsafe.Pointer // 8 bytes len int // 8 bytes cap int // 8 bytes // 确认了,slice 的大小 24 } a...阅读全文

博文 2019-09-27 20:02:37 lambert

【golang】切片扩容原理,完成入栈操作

我们都知道,切片是对一段数组的引用,其内部有指向引用数组首地址指针,长度与容量三个部分组成。其长度相对于数组是可变的。 通过append可以给切片添加元素,如果切片长度超过容量时候,切片会进行自动扩容(扩容过程通过拷贝实现的),需要注意的当切片扩容时,其会新开一块内存来存储扩容后的切片,相比前后其内存地址已经改变,这在引用中是一个易错点 切片扩容机制:当原切片长度小于1024时,新切片的容量会直接翻倍。而当原切片的容量大于等于1024时,会反复地增加25%,直到新容量超过所需要的容量 下面演示一段,切片扩容原理 type queue []*Use func NewQp() queue { return make(queue, 0, 1) } func (pq *queue) push(u *...阅读全文

博文 2020-04-16 03:32:48 dongzaidong

Golang从入门到精通(十五):Golang指针

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangxianghehe/article/details/78792127 指针概念 一个指针可以指向任何一个值的内存地址 它指向那个值的内存地址,在 32 位机器上占用 4 个字节,在 64 位机器上占用 8 个字节,并且与它所指向的值的大小无关。当然,可以声明指针指向任何类型的值来表明它的原始性或结构性;你可以在指针类型前面加上*号(前缀)来获取指针所指向的内容,这里的*号是一个类型更改器。使用一个指针引用一个值被称为间接引用。 Go语言指针 在Go语言中,直接砍掉了 C 语言指针最复杂的指针运算部分,只留下了获取指针(&运算符)和获取对象(*运算符)的运算,用法和C语言很类似。但不同的...阅读全文

博文 2018-12-17 17:31:33 xiangxianghehe

如何使用 golang 写 IP地址生成器

这个是同事提的一个需求,希望能给出一个开始地址和结束地址,能打印出两者之间的所有地址。这个本来可以简单的通过shell也可以完成(满255进1),不过刚好最近在学习golang,所以就想着用golang的位运算实现下ip地址的生成。原理也比较简单,先将IP地址数字化,通过循环遍历前后两个地址中间的数值,再将该数值转化为IP就OK了。代码如下: //code from www.[linux](https://www.linuxprobe.com/ "linux")probe.com package main import ( "bytes" "encoding/binary" "fmt" "net" "strconv" ) //ip到数字 func ip2Long(ip string) uin...阅读全文

博文 2018-11-27 18:35:45 扬那个杨

golang 编程误区

运用golang进行开发也有一段时间了,将自己在开发中遇到的问题在此汇总,以备其他同学参考。 编程误区包括明显和不明显的,这里就不区分了,各位请自己斟酌。 1、使用for range遍历slice/array的问题 误区代码如下: for key, data := range codeCacheAll.CodeList { if _, ok := app.codeCacheDataList[data.Scode]; ok { delete(app.codeCacheDataList, data.Scode) } app.codeCacheDataList[data.Scode] = &data } 其中CodeList 是[]MyStruct类型,codeCacheDataList是map[...阅读全文

(译)Go 语言的内存、指针详解

文链接:Understand Go pointers in less than 800 words or your money back 这是一篇面向即将学习 go 语言并且对指针理念或者 go 的指针类型不是很了解的程序员的内容 什么是指针? 简单解释,指针就是指向另一段地址的值,课本上是这么解释的,但是如果你是一个来自并不讨论变量地址开发语言的开发者,使用指针进行编程将感觉非常的美妙。 我们先换一个话题 什么是内存? 计算机的内存 RAM 可以把它想象成一些有序的盒子,一个接一个的排成一排,每一个盒子或者单元格都被一个唯一的数字标记依次递增,这个数字就是该单元格的地址,也就是内存的地址。 image.png 每一个单元格存储单一的值,如果你知道一个单元格的地址,那么你就可以通过地址读取单...阅读全文

博文 2017-08-29 06:00:11 谢烟客

KVM虚拟机MAC地址冲突,引发服务器对xshell说:Go away!

开场白 最近在机房的服务器上装kvm虚拟主机。不经意间,上演了一场由MAC地址异常而引发的服务器与xshell之间的血案! 问题描述 在一台服务器上装了两个虚拟机,其中一台是从另一台上克隆的。克隆的虚拟机开机之后,发现ssh不能远程连接: 然后在虚拟机管理界面本地去连接上服务器排查: 查看IP地址,想确认xshell是不是连错了IP,找错了对象,却发现ifconfig居然查看不到IP??图: 查看network的启动状态,看到的是绿油油的active状态。然后又查看配置文件/etc/sysconfig/network-scripts/ifcfg-eth0 ,检查IP。配置明明是正确的啊,咋看不到IP呢? 查看/var/log/messages日志,发现有下面这样的报错信息,提示MAC地址有异...阅读全文

博文 2019-06-26 09:03:11 西风未眠

go语言学习笔记(一):*和&的区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liudashuang2017/article/details/79950267 *和&的区别 : & 是取地址符号 , 即取得某个变量的地址 , 如 ; &a *是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 . 从代码中验证 : //先构建一个Person类型 : package main import "fmt" type Person struct{ name string age int } func (r *Person) hello() string{ return r.name ; } func main()...阅读全文

博文 2018-12-06 19:32:37 liudashuang2017

go websocket

获得相应包支持:go get golang.org/x/net/websocket package main import ( "log" "net/http" "os" "golang.org/x/net/websocket" ) func main() { log.Println(os.Args[0]) //第一个参数,显示文件路径 http.Handle("/", websocket.Handler(Echo)) if err := http.ListenAndServe(":8088", nil); err != nil { log.Println(err) } } func Echo(ws *websocket.Conn) { for { var raply string if e...阅读全文

博文 2018-07-12 11:34:55 哆啦在这A梦在哪

技术分享:内存管理

导读:如何写一篇技术文章 确定目标读者群体 从问题出发,带着问题一步一步引出要讲解的内容 基于问题用逻辑推演导出内容 要有逻辑 斐波那契原则 层层递进 ps: 来自知乎问答 正文 本次分享的主题是:内存管理。 首先讲下为什么做这次分享,之前自己看过很多东西,但是呢,由于工作中没有用到,看完后呢就都忘了,就拿redis来说,相信很多人都看过《redis设计与实现》这本书,记得当时自己也一边看书一边看源码,但是现在也不记得什么了。所以呢,我就想有什么方法能够让自己更好的掌握理解所学的知识,即使这些内容在工作中暂时用不到,一个很好的办法就是做测验,即我们经常那一些问题来问自己,检验自己对内容的理解程度,所以本次分享我会先提问,然后为了回答这个问题,一步一步的给出本次分享的内容,当然一是由于内存管理...阅读全文

golang使用nfnt缩放图片

nfnt地址 https://github.com/nfnt/resize package main import ( "fmt" "github.com/nfnt/resize" "image/jpeg" "log" "os" ) func main() { // open "test.jpg" file, err := os.Open("C:\\Users\\cixu\\Desktop\\1\\5.jpg") if err != nil { log.Fatal(err) } // decode jpeg into image.Image img, err := jpeg.Decode(file) if err != nil { log.Fatal(err) } file.Close() ...阅读全文

博文 2019-01-27 20:34:43 次序

GO语言学习 指针&内存

GO有指针。指针的操作与C相同,但没有指针的运算。 GO有两个内存分配原语,new和Make new:new(T)是分配T类型的内存空间,以零值填充,并返回其内存地址。假设有一个F类型的结构体,表达式new(F)和&F{}是等价的。 make:make(T, args)只能创建slice,map,channel,并返回一个非零初始值的T类型...阅读全文

GO获取api 接口json格式数据代码

1.接口数据格式;{ "code": 0, "isAdmin": true, "data": [{ "id": 2, "ip": "192.168.54.12", "desc": "nginx", "owner": "lops01" }, { "id": 5, "ip": "192.168.77.237", "desc": "运维测试", "owner": "ops02" }, { "id": 6, "ip": "192.168.77.82", "desc": "运维管理", "owner": "ops03" }, { "id": 8, "ip": "192.168.79.230", "desc": "服务台测试", "owner": "ops04" }, { "id": 9, "ip": ...阅读全文

博文 2019-06-14 19:03:10 breaklinux

Go by Example: Pointers

Go语言支持指针,允许你在程序里面通过引用传递变量值。 package main import "fmt" // 我们用两个函数:zeroval和zeroptr来演示指针的用法 // zeroval函数有一个int类型参数,这个时候传递给函数的是变量的值。 //zeroval从调用它的哪个函数中得到一个ival的拷贝值。 func zeroval(ival int) { ival = 0 } // 相比之下zeroptr函数的参数是int类型指针,这就意味着传递给该函数的一个int的指针。 //这个 *iptr在函数体内从它的内存地址解析获得这个地址对应的当前值。 // 对于解引用的指针进行赋值操作会改变这个指针引用的真实地址的值。 func zeroptr(iptr *int) { *ip...阅读全文

博文 2015-10-28 09:00:00 codemanship

2018-07-30

build-web-application-with-golang1. web工作方式2. DNS工作原理(1)先看hosts(2)在看本地DNS解析器缓存,是否有这个网址映射关系(3)首先会找本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。(4)如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至 “根DNS服务器”,“根DNS服务器”收到请求后会判断这个域名(.com)...阅读全文

博文 2018-08-02 12:34:51 温暖之隔

socket数据的封装

什么是socket? 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。我们知道两个进程如果需要进行通讯最基本的一个前提能能够唯一的标示一个进程,在本地进程通讯中我们可以使用PID来唯一标示一个进程,但PID只在本地唯一,网络中的两个进程PID冲突几率很大,这时候我们需要另辟它径了,我们知道IP层的ip地址可以唯一标示主机,而TCP层协议和端口号可以唯一标示主机的一个进程,这样我们可以利用ip地址+协议+端口号唯一标示网络中的一个进程,能够唯一标示网络中的进程后,它们就可以利用socket进行通信。建立网络通信连接至少要一对端口号(socket)。socket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的...阅读全文

博文 2017-09-15 13:34:54 初级赛亚人

Go 语言使用Mongodb开发Demo

首先通过go get 安装mongo的依赖库 server1.example.com 更改为你MongoDB的IP地址 go get gopkg.in/mgo.v2 1 go get gopkg.in/mgo.v2 Example: package main import ( "fmt" "log" "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" ) type Person struct { Name string Phone string } func main() { session, err := mgo.Dial("server1.example.com,server2.example.com") if err != nil { panic(err)...阅读全文

博文 2017-02-10 12:22:01 谢权

golang中crypto/rc4包

rc4包实现了RC4加密算法,参见Bruce Schneier's Applied Cryptography。 type KeySizeError int func (KeySizeError) Error() string type Cipher struct{...} func NewCipher(key []byte) (*Cipher, error) NewCipher创建并返回一个新的Cipher。参数key时RC4密钥,至少1字节,最多256字节。 func (c *Cipher) Reset() Reset方法会清空密钥数据,以便将其数据从程序内存中清除(以免被破解) func (c *Cipher) XORKeyStream(dst, src []byte) XORKeySt...阅读全文

基于go的微服务搭建(七) - 服务发现和负载均衡

第七节: 服务发现和负载均衡 原文地址 转载请注明原文及翻译地址 这篇文章将关注两个微服务架构的重要部分:服务发现和负载均衡.和他们是如何帮助我们2017年经常要求的横向扩展容量的 简介 负载均衡和出名.服务发现需要一些解释,从一个问题开始:"服务A如何请求服务B,如果不知道怎么找到B"换句话说,如果你有10个服务B在随机的集群节点上运行,有人要记录这些实例,所以当A需要和B联系时,至少一个IP地址或者主机名可以用(用户负载均衡),或者说,服务A必须能从第三方得到服务B的逻辑名字(服务器负载均衡).在微服务架构下,这两种方法都需要服务发现这一功能.简单来说,服务发现就是一个各种服务的注册器如果这听起来像dns,确实是.不同是,这个服务发现用在你集群的内部,帮助服务找到彼此.然而,dns通常更...阅读全文

博文 2018-05-18 17:34:41 瘦瘦鸭

编写一个非递归的comma函数,运用bytes.Buffer,而不是简单的字符串拼接

来自 go程序设计语言 一书 练习题3.10源博客地址编写一个非递归的comma函数,运用bytes.Buffer,而不是简单的字符串拼接 编写一个非递归的comma函数,运用bytes.Buffer,而不是简单的字符串拼接 package main import ( "bytes" "fmt" ) func main() { fmt.Println(comma("1234567889988")) } func comma(s string) string { var newByte byte = ',' n := len(s) buf := bytes.NewBuffer([]byte{}) if n <= 3 { return s } for i := 0; i < n; i++ { i...阅读全文

博文 2018-03-08 23:34:41 大呜

电脑换IP-更换内网ip地址

要改公网的的IP首先是你有PPTP的帐号密码服务器地址,有了后点击图一建立新的网络连接,点击连接到工作区。点击连接到我的,输入服务器的地址点击下一步。输入帐号密码后点击下一步,接着点击立即连接即可。如果你拥有的是国外的帐号,那么连接后就是国外的IP地址了。等于是更换了公网的IP地址...阅读全文

博文 2019-03-06 10:41:18 xiniuxiaoniu

Golang指针的声明完全符合我的预期

Golang指针的声明是非常清晰明了的。 var i int :声明一个普通变量,类型为int。可以这么读:声明了一个变量i,类型为int。(注意:Golang把变量类型放在变量名的后面) var ip *int:声明一个指针变量,类型为*int(为什么不把*放在右边?也许是怕把乘号和指针混淆)。指针变量存储的是内存地址(相当于字节数组的索引),内存地址上对应内容为int类型。 var array [3]int:数组变量array的声明,类型为[3]int(数组的长度为3,数组的元素为int类型)。 var arrayp [3]*int:指针数组变量arrayp的声明,类型为[3]*int(数组的长度为3,数组的元素为*int类型)...阅读全文

博文 2017-02-18 09:00:44 十一11

关于go语言的虚拟地址空间

经常在书上看到C程序的虚拟空间,如下面链接中的图片所示 想知道,这个模型是否是语言无关的? go语言是否也是使用这样的方式组织虚拟地址空间的? https://upload.wikimedia.org/wikipedia/commons/thumb/3/32/Virtual_address_space_and_physical_address_space_relationship.svg/773px-Virtual_address_space_and_physical_address_space_relationship.svg.pn...阅读全文

open-falcon初探(一)---安装部署

简介 官网:http://book.open-falcon.org/zh_0_2/ 小米运维团队出品开源监控软件,截止目前在github上已经有了4000余个星。 go语言写的后端,python+flask语言写的前端。 本人应用zabbix多年,借此机会记录下学习的过程。 open-falcon安装: 使用编译好的二进制文件方式安装 centos 6.5 python 2.7.13 go1.11.5(https://golang.org/doc/install) #环境准备 yum install -y redis yum install -y mysql-server cd /tmp/ && git clone https://github.com/open-falcon/falcon-...阅读全文

博文 2019-02-25 23:34:42 左舷的风

Go+GraphQL+React+Typescript搭建简书项目(五)——注册与登录

项目地址:github 前端的路由 在React中,路由的使用主要由react-router-dom提供。使用yarn安装react-router-dom。 $ yarn add react-router-dom 我们删除脚手架提供的示例代码,只保留index和App。我们这里将路由内容写在App.tsx文件中。 import React from "react"; import {BrowserRouter, Route, Switch} from "react-router-dom" export default function App() { return (