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

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的博客

Golang的反射reflect深入理解和示例

[TOC] Golang的反射reflect深入理解和示例 【记录于2018年2月】 编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 每种语言的反射模型都不同,并且有些语言根本不支持反射。Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的,只要包含这个包就可以使用。 多插一句,Golang的gRPC也是通过反射实现的。 interface 和 反射 在讲反射之前,先来看看Golang关于类...阅读全文

博文 2018-10-19 18:34:42 吴德宝AllenWu

golang简单应用

学习的golang的练习,推荐学习golang。https://www.liwenzhou.com mian.go 文件 package main import ( "fmt" "os" ) func showAction() { fmt.Println("学生管理系统!") fmt.Println("1. 添加学生信息") fmt.Println("2. 编辑学生信息") fmt.Println("3. 显示学生信息") fmt.Println("4. 退出学生管理系统") } //getInput 获取输入信息 func getInput() *Student { var ( name string id int ages int ) fmt.Println("输入信息") fmt.Pr...阅读全文

剥开比原看代码15:比原是如何转帐的

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 在前面几篇中,我们做了足够了准备,现在终于可以试一试转帐功能了! 这里的转帐最好使用solonet,再按前一篇文章的办法修改代码后产生单机测试币,然后再试。在此之前,如果需要的话,请先备份好你之前的帐户,然后删除(或重命名)你的数据目录,再使用bytomd init --chain_id=solonet重新初始化。 下面是我通过dashboard进行的转帐操作,在操作之前,我先建立了两个帐户,然后把钱从一个帐户转到另一个帐户的地址中: 新建一个交易,填上把哪个帐户的哪种资产转到某个地址上。可以...阅读全文

博文 2018-07-23 16:34:48 比原链Bytom

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

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

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

09.手撕Go语言-包

包是函数和数据的集合,将有相关特性的函数和数据放在统一的文件/目录进行管理,每个包都可以作为独立的单元维护并提供给其他项目进行使用 声明 Go源文件都需要在开头使用package声明所在包,包名告知编译器哪些是包的源代码用于编译库文件,其次包名用于限制包内成员对外的可见性,最后包名用于在包外对公开成员的访问 包名使用简短的小写字母,常与所在目录名保持一致,一个包中可以由多个Go源文件,但必须使用相同包名 09.01.png 声明两个包,路径分别为gpkgname/pkg01和gpkgname/pkg02 导入&调用 在使用包时需要使用import将包按路径名导入,再通过包名调用成员 可通过import每行导入一个包,也可使用括号包含所有包并使用一个import导入 09.02.png 工作目...阅读全文

博文 2019-06-27 00:32:52 imsilence

RSCHA认证第五讲管理本地LINUX用户和组

关于作者,目前在拉勾网任职运维开发部的负责人,长期从事运维开发工作,有多年的运维技能培训能力,培训了多批运维同学,至今大致有300人左右; 发现一问题,好多内容好多年都在重复得讲,没有一个产物直接输出给大家。计划利用空闲时间将多年的知识(分享的内容,包括技能,心得,管理和爱好)沉淀到我的公众号: 北漂悟道之路 qrcode_for_gh_df893b8ca13b_344.jpg 感兴趣的同学可以关注一下我的公众号。 技能:擅长python开发,django框架开发,Kubernetes架构、运维开发架构,Linux运维,Hadoop运维和流行监控;了解golang开发和C++开发。 爱好:美食,自驾和旅游 希望了解作者的同学可以加我微信号:XiaoJiaQingShi RH124系列课程的目...阅读全文

博文 2019-08-09 07:32:45 多多北漂悟道之路

golang自定义一个简洁而强大的错误追踪包

## 一. 前言 ### 1.1 错误追踪需要了解的信息 - 错误提示语 - 错误的位置, 如:具体的文件名,错误行号和错误方法等. ### 1.2 实际情况 - golang自带了错误信息包`error` 只提供了简单的用法, 如`errors.New()`,和`errors.Error()`用来传递和获取错误信息. - 明显官方的包已经不能满足了, 只能采取其他方法补救, 如: - 扩充官方包 - 自定义错误包 - 目前已经有很多人造了这个轮子, 同时也各有特色, 有简单的, 也有复杂的. - 这里为了简单使用, 我便选择了扩充官方包, 做一个简单优雅的错误处理包. ## 1.3 实现目标 通过简单调用, 即可以查看我们需要的信息, 最好是一键调用搞定. 为了照顾使用习惯, 我们就采用跟...阅读全文

Golang学习 - regexp 包

