golang基础学习

刚找了个新工作,应公司的要求必须用go语言来开发服务器。特此将自己对于go语言的学习经历写出来,帮助那些正在golang学习路上挣扎的迷茫的小伙伴们。 本文只是讲解自己最基础的一个学习过程,从最基础的变量开始,到最后利用golang搭建一个简单的服务器项目的过程,肯定有不少的错误或瑕疵,千万别当做标准的文档去看,仅仅是自己的一个学习过程的总结。希望大家理解,也仅仅是自己对自己每周学习过程的一个总结,每周更新一次。带大家用代码学习golang,用开源项目学习整个项目的框架逻辑。抽象的东西最好用实例...阅读全文

2015-07-04 17:51 ice_201507
阅读:4347 评论:1

技术分享 《分布式一致性raft算法实现原理》

这段时间跟同事聊了不少分布式系统中的常用算法协议,中间有聊到分布式一致性的话题,当然我们对一致性理解都是那种介绍的层次。 哈哈 , 后来用了心思去学习分布式一致性协议 raft, 现在有些心得,就拿出来给同事分享下。 先简单聊下什么是raft协议. 他用来做什么的? 分布式存储系统通常会维护多个副本,这样不仅能提高系统的可用性,因为有多个副本所以性能也有提高。但是多副本带来的代价就是分布式存储系统的核心问题之一: 需要维护多个副本的数据一致性。 Raft一致性协议就是用来干这事的,即使在部分副本...阅读全文

阅读:4068 评论:0

如何做Go的性能优化?

Go的性能优化其实总的来说和C/C++等这些都差不多,但也有它自己独有的排查方法和陷阱,这些都来源于它的语言特性和环境。 ------------------------- 1.性能优化前提——任何好的东西都是在正确的前提上 ------------------------- 代码界的很多事是和我们生活的哲学息息相关的,我们想要做好一件事,首先要保证我们能按时完成我们的任务,其次再去想如何把工作做的更好。如果一味只去要求做的尽善尽美可能会导致延期,失败,半途而废。 所以,先写正确的代码,再...阅读全文

2017-07-12 18:48:52 好奇还思猫
阅读:4922 评论:0

深入理解GO语言之内存分配

