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

Golang中make与new有何区别?

Golang中make与new有何区别? 一、前言 本文主要给大家介绍了Go语言中函数new与make的使用和区别,关于Go语言中new和make是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量的时候,可能会觉得有点迷惑,其实他们的规则很简单,下面我们就通过一些示例说明他们的区别和使用。 二、变量的声明 var i int var s string ​ 变量的声明我们可以通过var关键字,然后就可以在程序中使用。当我们不指定变量的默认值时,这些变量的默认值是他们的零值,比如int类型的零值是0,string类型的零值是"",引用类型的零值是nil。 对于例子中的两种类型的声明,我们可以直接使用,对其进行赋值输出。但是如果我们换成指针类型呢? test1.go package m...阅读全文

博文 2020-03-09 12:32:42 aceld

如何通过MD5反查身份证号?

题目:设计一个身份证查询系统,将身份证号md5 之后存储,输入md5值查询对应的身份证号。 要求:成本低,查询速度快 设计思路: 将所有可能的身份证号做一个简单的统计计算数据量 根据数据量选择存储方式 查询 身份证生成规则: 身份号码是特征组合码,由前十七位数字本体码和最后一位数字校验码组成。排列顺序从左至右依次为六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。 地址码: 表示编码对象常住户口所在县(市、旗、区)的行政区划代码。对于新生儿,该地址码为户口登记地行政区划代码。需要没说明的是,随着行政区划的调整,同一个地方进行户口登记的可能存在地址码不一致的情况。行政区划代码按GB/T2260的规定执行。 出生日期码:表示编码对象出生的年、月、日,年、月、日代码之间不用分隔符...阅读全文

web的工作方式

### 输入网址后按下回车键,浏览网页背后的流程 对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立TCP连接,等浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包,服务器调用自身服务,返回HTTP Response(响应)包;客户端收到来自服务器的响应后开始渲染这个Response包里的主体(body),等收到全部的内容随后断开与该服务器之间的TCP连接。 ### web服务器基本原理 一个Web服务器也被称为HTTP服务器,它通过HTTP协议与客户端(浏览器)通信。 当服务器发送了应答后就与客户机断开...阅读全文

博文 2019-12-31 18:15:32 bytemode

Go 中没有引用传递

先说清楚,在 go 中没有引用变量,所以更不存在什么引用传值了。 ## 什么是引用变量 在类 C++ 语言中,你可以声明一个别名,给一个变量安上一个其他名字,我们把这称为引用变量。 ```c #include int main() { int a = 10; int &b = a; int &c = b; printf("%p %p %p\n", &a, &b, &c); // 0x7ffe114f0b14 0x7ffe114f0b14 0x7ffe114f0b14 return 0; } ``` 你可以看到 `a`,`b`,`c` 都指向同一块内存地址,三者的值相同,当你要在不同范围内声明引用变量(即函数调用)时,此功能很有用。 ## Go 中不存在引用变量 与 C++...阅读全文

博文 2020-05-31 12:42:06 Jun10ng

golang_go-micro整合各种mq