// 函数 // 判断在 b(s、r)中能否找到 pattern 所匹配的字符串 func Match(pattern string, b []byte) (matched bool, err error) func MatchString(pattern string, s string) (matched bool, err error) func MatchReader(pattern string, r io.RuneReader) (matched bool, err error) // 将 s 中的正则表达式元字符转义成普通字符。 func QuoteMeta(s string) string // 示例:MatchString、QuoteMeta func main() { p...阅读全文

博文 2019-04-19 18:34:40 佛心看世界

浅谈json web token及应用

Json Web Token (JWT),是一个非常轻巧的规范,这个规范允许在网络应用环境间客户端和服务器间较安全的传递信息。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。 在web应用中,我们提供的API接口,通过GET或者POST方式调用,在调用过程中,就存在着接口认证及数据的安全性问题。例如如下问题: 1、请求来自哪里,身份是否合法? 2、请求参数是否被篡改? 3、客户端请求的唯一性,是否为重复请求攻击(RepeatAttack)? 传统的Session认证方式 在传统的web应用中,服务端成功相应请求者,返回正常的response依赖于服务端通过一种存储机...阅读全文

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

与BSN的链码进行通信互动

在上一节完成链码部署后,就可以与链码进行通信互动了。互动有多种方式,如通过SDK编程,也可以使用peer节点使用命令行操作完成。本节先使用后者实现预置链码包介绍通过区块链服务网络开发者手册可知,BSN提供的预置链码包提供了五个方法,我们逐一来操作处理1、增加数据(set)输入参数说明baseKey:需要保存的唯一的主键标识baseValue:保存的数据信息` 例:{"baseKey":"str","baseValue":"this is string"}` 其中 baseKey 是不能为空的字符串,baseValue 可以是任意类型的数据。如果 baseKey 已经存在,则直接返回已经存在,不能添加;如果不存在,则添加数据。2、获取数据(get)输入参数说明baseKey:需要获取的唯一的主...阅读全文

博文 2020-05-27 19:32:45 凡星_

Golang笔记—反射

反射(Reflection) 为什么需要反射 有时候需要知道未知类型的类型表达方式, 有时候需要获取类型信息, 进行判断进行不同的处理 reflect.Type 和 reflect.Value reflect包中两个重要的类型. reflect.Type是一个接口, 表示一个Go类型 可由reflect.TypeOf()以reflect.Type的类型返回某个interface{}的动态类型信息 t := reflect.TypeOf(3) // t: a reflect.Type fmt.Println(t.String()) // "int" // reflect.Type满足fmt.Stringer接口 fmt.Println(t) // "int" var w io.Writer =...阅读全文

博文 2019-08-25 23:32:53 猎奇师

《Go语言程序设计》读书笔记(二)函数

《Go 语言程序设计》在线阅读地址:https://yar999.gitbooks.io/go... 函数 函数声明 函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。 func name(parameter-list) (result-list) { body } 形式参数列表描述了函数的参数名以及参数类型。这些参数作为局部变量,其值由参数调用者提供。返回值也可以像形式参数一样被命名,在这种情况下,每个返回值被声明成一个局部变量,并初始化为其类型的零值。 用 _ 符号作为形参名可以强调某个参数未被使用。 func first(x int, _ int) int { return x } 函数的类型被称为函数的标识符。如果两个函数形式参数列表和返回值列表中的变量类型一一对应,...阅读全文

博文 2019-12-20 13:32:40 KevinYan

golang 标准命令行解析库 flag

flag 库实现了对命令行参数的解析 基本用法 package main import ( "fmt" "flag" ) func main() { b := flag.Bool("b", false, "bool flag") s := flag.String("s", "hello golang", "string flag") flag.Parse() fmt.Println("b is", *b) fmt.Println("s is", *s) } 上面代码指定了两个选项: bool 类型的 b 选项,默认值为 false,帮助信息 bool flag string 类型的 s 选项,默认值为 hello golang,帮助信息 string flag 执行 go run main....阅读全文

Go Web 编程之 请求

概述 前面我们学习了处理器和处理器函数,如何编写和注册处理器。本文我们将学习如何从请求中获取信息。 请求的结构 通过前面的学习,我们知道处理器函数需要符合下面的签名: func (w http.ResponseWriter, r *http.Request) 其中,http.Request就是请求的类型。客户端传递的数据都可以通过这个结构来获取。结构Request定义在包 net/http 中: // src/net/http/request.go type Request struct { Method string URL *url.URL Proto string ProtoMajor int ProtoMinor int Header Header Body io.ReadClose...阅读全文

