Go 变量

Go学习笔记

变量定义 1、使用var关键字(变量类型写在变量名之后) var a, b, c bool var s1, s2 string = “hello”, “world” 可定义在函数体内或直接定义在包内 使用var()集中定义变量 var ( a, b, c) 2、编译器自动识别类型 var a, b, i, s1, s2 = true, false, 1, “hello”, “world” 3、使用:=定义 a, b, i, s1, s2 := true, false, 1, “hello”, “world” 只能在函数体内定义使用 命名规则:一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意 数量的字母、数字或下划线。大写字母和小写字母是不同的。关键字不能用于自定义名字,只能在特定语法结构中使用。 Go语言中不存在 未初始化的变量 类型必须完全匹配,nil可以赋值给任何指针或引用类型的变量 25个关键字 break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 内建常量 true, false, iota, nil 内建变量类型 1、bool, string 2、(u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr(指针) 3、byte, rune(字符) 4、float32, float64, complex64, complex128 5、error 内建函数 1、make, len, cap, new, append, copy, close, delete 2、complex, real, imag 3、panic, recover 强制类型转换 类型转换是强制的 var a, b int = 3, 4 var c int = int(math. [Read More]
Go 

GO 概述

Go学习笔记

区别于其它语言

  • 没有" 对象",没有继承、多态,没有泛型,没有try/catch
  • 有接口,函数式编程,CSP并发模型(goroutioe + channel)
Go 

Java8通用Builder Java8之后,对于Builder模式可以利用Supplier、Consumer来构造一个通用的Builder模式,具体的代码如下 import com.google.common.collect.Lists; import java.util.List; import java.util.function.BiConsumer; import java.util.function.Consumer; import java.util.function.Supplier; /** * 通用的建造者(Builder)模式构建器 * @param <T> 构造对象 * @author xue.zeng */ public class GenericBuilder<T> { private final Supplier<T> instantiator; private List<Consumer<T>> instantiatorModifiers = Lists.newArrayList(); private List<Consumer<T>> keyValueModifiers = Lists.newArrayList(); public GenericBuilder(Supplier<T> instantiator) { this.instantiator = instantiator; } public static <T> GenericBuilder<T> of(Supplier<T> instantiator) { return new GenericBuilder<T>(instantiator); } public <U> GenericBuilder<T> with(BiConsumer<T, U> consumer, U value) { Consumer<T> c = instance -> consumer. [Read More]

Hugo结合Github搭建博客

Hugo

安装Hugo macOS环境 brew install hugo # 检测安装成功 hugo version Hugo Static Site Generator v0.55.6/extended darwin/amd64 BuildDate: 2019-08-26T15:23:01Z 生成站点 使用hugo创建blog站点 hugo new site blog cd blog # 目录结构 tree blog #blog #├── archetypes #│ └── default.md #├── config.toml #├── content #├── data #├── layouts #├── static #└── themes archetypes:包括内容类型,在创建新内容时自动生成内容的配置 config.toml:是网站的配置文件,包含一些基本配置和主题特有的配置 content:包括网站内容,全部使用markdown格式 data:存放自定义模版,导入的toml文件(或json,yaml) layouts:包括了网站的模版,决定内容如何呈现 static:包括了css, js, fonts, media等,决定网站的外观 themes:用于存放主题,可以去官方https://themes.gohugo.io/下载喜欢的主题 安装主题 git init git submodule add https://github. [Read More]

系统远程调用

系统远程调用思想 常规远程调用协议 dubbo thrift protocol buffer hessian 远程框架调用实现 调用端应用服务端暴露出来的接口,通过代理工厂创建代理对象 spring实现:通过spring的自动注入的方式,在服务容器里面生成代理对象,然后当需要使用的时候,直接使用代理对象, 就可以调用到另一个系统里面的服务 远程通讯基本原理 从底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算 机,基于传输协议和网络IO来实现, 传输协议:主要有 tcp、udp、http等,tcp、udp、http都是在基于Socket概念上为某类应用场景而扩展出的传输协议 网络IO:主要有bio(阻塞)、 nio(非阻塞)、aio(异步,jdk7中新特性)三种方式,所有的分布式应用通讯都基于这个原理而实现,只是为了应用的易用,各种语言通常都会提供一些更为贴近应用易用的应用层协议 应用级协议 远程服务通讯,需要达到的目标是在一台计算机发起请求,另外一台机器在接收到请求后进行相应的处理并将结果返回给请求端,这其中又会有诸如one way request、同步请求、异步请求等等请求方式,按照网络通信原理,需要实现这个需要做的就是将请求转换成流,通过传输协议传输至远端,远端计算机在接 收到请求的流后进行处理,处理完毕后将结果转化为流,并通过传输协议返回给调用端 原理是这样的,但为了应用的方便,业界推出了很多基于此原理之上的应用级的协议,使得大家可以不用去直接操作这么底层的东西,通常应用级的远程通信协议会 提供: 为了避免直接做流操作这么麻烦,提供一种更加易用或贴合语言的标准传输格式 网络通信机制的实现,就是替你完成了将传输格式转化为流,通过某种传输协议传输至远端计算机,远端计算机在接收到流后转化为传输格式,并进行存储或以某种 方式通知远端计算机。 所以在学习应用级的远程通信协议时,可以带着这几个问题进行学习: 传输的标准格式是什么? 怎么样将请求转化为传输的流? 怎么接收和处理流? 传输协议是? 不过应用级的远程通信协议并不会在传输协议上做什么多大的改进,主要是在流操作方面,让应用层生成流和处理流的这个过程更加的贴合所使用的语言或标 准,至于传输协议则通常都是可选的 Java领域实现远程调用技术 RMI XML-RPC Binary-RPC MINA ESB Burlap Hessian SOAP CORBA EJB JMS RMI(Remote Method Invocation) RMI是个典型的为java定制的远程通信协议,在single vm中,可以通过直接调用java object instance来实现通信,那么在远程通信时,如果也能按照这种方式当然是最好了,这种远程通信的机制成为RPC(Remote Procedure Call),RMI正是朝着这个目标而诞生的。 RMI 采用stubs 和 skeletons 来进行远程对象(remote object)的通讯。stub 充当远程对象的客户端代理,有着和远程对象相同的远程接口,远程对象的调用实际是通过调用该对象的客户端代理对象stub来完成的,通过该机制RMI就好比它是本地工作,采用tcp/ip协议,客户端直接调用服务端上的一些方法。优点是强类型,编译期可检查错误,缺点是只能基于JAVA语言,客户机与服务器紧耦合 [Read More]
arch