前言:开通专栏后的第一篇文章,接下来将会就GO语言的内存,GC,并发编程等,深入理解GO这门语言。 一,内存模型概述 首先明确几个概念:(1) cache:线程私有的,每次对象分配时候先从cache查询,小对象如果能获得空闲内存则不用加锁了。来看看cache的结构(省略了跟gc等相关的字段)type mcache struct { alloc [numSpanClasses]*mspan // 用于分配的span spanclass spanClass // size class and nos...阅读全文

阅读:948 评论:0

Go 入门实战

Go 入门级别实战 看了一段时间的 Go 基础语法,总觉得缺了点什么,所以今天就想试试写点什么 附.目录结构 binary.go 、 cache.go、 fibonacci.go 都属于 chestnut_math 包 main.exe 为构建后的可执行文件 main.go 为 main 包 主入口文件 test.go 一个单独的 main 包 测试用(独立) 一. 斐波那契数列 原理其实很简单,就是一个递归... 1.求值代码 这是 fibonacci.go 文件代码 package ches...阅读全文

阅读:2202 评论:0

Go 语言 简明教程

1. 概述 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 2. 优缺点 2.1 优点 开源 编译性语言, 运行高速 语法简洁 并行处理封装 内存管理、数组安全 2...阅读全文

2018.08.03 13:49:06 aside section . 等
阅读:66542 评论:3

【go密码学】-Hash

Hash(散列函数) 简单说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。一个优秀的Hash算法,将能实现: 正向快速:给定明文,快速计算出hash值。 逆向困难:给定hash值,很难逆推出明文。 输入敏感:原始输入信息修改一点消息,产生的hash值看起来应该都有很大不同。 冲突避免:很难找到2段不同的明文,使他们的hash值相同。 典型的Hash算法 //将任何长度的字符串,通过运算,散列成0-15整数 func HashCode(key string) int { var in...阅读全文

2018-10-11 15:35:10 jincheng828
阅读:1301 评论:0

【go密码学】-对称加密算法

介绍 对称加密算法是相对于非对称加密算法而言,两者的区别在于,对称加密和加密和解密时使用相同的秘钥,而非对称加密在加密和解密时使用不同的秘钥(公钥和私钥)。常见的对称加密算法:DES、3DES、AES。 DES DES的基础结构,由IBM公司的Horst Feistel设计,因此称Feistel网络。在Feistel网络中,加密的每个步骤称为轮,经过初始置换后的64位明文,进行了16轮Feistel轮的加密过程,最后经过终结置换后形成最终的64位密文,如下图: go实现DES package m...阅读全文

2018-10-11 17:34:42 jincheng828
阅读:979 评论:0

【go密码学】-非对称加密算法

RSA RSA加密 在RSA中,明文、密钥和密文都是数字。加密过程可以用下列公式: 加密公式中出现的E和N的组合就是公钥。 RSA解密 公式: 数字D和N组合起来就是RSA的私钥。 生成密钥对 求N N = p x q (p、q为质数)。q、q太小容易被破译,太大会导致计算时间很长。N = 17 x 19 = 323 求L(L是仅在生成密钥对的过程中使用的数) L = lcm(p-1,q-1) (L是p-1和q-1的最小公倍数)L = lcm(16,18) = 144 求E 1 < E < Lg...阅读全文

阅读:1278 评论:0

Rust异步编程 一

本文同步于Rust中文社区 ,本文时间:2018-12-20, 作者:Rust中文社区,简介:Rust中文社区 欢迎向Rust中文社区投稿,投稿地址 ,好文将在以下地方直接展示 Rust中文社区首页 Rust中文社区文章专栏 知乎专栏Rust中文社区 思否专栏Rust中文社区 简书专题Rust中文社区 微博Rustlang-cn 欢迎来到 Rust 异步编程!如果你正打算用 Rust 写一些异步代码,那你就来对地方了。不管你打算构建Web服务器,数据库,还是操作系统,这本书都能帮助你运用 Rus...阅读全文

2018-12-20 22:34:42 krircc
阅读:1425 评论:0

Go WebAssembly 入门(一)

已经安装Go 1.11及以上版本。 Getting Started 编辑main.go package main import "fmt" func main() { fmt.Println("Hello, Go WebAssembly!") } 把main.go build成WebAssembly(简写为wasm)二进制文件 GOOS=js GOARCH=wasm go build -o lib.wasm main.go 把JavaScript依赖拷贝到当前路径 cp "$(go env GO...阅读全文

2019.02.02 16:30 wlchn
阅读:2091 评论:0

超详细的GO语言windows系统开发环境的搭建及其项目的创建(2019年8月25日更新)

1.先在官网下载GO https://golang.org/ image.png 2.选择一个适合你的OS系数进行下载 https://golang.org/dl/ image.png 3.下载之后双击安装,一直往下点安装在C盘,最后完成安装 image.png 4.先别着急找安装的GO,我们先配置环境变量 如果你已经完成了上面的安装步骤,那么下面PATH就自动添加了变量名 image.png 下面才是我们要做的环境设置,切记一点都不能错 (1)新建变量名:GOROOT 变量值:C:\Go 变量...阅读全文

2019.10.03 22:42:45 aside section . 等
阅读:819 评论:1

[易学易懂系列|rustlang语言|零基础|快速入门|(2)]

我们今天来配置下vscode+rust。vscode开发rust很方便。但配置有点坑,我们都认为vscode很简单,很完善。但这里很多同学也出现不少问题。我们在这里简单记录下win7下配置的过程,跟着我一步步来,应该就可打造你的屠龙宝刀。首先,我们安装插件:Rust Extension PackRust Test Explorer然后打开上一篇文章的工程:hello-rust,见:https://www.cnblogs.com/gyc567/p/11887935.html打开command pa...阅读全文

阅读:1029 评论:0

[易学易懂系列|rustlang语言|零基础|快速入门|(1)]

今天我们来开一个新系列。从零学习rustlang。简单介绍下rustlang:Rust 是一门系统级编程语言,被设计为保证内存和线程安全,防止段错误产生。作为系统级编程语言,它的基本理念是“零开销抽象”。理论上来说,它的速度与 C/C++ 同级。Rust 可以被归为通用的、多范式、编译型的编程语言,类似C/C++。与这两门编程语言不同的是,Rust 是线程安全的!Rust编程语言的目标是,创建一个安全和并发的软件系统。它强调安全性、并发和内存控制。尽管 Rust 借用了 C/C++的语法,却杜绝...阅读全文

阅读:2074 评论:0

[易学易懂系列|rustlang语言|零基础|快速入门|(5)]

[易学易懂系列|rustlang语言|零基础|快速入门|(5)](https://www.cnblogs.com/gyc567/p/11910818.html) Lifetimes 我们继续谈谈生命周期(lifttime),我们还是拿代码来说话: fn main() { let mut a = vec![1, 2, 3]; let b = &mut a; // &mut borrow of `a` starts here // some code println!("{:?}", a); // ...阅读全文

阅读:259 评论:0

[易学易懂系列|rustlang语言|零基础|快速入门|(4)]

易学易懂系列|rustlang语言|零基础|快速入门|(4) Borrowing 继续讲讲另一个重要的概念:借用(borrowing), 什么是借用? 我们先来看前一文章([易学易懂系列|rustlang语言|零基础|快速入门|(3)])的代码 : let a = [1, 2, 3]; let b = a; println!("{:?} {:?}", a, b); *// [1, 2, 3] [1, 2, 3]* let a = vec![1, 2, 3]; let b = a; println...阅读全文

阅读:371 评论:0

[易学易懂系列|rustlang语言|零基础|快速入门|(3)]

易学易懂系列|rustlang语言|零基础|快速入门|(3) 今天我们来讲讲rust最难,也是最重要的概念: Ownership,Borrowing,Lifetimes 首先我们来看看:ownership(所有权) 我们来看看下面的代码: let a = [1, 2, 3]; let b = a; println!("{:?} {:?}", a, b); *// [1, 2, 3] [1, 2, 3]* let a = vec![1, 2, 3]; let b = a; println!("{:...阅读全文

阅读:762 评论:0

[易学易懂系列rustlang语言零基础快速入门(6)]

[易学易懂系列rustlang语言零基础快速入门(6)] 有意思的基础知识 我们现在回过头来看看,一些基础知识。 因为理解了前面的重要概念:所有权,借用,生命周期。 我们现在看基础知识就很简单了。 先看变量定义: let a = true;//rust不要求显式定义类型,编译器女王自动会根据上下文和用途,来自动定义类型,这里 //是:bool let b: bool = true;//如果显式定义类型,则通过:分号+类型 let (x, y) = (1, 2); let mut z = 5; z...阅读全文

阅读:1033 评论:0