博文 2020-01-12 23:32:45 darjun

【转】Teleport 2.0 一个 Golang TCP Socket 的全新框架

文地址Teleport2.0 实现了一个全新的Golang TCP Socket框架,它通用、高效、灵活!可被用于Peer-Peer对等通信、RPC、长连接网关、微服务、推送服务,游戏服务等领域。1. 特性服务器和客户端之间对等通信,两者API方法基本一致底层通信数据包包含Header和Body两部分支持单独定制Header和Body编码类型,例如JSON ProtobufBody支持gzip压缩Header包含状态码及其描述文本支持推,拉,回复等通信方式支持插件机制,可以自定义认证、心跳、微服务注册中心、统计信息插件等无论服务器或客户端,均支持都优雅重启、优雅关闭支持实现反向代理功能日志信息详尽,支持打印输入、输出消息的详细信息(状态码、消息头、消息体)支持设置慢操作报警阈值底层连接使用I...阅读全文

博文 2019-03-14 03:34:40 雨笋情缘

Blog.4 故障排查

测试提Bug的基本要素,主要包括: 期望得到的结果 实际得到的结果 如何重现问题 生产环境出了故障,当然也脱离不开这3个要点。只不过相对重现问题会略微复杂。毕竟,故障总是我们意外之外的情况。 根据Bug发生的现象,我们会提出很多假设,然后进行逐步排除。 当问题发生时,最应想到的是:系统最近是否有过改动。很大概率上,一个正常工作的服务会一直维持工作,直到某种外力出现。如果确实是新功能上线导致的,可以结合具体情况,考虑是否回滚到老版本。但有些时候,回滚可能还会引发二次问题,需要特别注意。 接下来: 继续保存冷静,简要评估问题的严重程度,及时给外部作出反馈。这里的反馈特别重要,不仅可以让大家了解故障的进展情况,而且,大家还可能提供非常有价值的建议。 接下来: 仔细分析故障发生的现象,不要忽略错误日...阅读全文

博文 2019-07-28 22:32:39 渐行渐远

浅谈json web token及应用

Json Web Token (JWT),是一个非常轻巧的规范,这个规范允许在网络应用环境间客户端和服务器间较安全的传递信息。该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。 在web应用中,我们提供的API接口,通过GET或者POST方式调用,在调用过程中,就存在着接口认证及数据的安全性问题。例如如下问题: 1、请求来自哪里,身份是否合法? 2、请求参数是否被篡改? 3、客户端请求的唯一性,是否为重复请求攻击(RepeatAttack)? 传统的Session认证方式 在传统的web应用中,服务端成功相应请求者,返回正常的response依赖于服务端通过一种存储机...阅读全文

博文 2019-10-20 15:34:30 Liabio

你应该知道的HTTP基础知识

姓名:宫松涛学号:19021210927嵌牛导读:为大家详细讲解HTTP基础知识,让大家快速掌握。嵌牛鼻子:HTTP基础知识嵌牛提问:有哪些HTTP基础知识?转载源:你应该知道的HTTP基础知识嵌牛正文:本文主要内容:HTTP请求报文格式HTTP响应报文格式Header请求体的3种形式推荐调试工具HTTP的组成图示1. HTTP请求报文格式HTTP 的请求报文分为三个部分请求行、请求头和请求体,格式如图: HTTP请求报文格式注:部分文章也将HTTP请求报文分为两部分请求头和请求体,请求头的第一行为请求行。1.1 请求行请求行(Request Line)分为三个部分:请求方法、请求地址和协议及版本,以CRLF(\r\n)结束。HTTP/1.1 定义的请求方法有8种:GET、POST、PUT、...阅读全文

博文 2019-12-08 01:32:55 走不完的叉路口

MySQL数据库的常用操作

学习python少不了和数据库打交道,常见的数据库有:MySQL、SQLite、MongoDB、Redis等,这里主要介绍一下MySQL数据库的基本操作。 数据库听起来感觉好高大上,当你接触之后有种恍然大悟的感觉,不就是把我们的数据存到一个表格中吗。可以简单的这么理解,大家都知道表格都是由表名、表头、数据等几部分组成的,数据库跟这类似,只不过叫法不一样,这里叫数据库名、表名和字段。数据库就简单介绍这么多,说的不一定完全正确,下面就说一下怎么操作数据库。 一、MySQL字段类型 常用的有:数值(int, float)、字符串(varchar, text)、日期(date, datetime) 二、MySQL约束 主键:primary key 外键:foreign key 默认值:default...阅读全文

博文 2018-11-30 16:44:21 Javaspring12