NATS 介绍 NATS是一个开源、轻量级、高性能的分布式消息中间件,实现了高可伸缩性和优雅的Publish/Subscribe模型,使用Golang语言开发。NATS的开发哲学认为高质量的QoS应该在客户端构建,故只建立了Request-Reply,不提供 1.持久化 2.事务处理 3.增强的交付模式 4.企业级队列。 NATS消息传递模型 NATS支持各种消息传递模型,包括: 发布订阅(Publish Subscribe) 请求回复(Request Reply) 队列订阅(Queue Subscribers ) 提供的功能: 纯粹的发布订阅模型(Pure pub-sub) 服务器集群(Cluster mode server) 自动精简订阅者(Auto-pruning of subscri...阅读全文

博文 2019-09-03 10:32:51 yylany

云解析DNS使用教程

课程介绍 云解析(Domain Name System,简称DNS)是一种高可用性、高可扩展的权威DNS服务和DNS管理服务。它的目的是为企业和开发者提供稳定、安全、智能的把网站域名或应用资源转换为计算机用于互连的数字 IP地址,从而将最终用户的访问路由到相应的网站或应用资源上同时提供DNS的管理服务。 产品详情:https://wanwang.aliyun.com/domain/dns/ 课时列表 • 课时1:购买与绑定 • 课时2:解析设置 • 课时3:智能解析 • 课时4:网站监控 • 课时5:全球负载均衡 开始学习:http://click.aliyun.com/m/27873/ ...阅读全文

go数组、切片

数组 package main import "fmt" func main() { /*数组的声明 * 1、var ab [2]int 2、var bc 3、cd := [2]int{} [3]int{1, 2} [5]int{4: 1} [...]int{4: 1} [...]int{4, 1, 3} [...]int{0: 4, 1: 1, 2: 3} */ var a [2]string fmt.Println(a) var ab [2]int = [2]int{} fmt.Println(ab) var bc = [2]int{1, 2} fmt.Println(bc) c := [3]int{} fmt.Println(c) b := [3]int{1, 2} fmt.Print...阅读全文

博文 2016-11-09 11:00:03 u013210620

体验升级,阿里云过保迁移不变公网IP

最近收到阿里云这样一封邮件: 阿里云又要迁移服务器了?好吧,进控制台预约迁移,突然看到了这样一句话: 迁移后公网IP将保持不变! 迁移后公网IP将保持不变! 没看错,是公网IP不变。还记得之前迁移服务器要变更公网IP的事情在网上闹的沸沸扬扬的。我的情况比较好,维护的两个站点,更新下域名解析就行了。网上也有人提到一些第三方服务商依赖IP,第三方如果效率不高有可能造成好几天的业务中断。也有人反馈提工单可以不变IP,不过迁移时间得看阿里云安排。服务中断时间短则1个小时,长的话4~5个小时。 这次允许自己预约重启时间并且还能保证公网IP不变,看来阿里云做了技术升级。不能赞的更多! 预约方式跟之前一样,根据邮件指引,进入...阅读全文

golang实现抓取IP地址的蜘蛛程序

背景 要做IP地址归属地查询,量比较大,所以想先从网上找到大部分的分配数据,写个蜘蛛程序来抓取入库,以后在程序的运行中不断进行维护、更新、完善。 一些关键点 goroutine的使用,让程序并行运行。 正则表达式分组信息提取的使用,正确的提取我们关注的信息。 数据库批量插入操作。 数据库批量更新操作。 代码解析 按功能模块对核心代码进行说明 ip.go 主进程,实现goroutine的调用。 func main() { //利用go基本库封装的网页抓取函数,后面有说明 ctx := common.HttpGet("http://ips.chacuo.net/") //正则表达式,有两个分组(两组小括号),分别取城市信息与url,具体分析代码后面有说明 reg := regexp.MustCo...阅读全文

博文 2018-06-28 18:34:40 zhoutk

10Go语言——slice

Go语言——slice [TOC] 一、切片介绍 切片是一种数据结构,这种数据结构便于使用和管理数据集合。切片是围绕动态数组的概念构建的,可以按需自动增长和缩小。切片的动态增长是通过内置函数 append 来实现的。这个函数可以快速且高效地增长切片。还可以通过对切片再次切片来缩小一个切片的大小。因为切片的底层内存也是在连续块中分配的,所以切片还能获得索引、迭代以及为垃圾回收优化的好处。 切片是引用类型,指向底层数组,切片语法和数组很像,只是没有长度而已。slice底层是连续内存,动态增加长度其实如果超过底层数组容量,也会重新分配内存。 指向底层的数组,作为变长数组的替代方案,可以关联底层数组的局部或全部 slice 为引用类型,但自身是结构体,值拷贝传递。 如果多个slice指向相同底层数组...阅读全文

博文 2019-03-01 18:34:41 杨旭

kubernetes 1.18离线安装 一键安装

kuberentes 离线丝滑安装 为了让kubernetes安装与集群节点管理更丝滑,这次我们是花了大功夫。这次做了很多非常大的更新,并经过充分测试与bug修复让其稳定。 力争把这个简单的事做到极致。 剥离定制kubeam功能到sealos中 之前定制kubeadm代码实现的100年证书功能和localLB,已经全部剥离到sealos中,现在已经是完完全全原生的kubernetes了。 为了减少对第三方命令行工具的依赖,sealos证书完全是通过调用golang的库生成,生成逻辑与kubeadm保持一致,不过把client-go中写死一年的证书时间变成了一个参数。 ipvs的localLB断然也不屑于去调用类似ipvsadm的工具,也是走系统调用完成,还顺便修复了netlink和内核版本不...阅读全文

博文 2020-04-23 10:32:56 sealyun

Go编程基础-项目与坑

项目与坑 slice容量问题 初始容量被超过了,它会新建一个slice,然后把旧的内容拷贝过去,然后append数据,这就会导致底层数组改变了,期望的结果可能就不是预期的了 package main import("fmt") func Pingpong(s []int) { s = append(s,3)//原来的容量为0,append之后,重新分配了内存地址,s跟原来的slice s已经不是同一个了 } func main(){ s := make([]int,0) //初始化slice s,初始容量为0,长度为0 fmt.Println(s) Pingpong(s) fmt.Println(s) } 两次打印的slice结果都是空 [] [] 怎么解决这个问题,真的修改修改slice?...阅读全文

博文 2018-07-09 12:35:12 1350368559

Go语言指针

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。 接下来让我们来一步步学习 Go 语言指针。 我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地址。 Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。 以下实例演示了变量在内存中地址: package mainimport "fmt"func main() { var a int = 10 fmt.Printf("变量的地址: %xn", &a )}执行以上代码输出结果为: 变量的地址: 20818a220现在我们已经了解了什么是内存地址和如何去访问它。接下来我们将具体介绍指针。 什么是指针一个指针变...阅读全文

博文 2019-09-23 16:32:50 链客

ipset

IPSET 本项目提供与Linux IPSET技术兼容的服务器隔离策略自动部署和更新方案 快速开始 本项目为Golang开发的插件 原理   IPTables是Linux服务器上进行网络隔离的核心技术,内核在处理网络请求时会对IPTables中的策略进行逐条解析,因此当策略较多时效率较低;而是用IPSet技术可以将策略中的五元组(协议,源地址,源端口,目的地址,目的端口)合并到有限的集合中,可以大大减少IPTables策略条目从而提高效率。测试结果显示IPSet方式效率将比IPTables提高100倍。   使用到的IPTables参数如下: -A INPUT|OUTPUT 指定IPTables链,对应网络数据流相对于当前网卡的方向是流入或流出 -p tcp|udp|icmp 指定网络数据流...阅读全文

博文 2018-11-13 16:34:45 超哥__

深入理解 Go Slice

深入理解 Go Slice 是什么 在 Go 中,Slice(切片)是抽象在 Array(数组)之上的特殊类型。为了更好地了解 Slice,第一步需要先对 Array 进行理解。深刻了解 Slice 与 Array 之间的区别后,就能更好的对其底层一番摸索 ???? 用法 Array func main() { nums := [3]int{} nums[0] = 1 n := nums[0] n = 2 fmt.Printf("nums: %v\n", nums) fmt.Printf("n: %d\n", n) } 我们可得知在 Go 中,数组类型需要指定长度和元素类型。在上述代码中,可得知 [3]int{} 表示 3 个整数的数组,并进行了初始化。底层数据存储为一段连续的内存空间,通过...阅读全文

springboot免费的IP定位服务

简介 ip2region 是准确率99.9%的ip地址定位库,0.0x毫秒级查询,数据库文件大小只有1.5M,提供了java,php,c,python,nodejs,golang,c#查询绑定和Binary,B树,内存三种查询算法! maven依赖 org.lionsoul ip2region 1.7.2 DB文件下载地址: https://github.com/lionsoul2014/ip2region/archive/v1.9.0-release.tar.gz 下载这个项目之后到data/文件夹下面找到ip2...阅读全文

博文 2020-01-17 01:32:40 0慕念0

深度解密HTTP通信细节

目录 HTTP报文截获 背景介绍 抓包 mac本地 远程docker 请求 && 分析 关闭服务进程 关闭docker 重启docker 正常请求 HTTP协议分析 整体介绍 编码 MIME类型 URI/URL/URN HTTP方法 状态码 报文格式 HTTP协议进阶 代理 缓存 cookie 实体和编码 国际化支持 重定向与负载均衡 HTTP重定向 DNS重定向 HTTP连接 并行连接 持久连接 管道化连接 小结 参考资料 上一篇文章中,我们学会了用wireshark和tcpdump来分析TCP的“三次握手,四次挥手”,非常好用。这哥俩就是传说中的锤子,拿着锤子,看什么都像钉子!在这篇文章中,我对准了HTTP这颗钉子砸下去,咳咳。 为了对网络数据包的“流转”有更加深刻的理解,我在docke...阅读全文

博文 2019-07-22 22:18:33 qcrao-2018

goreplay-使用真实流量测试你的应用

场景:最近项目准备升级,其中一个步骤就是需要删除一些不再维护的gem,这样就会涉及大量代码的修改,除了增加测试覆盖率以外,最好能使用线上真实的流量来访问测试环境,然后通过newrelic更加详尽的捕捉潜在的错误。 那这里就涉及到流量分流或者流量复制的问题,而goreplay便是解决该问题的一个优秀的工具。 顾名思义,goreplay是基于go语言实现的,要在生产服务器上安装go环境。安装参考:https://golang.org/doc/install, 准备好go语言环境后,goreplay直接提供了编译好的版本,十分方便,直接解压即可,可参考以下步骤: wget https://github.com/buger/goreplay/releases/download/v0.16.1/gor...阅读全文

云解析DNS使用教程

课程介绍 云解析(Domain Name System,简称DNS)是一种高可用性、高可扩展的权威DNS服务和DNS管理服务。它的目的是为企业和开发者提供稳定、安全、智能的把网站域名或应用资源转换为计算机用于互连的数字 IP地址,从而将最终用户的访问路由到相应的网站或应用资源上同时提供DNS的管理服务。 产品详情:https://wanwang.aliyun.com/domain/dns/ 课时列表 • 课时1:购买与绑定 • 课时2:解析设置 • 课时3:智能解析 • 课时4:网站监控 • 课时5:全球负载均衡 开始学习http://click.aliyun.com/m/27873...阅读全文

golang实现qq聊天之客户端与服务器

一、用到的net方法 1 、客户端: var buf [512]byte tcpAddr, _ := net.ResolveTCPAddr("tcp", "127.0.0.1:9090") //向服务器拨号 conn, _ := net.DialTCP("tcp", nil, tcpAddr) //获取远程服务器地址 rAddr := conn.RemoteAddr() //发送数据 n, _ := conn.Write([]byte("")) //接收数据 n, _ = conn.Read(buf[0:]) 2、服务器 func ResolveTCPAddr(network, address string) (*TCPAddr, error) ResolveTCPAddr返回TCP端点的地...阅读全文

博文 2018-12-14 19:34:46 Mr丶易客

golang快速入门[5.2]-go语言是如何运行的-内存概述

前文golang快速入门[2.1]-go语言开发环境配置-windowsgolang快速入门[2.2]-go语言开发环境配置-macOSgolang快速入门[2.3]-go语言开发环境配置-linuxgolang快速入门[3]-go语言helloworldgolang快速入门[4]-go语言如何编译为机器码golang快速入门[5.1]-go语言是如何运行的-链接器前言总的来说一个程序的生命周期可以概括为: 编写代码 => 编译 => 链接 => 加载到内存 => 执行在上一篇文章中,我们详细介绍了go语言编译链接的过程在本文中,我们将对内存进行简单介绍在下文中,我们将介绍内存分配以及go语言中的内存分配内存在计算机中,术语"内存"又叫做主存,通常指的是可寻址的半导体存储器(硅基MOS晶体管...阅读全文

博文 2020-02-19 17:33:23 jonson_jackson

golang利用reflect包实现struct与params自动绑定

前言 因为 golang 静态强类型语言特性以及没有很好的泛型支持导致在用 go 写 web 服务的时候,总会因为要对 http params 的解析和类型转换上要花很多时间,并且这会让代码显得很冗余,那有什么办法可以解决这一苦痛呢?答案当然是有的,这里我讲会到如何用 reflect 包写一个工具类实现 model 层 struct 与 http params 的自动映射绑定。 具体实现其实很简单,主要用到的就是通过 reflect.TypeOf() 获取字段的类型(包括字段名,类型,Tag描述等相关信息),以及 reflect.ValueOf() 来获取字段的值类型用于复写从params获取到的数据, 同时还要注意不同类型数值在 Set 时的差别。 用料 首先我们设计一个struct来储存...阅读全文

博文 2018-05-21 00:33:05 大糊涂

Go 指针和内存分配详解

9.3 指针和内存分配详解 定义 了解指针之前,先讲一下什么是变量。 每当我们编写任何程序时,我们都需要在内存中存储一些数据/信息。数据存储在特定地址的存储器中。内存地址看起来像0xAFFFF(这是内存地址的十六进制表示)。 现在,要访问数据,我们需要知道存储它的地址。我们可以跟踪存储与程序相关的数据的所有内存地址。但想象一下,记住所有内存地址并使用它们访问数据会有非常困难。这就是为什么引入变量。 变量是一种占位符,用于引用计算机的内存地址,可理解为内存地址的标签。 什么是指针 指针是存储另一个变量的内存地址的变量。所以指针也是一种变量,只不过它是一种特殊变量,它的值存放的是另一个变量的内存地址。 在上面的例子中,指针p包含值0x0001,该值是变量的地址a。 Go类型占用内存情况 unsa...阅读全文

博文 2019-02-17 17:48:46 guyan0319

DockOne微信分享( 九十四):唯品会基于Kubernetes的网络方案演进

【编者的话】本文主要介绍唯品会云平台PaaS在持续集成和持续部署方面,基于Docker和Kubernetes,对网络方案的选型及应用,以及随着业务需求的增加而经历的网络方案变更,包括: Kubernetes + Flannel;基于Docker libnetwork的网络定制;Kubernetes + Contiv + kube-haproxy;基于Kubernetes的应用容器IP固定方案。 背景简介PaaS平台持续部署以镜像方式部署,公司业务域对应平台内的应用。平台应用管理包括应用配置管理以及应用的运行态管理。一个应用的运行态对应kubernetes的一个Replication Controller(后面使用RC简称)和一个Service,应用实例对应kubernetes中的Pod, 我...阅读全文

博文 2017-06-25 16:25:23 wangchang517

G3.1 Go语言正则表达式应用实例

实际应用中,通过灵活组合正则表达式的各种用法,可以实现非常复杂和实用的功能,本节将简单介绍一些常见或典型的应用实例* 注:注意先要导入包github.com/topxeq/goexamples/tools(方法是执行命令go get -v github.com/topxeq/goexamples/tools),如果不用该包,文中代码内的 t.Printfln相当于fmt.Printf加上一个“\n”。-> 匹配中文正则表达式中匹配中文可以根据中文字符的Unicode范围来进行匹配,中文在Unicode编码中的范围是十六进制的4E00至9FA5,在正则表达式中可以用“[\u4E00-\u9FA5]”的范围表达形式来表示。需要特别注意的是,当使用类似“\u4E00”这种表达形式时,不可以用反引号...阅读全文

博文 2020-02-17 20:32:49 陆满庭

【这是一道送命题】使用字符串传值居然也不会释放原始字符串的内存地址!!!

> 这个问题陆陆续续查了一周才实锤到内存泄露的点 问题的开端是这样的,以前大哥走了,我接了这个项目发现居然在内存泄露,每天要重启好几次,决定解决一下,没想到解决了一周。 项目使用了一个包叫 [gjson](https://github.com/tidwall/gjson) (链接),我们有两个缓存一个叫cache1 `gjson.Result{}`,一个叫 cache2 `map[string]string` 。cache2 的数据来源是一个 URL 每分钟更新一次使用 gjson 解析 接口返回的 json 数据,cache1 的数据来源是从 cache2 可以匹配上的数据通过 gjson 获取的字符串就放到 cache 1 map 中(当 cache1 把 cache2 键全匹配完了以后...阅读全文

博文 2018-12-13 15:31:50 DukeAnn

从Golang Slice的内存泄漏来理解Slice的使用逻辑

Golang虽然是自带GC的语言,仍然存在内存泄漏的情况,这片文章总结了Golang中内存泄漏的情况。 其中Slice的内存泄漏是最容易中招的,看看这个PR: writev 的 leak,Golang官方都踩了坑。 本文将就其中的Slice内存泄漏的情况做分析,并介绍Slice实现和使用的一些关键逻辑。 Slice如何内存泄漏 Golang是自带GC的,如果资源一直被占用,是不会被自动释放的,比如下面的代码,如果传入的slice b是很大的,然后引用很小部分给全局量a,那么b未被引用的部分就不会被释放,造成了所谓的内存泄漏。 var a []int func test(b []int) { a = b[:1] return } 复制代码想要理解这个内存泄漏,主要就是理解上面的a = b[:1...阅读全文

博文 2020-03-18 10:34:30 排骨JZh

Kubernetes笔记(7)—— 搭建”k8s on Mesos”注意事项

在本地搭建k8s on Mesos项目时,Mesos client脚本要以root身份运行。另外如果本地环境用到了proxy,一定要注意可能(不确定是否有例外,比如也许取决于你所使用的proxy或操作系统)需要把k8s或者Mesos的IP地址加入到no-proxy/NO_PROXY环境变量中。具体可参见下列issues: The kubernetes on Mesos can’t run successfully on the same machine; Why does “km controller-manager” think it is an invalid event?; The “km controller-manager” command doesn’t work success...阅读全文

博文 2017-06-24 19:21:36 肖楠

nginx请求连接限制笔记

之前也有写过有关于爬虫的实战练习:go语言爬取珍爱网 当时爬取时当并发过大的时候,请求就会出现卡死的情况。其实这可能就是珍爱网对请求和连接进行了限制。 爬虫和反爬是个“一边攻,一边守”的技术,但我们亲爱的爬虫工程师们也一直遵守着“只攻不破”的原则。网站服务器对爬虫一直在做限制,避免服务器流量异常,负载过大,防止恶意的攻击带来带宽和资源的浪费,甚至影响业务正常运行。往往办法是限制对同一个IP的连接数和并发数进行限制。今天我们就来看看nginx的连接频率limit_conn_module和请求频率limit_req_module 限制模块。 HTTP请求建立在一次TCP连接基础上,一次TCP请求至少产生一次HTTP请求。 连接限制: 语法如下: Syntax:limit_conn_zone ke...阅读全文

博文 2019-10-18 10:02:57 小碗汤

GO语言————4.9、指针

4.9 指针不像 Java 和 .NET,Go 语言为程序员提供了控制数据结构的指针的能力;但是,你不能进行指针运算。通过给予程序员基本内存布局,Go 语言允许你控制特定集合的数据结构、分配的数量以及内存访问模式,这些对构建运行良好的系统是非常重要的:指针对于性能的影响是不言而喻的,而如果你想要做的是系统编程、操作系统或者网络应用,指针更是不可或缺的一部分。由于各种原因,指针对于使用面向对象编程的现代程序员来说可能显得有些陌生,不过我们将会在这一小节对此进行解释,并在未来的章节中展开深入讨论。程序在内存中存储它的值,每个内存块(或字)有一个地址,通常用十六进制数表示,如:0x6b0820 或 0xf84001d7f0。Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。...阅读全文

博文 2019-04-22 01:32:38 fly_hps

彬哥笔记 --17 Go语言 游戏服务器slice使用

大家好,我是彬哥,本节给大家讲下go语言服务器游戏slice处理相关,抛砖引玉了,主要是针对Go语言游戏服务器开发slice使用。 首先 先给大家看了小demo,LollipopGo框架版本v1.0.20190104 ,斗兽棋初始化棋盘demo代码如下: package main import ( "LollipopGo/LollipopGo/util" "Proto/Proto2" _ "binge/db" "fmt" ) var DSQ_qinei = []int{ // 1-8 A ;9-16 B ; 17 未翻牌; 18 已翻牌 Proto2.Elephant, Proto2.Lion, Proto2.Tiger, Proto2.Leopard, Proto2.Wolf, Proto...阅读全文

博文 2019-01-07 23:34:40 Golang语言社区

http 使用小结

做一个简单的通过http协议 server 和 client 交互样例。吧内帖子很多,但是没有一个完整的样例,在这里做一个摸索总结,希望对后来的学习go语言的小伙伴有帮助。 server端代码: package main import ( "fmt" "net/http" ) func main() { fmt.Println("server listening:") http.HandleFunc("/con",conncet) http.ListenAndServe(":8080",nil) } func conncet(w http.ResponseWriter, r *http.Request) { r.ParseForm() data := r.URL.Query() fmt.Pr...阅读全文

博文 2017-08-27 07:31:26 j00279583

golang第二天

测试代码 hello.go package main import "fmt" /** *该程序目的 * 学习go的复杂数据结构: 数组,指针,结构体,切片,集合 */ func main() { /** * 方式: var arrayName [len] type * 例: var nums [10] int * 声明一个数组和遍历它 */ var nums [10]int //声明一个数组 fmt.Println(len(nums)) fmt.Println(cap(nums)) for idx := 0; idx < len(nums); idx++ { fmt.Println(nums[idx]) } /** * 声明和初始化一起 */ var names = []string{"j...阅读全文

博文 2019-02-27 23:34:39 陌生人的头像

Go unsafe.Pointer uintptr原理和玩法

载自: 你不知道的Go unsafe.Pointer uintptr原理和玩法 unsafe.Pointer 这个类型比较重要,它是实现定位和读写的内存的基础,Go runtime大量使用它。官方文档对该类型有四个重要描述: (1)任何类型的指针都可以被转化为Pointer (2)Pointer可以被转化为任何类型的指针 (3)uintptr可以被转化为Pointer (4)Pointer可以被转化为uintptr 大多数指针类型会写成T,表示是“一个指向T类型变量的指针”。unsafe.Pointer是特别定义的一种指针类型(译注:类似C语言中的void类型的指针),它可以包含任意类型变量的地址。当然,我们不可以直接通过*p来获取unsafe.Pointer指针指向的真实变量的值,因为我们...阅读全文

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

很多人想要更换IP地址,其实IP地址分为192开头的内网地址,以及其他的公网地址。其实在ipv4下上网通过的是动态的ip地址的,这就是说无时无刻运营商帮助你自动更换了。那么对于不同的IP地址是如何进行更换的呢?点击start 菜单,在菜单选择右侧的运行,在运行打开输入cmd输入完毕后点击确定。接着在开始菜单进入控制面板,在控制面板点击右上角的类别选择小图标,在小图标里面选择网络和共享中心的图标。点击连接一旁的本地连接,在弹出的菜单选择属性,在属性里面找到协议版本4点击一下。选择使用“下面的IP地址”,然后根据上面的记录,输入自己想要的IP地址,例如上面的192点168点1点39,这里39可以修改为40 41 23等等,不能够修改成为1或者0,要跟这个39数字临近的。修好了点击确定...阅读全文

博文 2019-03-06 10:33:05 xiniuxiaoniu

为什么数组要从零开始?

如题,数组第一个元素为什么要从零开始,而不从一开始?感觉这很反人类呀,正常来讲,一个集合的开始,不应该从一吗? 对于这个问题,我觉得可以从以下两方面来考虑。 设计层面 我们先了解一下数组最基本的结构和寻址方式(即实现方式)。 现在市面上无论是C、Java、PHP,还是Go或者其他编程语言,他们数组的实现方式,应该都是一样的:一段连续的内存。 image 数组在分配内存的时候,我们会知道数组的开始地址(PS:在目前下标为零的情况下,也等同于数组的第一个元素的地址); image 因为数组中每个元素的类型都是相同的,所以每种类型所占的内存大小是固定的,因而导致数组中每个元素的所占的内存大小都是相同的 image 由此我们可以得出,数组中每个元素地址的计算公式: image // n为数组坐标,x...阅读全文

从go语言中找&和*区别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sybnfkn040601/article/details/54614798 *和&的区别 : & 是取地址符号 , 即取得某个变量的地址 , 如 ; &a *是指针运算符 , 可以表示一个变量是指针类型 , 也可以表示一个指针变量所指向的存储单元 , 也就是这个地址所存储的值 . 从代码中验证 : 先构建一个Rect类型 : 1. &是取地址符号, 取到Rect类型对象的地址 2. *可以表示一个变量是指针类型(r是一个指针变量): 3.*也可以表示指针类型变量所指向的存储单元 ,也就是这个地址所指向的值 4.查看这个指针变量的地址 , 基本数据类型直接打印地址 摘自其他博客 : 经常会见到:...阅读全文

博文 2018-12-06 19:31:02 sybnfkn040601

理解Kubernetes网络:services篇

在本系列的第一篇文章中,研究了kubernetes如何结合使用虚拟网络设备和路由规则,以允许在一个群集节点上运行的Pod与在另一个群集节点上运行的Pod通信,只要发送者知道接收者的Pod网络即可。 IP地址。如果您还不熟悉Pod的交流方式,那么在继续之前值得一读。集群中的Pod网络很简单,但仅凭其不足以创建持久性系统。那是因为kubernetes中的Pod是短暂的。您可以将Pod IP地址用作终结点,但不能保证该地址在下次重新创建Pod时不会更改,这可能由于多种原因而发生。 您可能已经意识到这是一个老问题,并且它有一个标准的解决方案:通过反向代理/负载均衡器运行流量。客户端连接到代理,代理负责维护将请求转发到的健康服务器列表。这对代理服务器提出了一些要求:代理服务器本身必须是耐用的并且能够抗...阅读全文

go 指针

指针 Go 拥有指针。指针保存了值的内存地址。 类型*T是指向T类型值的指针。其零值为nil。 var p *int &操作符会生成一个指向其操作数的指针。 i := 42p = &i *操作符表示指针指向的底层值。 fmt.Println(*p) // 通过指针 p 读取 i*p = 21 // 通过指针 p 设置 i 这也就是通常所说的“间接引用”或“重定向”。 与 C 不同,Go 没有指针运算 案例: package main import "fmt" func main() { i, j := 42, 2701 p := &i // 指向 i fmt.Println(*p) // 通过指针读取 i 的值 *p = 21 // 通过指针设置 i 的值 fmt.Println(i) //...阅读全文

DockOne技术分享(十):跨主机的 --link

【编者的话】 这次技术分享的内容是做到跨主机的容器定位通信,取代了--link无法跨主机和互通的障碍。 阅读本文之前,请先阅读我的上一篇文章,让容器跨主机互相访问,通过自制路由器广播路由条目互相学习。 来让一个LAN里的Docker主机全部知道对方网络的下一跳怎么走,但是解决了刚需之后,又一个很大的问题告诉我,Docker在重启容器或者服务之后会更改自己的IP地址。 就像配置思科路由器的 ip local pool (不是DHCP服务)不会释放地址池等等,所以在不能很轻易固定IP的情况下,我想到了域名解析。但怎么让DNS服务器去知道容器的IP和名字呢?我查阅了一些资料发现DDNS是很适合这个需求。但是DDNS 是配合DHCP的,docker0却不是,Docker容器不会从DHCP服务器请求地...阅读全文

博文 2017-06-25 15:01:03 Georce

网站邮箱email地址定向采集核心代码分享

邮箱采集demo:http://www.jsanai.com/emailco...原理: 1、根据要采集的url地址,获取页面html内容,然后采用正则匹配出页面的url列表、邮箱地址列表。 2、获取到url列表及邮箱后分两个异步线程: ①保存邮箱地址; ②分析采集子页面url的邮箱地址; 核心源码(golang): //采集网站地址入口方法 func CollectEmail(hosturl string) (EmailObj, []string, error) { emailObj := new(EmailObj) var inhost []string //获取主域名 uparse, err := url.Parse(hosturl) if err != nil { return *e...阅读全文

博文 2019-10-08 14:02:43 吉山数据

Linux服务器绑定了多个IP的时候如何获取主IP?

当Linux服务器绑定了多个IP地址的时候,在一些特殊应用场合,需要获取主IP,即向外访问的时候IP包上带的IP,一种方式是通过shell脚本获得,另一种方式是通过其它脚本获取,本程序通过golang程序实现了Linux服务器绑定多个IP地址的时候主IP的获取。1、程序源码如下: 2、执行方式如下:安装golang,yum install golang 或者 sudo apt-get install golang执行上面的golang程序,go run masterip.go,即可获取服务器的主IP地址————————————————版权声明:本文为QQ3315939349原创作品请勿转...阅读全文

博文 2020-05-04 13:32:41 服务器小羽3315939349

Go语言参数传递是传值还是传引用

本文为原创文章,转载注明出处,欢迎扫码关注公众号flysnow_org或者网站http://www.flysnow.org/,第一时间看后续精彩文章。觉得好的话,顺手分享到朋友圈吧,感谢支持。 对于了解一门语言来说,会关心我们在函数调用的时候,参数到底是传的值,还是引用? 其实对于传值和传引用,是一个比较古老的话题,做研发的都有这个概念,但是可能不是非常清楚。对于我们做Go语言开发的来说,也想知道到底是什么传递。 那么我们先来看看什么是值传递,什么是引用传递。 什么是传值(值传递) 传值的意思是:函数传递的总是原来这个东西的一个副本,一副拷贝。比如我们传递一个int类型的参数,传递的其实是这个参数的一个副本;传递一个指针类型的参数,其实传递的是这个该指针的一份拷贝,而不是这个指针指向的值。 ...阅读全文

博文 2018-10-17 19:40:37 飞雪无情

golang之slice剖析

一、概述 切片是 Go 中的一种基本的数据结构,使用这种结构可以用来管理数据集合。切片的设计想法是由动态数组概念而来,为了开发者可以更加方便的使一个数据结构可以自动增加和减少。但是切片本身并不是动态数据或者数组指针。切片常见的操作有 reslice、append、copy。与此同时,切片还具有可索引,可迭代的优秀特性。 1.切片和数组关于切片和数组怎么选择? 在 Go 中,Go 数组是值类型,赋值和函数传参操作都会复制整个数组数据。 1 func main() { 2 arrayA := [2]int{100, 200} // 定义数组并初始化内容 3 var arrayB [2]int // 定义一个数组 4 arrayB = arrayA 5 fmt.Printf("arrayA : %...阅读全文

博文 2019-03-11 22:34:39 神奇的考拉

Docker部署web遇到的问题总结

PART I 问题一 用docker部署一个golang 的http服务,内部监听的端口地址为: 127.0.0.1:9090, 写dockerfile的时候暴露端口 expose 9090,然后生成镜像,后面运行docker 镜像成功启动http服务,测试的时候 curl http:lcoalhost:9090/api/****,宿主机上报错 curl connection reset by peer 引起原因:因为服务器内部没有监听端口,而在docker run的时候却指定了该端口。根本引起的缘由是:你在本地指定了 host为localhost,只允许本机访问,这样最后导致docker 启动起来的时候 映射端口失败,导致出现connection reset by peer; 解决办法:将...阅读全文

博文 2019-10-30 16:32:55 aside section._1OhGeD

GoLand中的指针操作 * 和 &

&和*这可能是Go中最令人困惑的事情之一。基本上你需要了解3个案例: &操作符 当你想获得变量的内存地址时,应该把&放到变量前面 *操作符 进入一个包含内存地址的变量并解析它,需要放到变量前面(因此它与&运算符相对应)。*它会指向指针指向的东西,例如myString。 myString := "Hi" fmt.Println(*&myString) // prints "Hi" 或更有用的,像 myStructPointer = &myStruct // ... (*myStructPointer).someAttribute = "New Value" * 在一个类型前面 当*放在类型前面时,例如*string,它成为类型声明的一部分,因此您可以说“此变量包含指向字符串的指针”。 所以令人...阅读全文

博文 2019-02-25 15:34:44 杨周龙