新版本Golang的管理入门教程

Go1.11和1.12实现了对包管理的初步支持,Go的新依赖管理系统使依赖版本信息明确且易于管理。新的包管理模式有什么不同?作为Go语言的推广者,常常被问到各种关于Go语言的基础特性问题。其中,关于包管理方面的问题会让我非常尴尬,因为Go的包管理在1.11之前与Python、Node、Java比较起来真的只能算是“仅仅可用”而已。因为:在不使用额外的工具的情况下,Go的依赖包需要手工下载,第三方包没有版本的概念,如果第三方包的作者做了不兼容升级,会让开发者很难受协作开发时,需要统一各个开发成员本地$GOPATH/src下的依赖包引用的包引用了已经转移的包,而作者没改的话,需要自己修改引用。第三方包和自己的包的源码都在src下,很混乱。对于混合技术栈的项目来说,目录的存放会有一些问题更多go语...阅读全文

博文 2019-07-09 16:02:48 CC_ab48

Swarmkit笔记(4)——swarmd命令选项

Swarmd程序支持的命令选项: func init() { mainCmd.Flags().BoolP("version", "v", false, "Display the version and exit") mainCmd.Flags().StringP("log-level", "l", "info", "Log level (options \"debug\", \"info\", \"warn\", \"error\", \"fatal\", \"panic\")") mainCmd.Flags().StringP("state-dir", "d", "./swarmkitstate", "State directory") mainCmd.Flags().StringP("j...阅读全文

博文 2017-06-25 14:06:38 肖楠

Tags in Golang

type People struct { Name string `json:"name"` Age int8 `json:"age"` } 在学习过程中,看到类似上面的代码,一下子懵了个逼????。。。大概一查,这是 Golang 中的 Tags 语法,官方解释是这样的: A field declaration may be followed by an optional string literal tag, which becomes an attribute for all the fields in the corresponding field declaration. The tags are made visible through a reflection interfac...阅读全文

博文 2018-06-27 21:34:40 X1nFLY

cgo go无法访问c结果的长度为0的成员

``` typedef struct student { char name[32]; int age; int private_len; int private_data[0]; }student_t; ``` 由于项目需要存在可边长数据,结构体最后为长度为0的可变数据信息,这里简化定义 在go文件中定义student C.student_t,无法直接访问student.private_data信息,会报错 提示student.private_data未定义。请问如果能访问到该成员呢?谢谢 ...阅读全文

兄弟连区块链教程以太源码分析accounts账户管理分析

兄弟连区块链教程以太源码分析accounts账户管理分析。 数据结构分析 ETH的账户管理定义在accounts/manager.go中,其数据结构为: // Manager is an overarching account manager that can communicate with various// backends for signing transactions.type Manager struct {backends map[reflect.Type][]Backend // Index of backends currently registeredupdaters []event.Subscription // Wallet update subscriptions...阅读全文

博文 2018-10-17 15:34:40 兄弟连区块链培训

golang 标准库间依赖的可视化展示

简介 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内容,网上也要讨论,但是没有发现直接能拿过来用的.标准库之间,是必然存在依赖关系的,不同库被依赖的程度必然是不一样的.但究竟有多大差别呢? 以下内容,数据源自真实环境的 golang 1.9 版本的标准库.所以,本文不仅是一篇可视化相关的讨论文章,更是提供了一个可以直接探究 golang 标准库间依赖关系的快速梳理工具. 数据准备 标准库各个包之间的相互关系,可以直接通过命令获取,然后简单变换为一个标准的 JSON 对象: go list -json std 示例输出: { "Dir": "/usr/local/go/s...阅读全文

博文 2017-10-09 01:30:02 ios122

兄弟连区块链入门教程eth源码分析core-vm源码分析

兄弟连区块链入门教程eth源码分析core-vm源码分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。## contract.gocontract代表了eth state database里面的一个合约。包含了合约代码,调用参数。结构 // ContractRef is a reference to the contract's backing object type ContractRef interface { Address() common.Address } // AccountRef implements ContractRef. // // A...阅读全文

博文 2018-10-23 16:34:50 兄弟连区块链培训

译|Let’s talk about logging

来源:cyningsun.github.io/09-27-2019/… 本文受 Nate Finch started on the Go Forum 的一个话题启发。本文专注于 Go,但是如果你能看透,我认为这里提出的想法是广泛适用的。 Why no love ? Go 的 log package 没有日志级别,你必须自己手动添加 debug、info、warn 和 error 等前缀。另外,Go 的 日志类型无法以包为基础打开或者关闭这些不同级别。通过比较,让我们看一些第三方的替代品: Google 的 glog 提供以下级别: Info Warning Error Fatal (终止程序) 看看另外一个库, 我们为 Juju 开发的 loggo,提供以下级别: Trace Debug I...阅读全文

博文 2019-09-27 17:04:32 cyningsun

Golang 模块获取关键包modfetch源码研读

自Go 1.11引入Modules以来,其内置命令已集成包查询、下载等功能。 之前专门写过一篇Golang Modules的文章,介绍了Module的使用方式。 如一个Module工程,使用命令构建时会自动获取依赖,如:$ go build go: finding github.com/olzhy/quote latest go: downloading github.com/olzhy/quote v0.0.0-20190510033103-5cb7d4598cfa go: extracting github.com/olzhy/quote v0.0.0-20190510033103-5cb7d4598cfa 使用命令亦可查询最新可用版本:$ go get -u go: finding g...阅读全文

博文 2019-06-23 18:41:09 olzhy

Go语言反射规则

文地址:http://blog.golang.org/laws-of-reflection 介绍 反射在计算机的概念里是指一段程序审查自身结构的能力,主要通过类型进行审查。它是元编程的一种形式,同样也是引起混乱的重大来源。 在这篇文章里我们试图阐明Go语言中的反射是如何工作的。每种语言的反射模型是不同的(许多语言不支持反射),然而本文只与Go有关,所以我们接下来所提到的“反射”都是指Go语言中的反射。 类型与接口 由于反射是建立在类型系统(type system)上的,所以我们先来复习一下Go语言中的类型。 Go是一门静态类型的语言。每个变量都有一个静态类型,类型在编译的时后被知晓并确定了下来。 type MyInt int var i int var j MyInt 变量i的类型是int,...阅读全文

博文 2019-01-03 08:34:43 Golang语言社区

Go的包管理工具(三):Go Modules

在前面的文章,我们先是介绍了Go 的几种包管理方式,然后具体介绍了一种包管理的工具: glide。随着 Go 1.11 的发布,官方的包管理工具 Go Modules 变得流行起来。在发布不久的 Go 1.12 版本中,增强了对 Go Modules 的支持。本文将会介绍如何在项目中安装和使用 Go Modules 。 安装和激活 Modules 的支持 前置条件 如本文开头所说,从 Go 1.11 版本才支持 Go Modules。所以,默认 Go 的版本为 >= 1.11。 $ go version go version go1.12 darwin/amd64 笔者安装了最新的 1.12 版本。 激活使用 安装后,我们可以通过以下两种方式之一激活模块支持: 在$GOPATH/src 之外...阅读全文

Go2 Error Inspection前瞻

这几年关于Go语言未来演化的讨论成为了Gopher世界的热点,Go team官方对于Go语言的演化(以Go2为标签)也是十分上心,但吸取了其他语言,比如:Python3割裂社区的、不兼容演化的教训,Go team最终选择了一条尽可能地兼容Go1、稳健、平滑的演化之路,并逐渐开始落地。Go 1.11的Go modules是Go team开启Go2演化进程的标志性事件。随着“Go 2 Draft Design”的发布,Go team正在努力着手解决Go社区反响较为强烈的Error handling、Error values和Generics(泛型)这三个问题。从目前的进展上来看,Go error value相关机制的改善近期率先在以Proposal形式出现,并给出了待社区反馈的参考实现(gola...阅读全文

博文 2019-03-24 08:18:40 bigwhite

Go 爬虫之 HTTP 请求 QuickStart

前几天在 "知乎想法" 谈到了一个话题,如何模仿学习,举了通过 net/http client 模仿 Pyhton 的requests的例子。但并未实践,难道想法真的只能是想法吗?当然不是,于是我决定先暂停一周 GO 笔记,来实践下自己的想法。 有些新的知识,我们可以通过模仿学习 本文将通过 GO 实现 requests 的 quick start 文档中的所有例子,系统学习http client的使用。虽然标题是 quick start,但其实内容挺多的。 快速体验 首先,我们来发起一个 GET 请求,代码非常简单。如下: func get() { r, err := http.Get("https://api.github.com/events") if err != nil { pan...阅读全文

博文 2019-07-29 14:02:42 波罗学

使用BSN开发区块链应用智能合约-golang篇

作者:曹国波 时跃堂智能合约又称链码(Chaincode),是用计算机语言描述合约条款、交易的条件、交易的业务逻辑等,通过调用智能合约实现交易的自动执行和对账本数据的操作。一个BSN应用可以部署多个链码,每个链码包含多个方法。链码支持多种语言编写,包括golang、java、node.js。每个链码程序都必须实现Chaincode接口,链码包含:Init ,Invoke ,Query三个基本操作:▶ Init :链码初始化的方法,在链码实例化或者升级的时候调用一次,以便链码可以执行任何必要的初始化,包括应用程序状态的初始化。▶ Invoke :接收和处理链下业务系统调用事务处理提案,其参数包含调用的链码程序中函数的名称和具体业务处理数据参数。即在Invoke中根据不同的方法参数调用其他分支处...阅读全文

博文 2020-01-17 01:32:52 区块链服务网络BSN

Golang学习笔记-1.3 变量

**本文系第三篇Golang语言学习教程** var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。 ***变量声明语法如下***: >**var 变量名 类型 = 表达式** 例: ```go var age int = 19 ``` ----------------- 其中**“类型”**或**“=表达式”**两个不分可以省略其中一个。 >如果省略**类型**,那么将根据初始表达式来确定类型信息。 如果省略**=表达式**,那么将用零值初始化该变量。 例1: ```go package main import "fmt" func main() { var age = 19 //省略类型,根据自动表达式确定age类型 fmt.Println("Hello...阅读全文

博文 2018-07-06 10:19:01 xunk1900

Go 开发关键技术指南 | Go 面向失败编程 (内含超全知识大图)

作者 | 杨成立(忘篱) 阿里巴巴高级技术专家 关注“阿里巴巴云原生”公众号,回复 Go 即可查看清晰知识大图! 导读:从问题本身出发,不局限于 Go 语言,探讨服务器中常常遇到的问题,最后回到 Go 如何解决这些问题,为大家提供 Go 开发的关键技术指南。我们将以系列文章的形式推出《Go 开发的关键技术指南》,共有 4 篇文章,本文为第 2 篇。 Could Not Recover 在 C/C++ 中, 最苦恼的莫过于上线后发现有野指针或内存越界,导致不可能崩溃的地方崩溃; 最无语的是因为很早写的日志打印,比如 %s 把整数当字符串,突然某天执行到了崩溃; 最无奈的是无论因为什么崩溃都导致服务的所有用户受到影响。 如果能有一种方案,将指针和内存都管理起来,避免用户错误访问和释放,这样虽然浪...阅读全文

博文 2019-12-26 11:32:41 阿里巴巴云原生

Golang基础-初接触

Golang的历史 起源 领导者们 1.Robert Griesemer: 参与开发 Java HotSpot 虚拟机 2.Rob Pike: Go 语言项目总负责人,贝尔实验室 Unix 团队成员 3.Ken Thompson:贝尔实验室 Unix 团队成员,C语言创始人之一 4.Russ Cox:加入开发团队后着手语言和类库方面的开发,也就是 Go 语言的标准包 发展 特点 1.快速编译 2.高效执行 3.易于开发 特性 1.多态性:通过接口(interface)实现 2.静态类型:类型安全 3.支持交叉编译 4.完全支持UTF-8的编程语言 特性缺失 1.不支持函数重载和操作符重载 2.不支持隐式转换(让所有的东西都显式) 3.通过另一种途径实现面向对象设计来放弃类和类型的继承 4.尽...阅读全文

博文 2019-11-10 22:04:14 肚腩老腊肉

Nsq 原理分析(一)

Nsq 是用 go 语言开发的轻量级的分布式消息队列,适合小型项目使用、用来学习消息队列实现原理、学习 golang channel知识以及如何用 go 来写分布式,为什么说适合小型小型项目使用因为,nsq 如果没有能力进行二次开发的情况存在的问题还是很多的。 Nsq 模块介绍 nsqd:是一个进程监听了 http、tcp 两种协议,用来创建 topic、channel,分发消息给消费者,向 nsqlooup 注册自己的元数据信息(topic、channel、consumer),自己的服务信息,最核心模块。 nsqlookup:存储了 nsqd 的元数据和服务信息(endpoind),向消费者提供服务发现功能,向 nsqadmin 提供数据查询功能。 nsqadmin:简单的管理界面,展示了...阅读全文

博文 2020-05-27 21:32:41 朱伟

Go Web 编程之 Hello World

概述 计划写一个讲 Go Web 编程的系列文章。从基于 net/http 包编写 Go Web 程序开始,讲述处理器,请求,响应等基础知识。然后到框架的使用。中间会穿插一些源码的分析。最后做一个实战项目。 目前 Go 社区已经有非常多关于 Web 开发的库或框架。大而全的有beego,revel。超高性能的有echo,fasthttp,gin(目前 GitHub 星标最多)。还有不少专注于具体某个方面的,最多要属路由了,例如:mux/httprouter。 那为什么还要从最原始的 net/http 包开始学起?因为这些库/框架大多是基于 net/http 包做了包装,提供易于使用的功能,如路由参数(/:name/:age)/路由分组等。熟练掌握了基础知识和 net/http,学习其他框架必...阅读全文

博文 2019-12-09 22:32:43 darjun

Golang学习 - bufio 包

// bufio 包实现了带缓存的 I/O 操作 type Reader struct { ... } // NewReaderSize 将 rd 封装成一个带缓存的 bufio.Reader 对象, // 缓存大小由 size 指定(如果小于 16 则会被设置为 16)。 // 如果 rd 的基类型就是有足够缓存的 bufio.Reader 类型,则直接将 // rd 转换为基类型返回。 func NewReaderSize(rd io.Reader, size int) *Reader // NewReader 相当于 NewReaderSize(rd, 4096) func NewReader(rd io.Reader) *Reader // bufio.Reader 实现了如下接口:...阅读全文

博文 2019-04-19 18:34:41 佛心看世界

用 GODEBUG 看调度跟踪

让 Go 更强大的原因之一莫过于它的 GODEBUG 工具,GODEBUG 的设置可以让 Go 程序在运行时输出调试信息,可以根据你的要求很直观的看到你想要的调度器或垃圾回收等详细信息,并且还不需要加装其它的插件,非常方便,今天我们将先讲解 GODEBUG 的调度器相关内容,希望对你有所帮助。 不过在开始前,没接触过的小伙伴得先补补如下前置知识,便于更好的了解调试器输出的信息内容。 原文地址:用 GODEBUG 看调度跟踪 前置知识 Go scheduler 的主要功能是针对在处理器上运行的 OS 线程分发可运行的 Goroutine,而我们一提到调度器,就离不开三个经常被提到的缩写,分别是: G:Goroutine,实际上我们每次调用 go func 就是生成了一个 G。 P:处理器,一般...阅读全文

博文 2019-08-19 20:02:39 煎鱼

Golang学习 - io 包

先说一下接口,Go 语言中的接口很简单,在 Go 语言的 io 包中有这样一个函数: func ReadFull(r Reader, buf []byte) (n int, err error) 这个函数可以把对象 r 中的数据读出来,然后存入一个缓冲区 buf 中,以便其它代码可以处理 buf 中的数据。 这里有个问题,ReadFull 函数究竟可以读取哪些对象的数据?可以读文件中的数据吗?可以读网络中的数据吗?可以读数据库中的数据吗?可以读磁盘中的扇区吗?可以读内存中的数据吗? 答案是 ReadFull 可以读取任何对象的数据,但是有个前提,就是这个对象必须符合 Reader 的标准。 Reader 的标准是什么呢?下面是 Reader 的定义: type Reader interfac...阅读全文

博文 2019-04-19 18:34:41 佛心看世界

Blog.6 分布式会话跟踪系统架构设计与实践

调用链trace系统可以帮助技术人员快速的定位问题,查看整个请求的调用链路,及各个链路的耗时情况。方便技术人员针对性的对服务进行性能优化。 概念 参考调用链trace的设计分析的介绍,trace系统的要素包括:traceId、spanId、annotation。 traceId:贯穿整个调用链路,通过traceId来关联链路的所有相关日志 spanId:标识单次请求调用 annotation:记录请求调用的附加信息 简化trace日志设计 在调用链trace的设计分析文章中,系统log设计相对复杂,先从最简单的入手开始了解。 微服务A、B、C之间存在相互调用关系,我们为每次请求记录一条log。通过log中的parnetID来确定调用的层级关系,通过spanID来唯标识一个独立请求,通过tra...阅读全文

博文 2019-08-25 18:02:38 渐行渐远

golang自定义一个简洁而强大的错误追踪包

一. 前言 1.1 错误追踪需要了解的信息 错误提示语 错误的位置, 如:具体的文件名,错误行号和错误方法等. 1.2 实际情况 golang自带了错误信息包error 只提供了简单的用法, 如errors.New(),和errors.Error()用来传递和获取错误信息. 明显官方的包已经不能满足了, 只能采取其他方法补救, 如: 扩充官方包 自定义错误包 ...... 更多内容, 请查看 https://segmentfault.com/a/119000002073565...阅读全文

博文 2019-10-18 21:32:46 aside section ._1OhGeD

golang reflect笔记

最近有大量用到reflect,给一流开源项目gin贡献的pr就是这方面的技巧,也在自己的开源项目中使用了大量使用reflect简化接口开发。鉴于reflect的接口特别难用,特别容易忘记,记录下。 判断类型 // 提取类型信息到变量里 var stringSliceType = reflect.TypeOf([]string{}) var intSliceType = reflect.TypeOf([]int{}) var int32SliceType = reflect.TypeOf([]int32{}) func typeCheck(x interface{}) { // 提取interface{}里面的类型信息 vt := reflect.ValueOf(x).Type() switc...阅读全文

博文 2019-05-31 15:34:52 疯狂一只小蚂蚁

go微服务框架go-micro深度学习(二) 入门例子

上一篇帖子简单介绍了go-micro的整体框架结构,这一篇主要写go-micro使用方式的例子,中间会穿插一些go-micro的源码,和调用流程图,帮大家更好的理解go-micro的底层。更详细更具体的调用流程和细节,会在以后的帖子里详细讲解。 例子的github地址: gomicrorpc 跑一遍例子,也就会明白个大概。 安装所需要的环境 go-micro服务发现默认使用的是consul,(2019年源码修改了默认使用mdns) brew install consul consul agent -dev 或者直接使用使用docker跑 docker run -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302/udp -p 8302...阅读全文

博文 2019-08-01 13:58:34 li-peng

golang ioutil io工具

读取 ReadAll 读取全部数据 func ReadAll(r io.Reader) ([]byte, error) file, _ := os.Open("./cache.js") bt, _ := ioutil.ReadAll(file) fmt.Println(string(bt) ReadFile 读取文件 func ReadFile(filename string) ([]byte, error) bt, _ := ioutil.ReadFile("./cache.js") fmt.Println(string(bt)) ReadDir 获取目录信息 func ReadDir(dirname string) ([]os.FileInfo, error) // 返回目录信息列表 f...阅读全文

博文 2019-08-23 10:33:13 直立猿

Tikye(TIY)知识科普之技术架构

设计思路考虑到Tikye对于区块链系统的性能、安全等需求远比一般的公有链性能更高,为了保证交易场景下的公开透明,交易各方皆能参与到区块链的共同监管与治理,同时能兼顾高频交易需要较高的TPS,我们设计了一套支持可插拔、可扩展的高性能应用级区块链系统。在下文中,该区块链系统简称Tikye。该系统为开发者提供便捷的SDK工具包,同时还将为外部系统提供可兼容的API接口,基于Tikye的特性解决传统问题。主要依靠智能合约来解决基于Tikye的事务性问题,智能合约在区块链环境中运行,保证了事务执行的可行性、高效性和安全性。为了区块链系统的处理能力,我们通过引入多条平行链组成链路由系统。平行链和主链保持既独立又统一的关系,所有平行链可以拥有自己的超级节点、状态机和原始交易数据,由主链来存储关键数据以及完...阅读全文

博文 2019-09-19 11:02:46 逗币狗

对k8s部分概念的一些理解

业余时间一直在学习k8s和docker相关的知识,整理下最近所学的一些知识点和概念 k8s架构 master 由架构图可以看出来,master节点其实主要是四部分组成的; api server;这个很简单,也就是平时我们用的较多的kubectl命令,客户端直接调用k8s的命令,将指令交给了api server去处理; scheduler;我理解scheduler的作用就是由它来决定将pod放到哪个具体的node节点上运行 controller manager;负责各资源的管理,如namespace下有哪些实例,deploy能管理哪些pod,都是由controller manager来处理的; etcd;存储集群的配置,资源状态信息等; node node节点是实际部署应用的节点,它比较复杂,...阅读全文

博文 2020-01-13 10:32:47 byte

Go36-19,20-错误处理

错误处理(上) 错误处理到现在为止应该已经接触过几次了。比如,声明error类型的变量err,或是调用errors包中的New函数。 error类型 error类型是一个接口类型,是一个Go语言的内建类型。在这个接口类型的声明中只包含了一个方法Error。这个方法不接受任何参数,但是会返回一个string类型的结果。它的作用是返回错误信息的字符串表示形式。使用error类型的方式通常是,在函数声明的结果列表的最后,声明一个该类型的结果,同时在调用这个函数之后,先判断它返回的最后一个结果值是否“不为nil”。如果值“不为nil”,就需要进入错误处理。否则就是继续正常的流程。示例如下: package main import "fmt" func echo(request string) (re...阅读全文

博文 2019-01-17 23:35:13 骑士救兵