Gin和grpc搭建-学习Go语言

安装grpc

如果你遇到这样的错误

package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

解决方案,采用最新github的地址。

git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
git clone https://github.com/golang/net.git $GOPATH/src/golang.org/x/net
git clone https://github.com/golang/text.git $GOPATH/src/golang.org/x/text
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
git clone https://github.com/google/go-genproto.git $GOPATH/src/google.golang.org/genproto

cd $GOPATH/src/
go install google.golang.org/grpc

继续报错:

google.golang.org/grpc/internal/channelz/types_linux.go:26:2: cannot find package "golang.org/x/sys/unix" in any of:
    /usr/local/go/src/golang.org/x/sys/unix (from $GOROOT)
    /go/src/golang.org/x/sys/unix (from $GOPATH)

解决方案,依然采用github的地址。

git clone https://github.com/golang/sys.git $GOPATH/src/golang.org/x/sys

gin框架

如果你想执行gin的example的例子。

go run grpc/server.go
grpc/server.go:7:2: cannot find package "github.com/gin-gonic/gin/examples/grpc/pb" in any of:
    /usr/local/go/src/github.com/gin-gonic/gin/examples/grpc/pb (from $GOROOT)
    /go/src/github.com/gin-gonic/gin/examples/grpc/pb (from $GOPATH)

解决方案,拉取gin的包。

go get -u github.com/gin-gonic/gin

参考链接

  1. golang安装gRpc

单元测试-学习Go语言

实现

采用自身的testing包实现。

踩坑

单元测试和源文件必要放在同一个目录下,才可以正常执行。

Go PHPUnit
*_test文件和源文件一起 必须 任意
断言 第三方库 支持
mock 支持 支持

语法

执行单元测试

go test -v -cover=true ./src/rpc/client_test.go ./src/rpc/client.go

简单的断言

/*
* @Author: GeekWho
* @Date:   2018-07-20 11:33:43
* @Last Modified by:   GeekWho
* @Last Modified time: 2018-07-20 12:29:33
*/
package rpc

import (
    "testing"

    "github.com/stretchr/testify/assert"
)

func TestRun(t *testing.T) {
    assert.Equal(t, "rpc", "rpc")
}

基础-学习Go语言

1. 每个 Go 程序都是由包构成的。
2. 程序从 main 包开始运行。
3. 本程序通过导入路径 “fmt” 和 “math/rand” 来使用这两个包。
4. 按照约定,包名与导入路径的最后一个元素一致。例如,”math/rand” 包中的源码均以 package rand 语句开始。

导出名

1. 在 Go 中,如果一个名字以大写字母开头,那么它就是已导出的。例如,Pizza 就是个已导出名,Pi 也同样,它导出自 math 包。
2. pizza 和 pi 并未以大写字母开头,所以它们是未导出的。
3. 在导入一个包时,你只能引用其中已导出的名字。任何“未导出”的名字在该包外均无法访问。

函数

1. 函数可以没有参数或接受多个参数。
2. 在本例中,add 接受两个 int 类型的参数。
3. 注意类型在变量名 之后。
4. 当连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。

多值返回

1. 函数可以返回任意数量的返回值。

命名返回值

1. Go 的返回值可被命名,它们会被视作定义在函数顶部的变量。
2. 返回值的名称应当具有一定的意义,它可以作为文档使用。
3. 没有参数的 return 语句返回已命名的返回值。也就是 直接 返回。
4. 直接返回语句应当仅用在下面这样的短函数中。在长的函数中它们会影响代码的可读性。

变量

变量的初始化

1. var 语句用于声明一个变量列表,跟函数的参数列表一样,类型在最后。就像在这个例子中看到的一样,var 语句可以出现在包或函数级别。
2. 变量声明可以包含初始值,每个变量对应一个。如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型。

短变量声明

1. 在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。函数外的每个语句都必须以关键字开始(var, func 等等),因此 := 结构不能在函数外使用。

基本类型

Go 的基本类型有

bool

string

int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

rune // int32 的别名
// 表示一个 Unicode 码点

float32 float64

complex64 complex128

1. 本例展示了几种类型的变量。 同导入语句一样,变量声明也可以“分组”成一个语法块。
2. int, uint 和 uintptr 在 32 位系统上通常为 32 位宽,在 64 位系统上则为 64 位宽。 当你需要一个整数值时应使用 int 类型,除非你有特殊的理由使用固定大小或无符号的整数类型。

零值

1. 没有明确初始值的变量声明会被赋予它们的 零值。

零值是:

– 数值类型为 0,
– 布尔类型为 false,
– 字符串为 “”(空字符串)。

类型转换

1. 表达式 T(v) 将值 v 转换为类型 T。
2. Go 在不同类型的项之间赋值时需要显式转换。

类型推导

1. 在声明一个变量而不指定其类型时(即使用不带类型的 := 语法或 var = 表达式语法),变量的类型由右值推导得出。
2. 不过当右边包含未指明类型的数值常量时,新变量的类型就可能是 int, float64 或 complex128了,这取决于常量的精度:

常量

1. 常量的声明与变量类似,只不过是使用 const 关键字。
2. 常量可以是字符、字符串、布尔值或数值。
3. 常量不能用 := 语法声明。

数值常量

1. 数值常量是高精度的 值。
2. 一个未指定类型的常量由上下文来决定其类型。
3. 再尝试一下输出 needInt(Big) 吧。

参考链接

1. Go指南中文版

价值感知训练营-学习笔记(截止第八课)

学习笔记

花了一整天的时间把三九的价值感知课程几乎都听了一遍。

在第一讲,我们明白了学习价值感知的意义:
1. 由感性购买决策向理性购买决策过度
2. 培养见微知著的能力
3. 通过关注一个公司的发展,真正认清价格与价值的关系
4. 培养投资耐心,学会等待机会
5. 投资不练价值感知,好比习武不扎马步

在第二讲,学习了周期的重要性,之前在笑来老师的文章大致的理解了周期的概念,但周期我们应该去做什么?三九老师讲了:
1. 凡事皆有规律,万物皆有周期
2. 屡创新高攒票子,跌跌不休屯代币
3. 投资是一个需要不断学习,刻意练习才能熟练掌握和运用的技能
4. 太阳底下没有新鲜事,历史总是惊人的相似
5. 投资不知周期,犹如打仗不懂兵法。欲知周期而不练价值感知,好比习武不扎马步

从第三讲学习了分清你的投资风格,我应该属于创业型的投资,所以有了创业型投资的方法论:
1. 鸡蛋不要放在一个篮子里面,思考的重点首先不在篮子,而在于你有多少鸡蛋
2. 不断屯那种跌无可跌的优质币,在持仓成本上进入该币种的第一梯队。至于好处就是将来在投资心理上你可以占据不战而屈人之兵的战略优势。
3. 你不是不能找到和发现这样的币,而是你无法疏导要半年甚至更久的时间才能更有钱的这份焦虑
4. 这种情况下你要做的便是拼命去场外赚钱,一是转移注意力,二是不断有钱去屯币,三是完成上述两点时,顺便提升了自己的能力

第四讲,三九老师送给我们3个锦囊:
1. 笔记
2. 愿为知识付费
3. 自我投资教育

在第五讲,我们学习到长线选品的原则:
1. 创始人团队不会 挂羊头,买狗肉
2. 创始人必须见过钱 会花钱
3. 选取项目 三年内会爆发

在第六讲,学习到做短线的价格投机的原则:
1. 白马当作黑马骑。
2. 制定策略,将贪婪进行疏导。
3. 买入金额控制在五一分一。
4. 提前想好卖出价格,分批次抛售。

第七课,讲述延迟满足的三要素:
1. 长线投资币种持有的代币量不要超过自己的能力边界,全力呵护内心的平衡
2. 投资要得到家人的支持和理解
3. 提升场外赚钱能力,不放过任何一个机会,想尽一切办法赚钱

第八课,跌跌不休屯代币.自我笃定是根本
1. 你心中区块链是什么样的?只有解决了这个问题,你才能更加笃定,而不是像大多数人那样靠“信仰”在投资。
去学习,然后结合自己的所学所知提炼出自己对区块链的看法。
2. 基于周期背景下的跌跌不休屯代币,在内心笃定后,刻意练习“屯、配置、不要动”这六个字。

推荐价值感知的课程,值得你学习。

从我的链接购买课程,你可以得到:
1. 19讲得课程(目前更新到第九讲)
2. 投资微信群门票(分享投资心得)
3. 知识星球(投资秘籍)
4. 8.88元新人红包
5. 截止2018.07.01 23:59:59

买完了,听完课,感觉被骗了,有任何不满意,24小时无条件退款。

与其让市场教训,不如被三九教育。

扫码前,请看付费课程购买指南https://shimo.im/docs/KlwiGJAq7JkRNegp/
新人红包,请加我微信号:caijiamx

你应该拥有的最重要的能力-阅读笔记

这是我的第九周读后感,在上一篇文章里,学习到了多维竞争:

1. 为自己打造多维度的竞争力才是出路。

2. 生活是具有多个维度的,至少在一个维度上足够突出。

所谓的元认知能力,其实是指对自己的思考过程的认知与理解。

所谓“元认知能力”,其实就是指对自己的思考过程的认知与理解。从定义上看可能有点抽象,但是其实它很好理解,当你的“元认知能力”被激活时,你会很自然地产生类似以下“自问自答”的思考过程:

啊?之前我想的竟然是错的、不完整的、不周全的、不合理的、不知所以然的……

啊?原来是这样的啊!

啊?这道理其实挺简单的啊!之前我怎么竟然完全没有想到?

嗯!那我知道了,我现在开始应该这么想才对……

嗯?我怎么又不知不觉地被带回去了?明明已经学过的道理怎么就忘了应用呢?

唉!知易行难啊!哼!我就不信我搞不定!

首先,先看元认知起作用的方式。元认知能力从底层来看,起作用的方式事实上极其简单,其实就是这三个思考步骤:

第一步:哦,我原来是这么想的……

第二步:嗯?我这么想难道是不对的吗?

第三步:啊!我应该这么想才对……

从这个角度望过去,整个人类,不论古今中外,在教育上从来都是特别失败的。为什么这么说呢?因为我们经过那么多年的积累,打造了那么长时间,从幼儿园、小学、初中、高中到本科,甚至研究生、博士生才能完成的教育体系,竟然在这个最重要的元认知能力上,几乎毫无贡献。而且,竟然还是在它原本如此简单的情况下!

你再回头看看我在开头说的第一句话:时间总是在过后才显得飞快。你真的理解这句话了吗?我给你简单演示一下运用元认知思考这句话的过程:

时间总是在过后才显得飞快……

嗯,真的是呢!

那为什么会有这种感觉呢?

若是这种感觉是真实的,那我为什么竟然忽略了这个事实?我究竟错过了什么?

若是这种感觉是真实的,那么从现在开始我应该如何思考?如何判断?如何行事?

我还需要纠正的是什么?

好,我们继续说回主题,也就是元认知和我们这个专栏的关系,为什么说“一个人的财富创造能力最终也只与元认知能力有关,其他的都是附属因素”呢?答案很简单、很直接啊:

因为你的财富创造能力取决于你能给别人创造多少真正的价值。

你的创造,只有你自己觉得有价值的话,是几乎没有什么意义的,要有他人也认为有价值才可以,并且,“他人”的人数越多越好,“他人”的人数越多,你的创造价值越高——不是吗?

所以,我们《通往财富自由之路》这个订阅专栏的设计,背后的科学基础只不过是这样两个特别简单的事实:

第一,元认知能力是一个人可拥有的最重要的能力。

第二,元认知能力不仅可以习得,还可以通过刻意训练长期持续发展。

我们每周都在更新概念,而所谓的“更新”,之所以可以成功,就是因为读者的元认知能力被激活,于是,能够意识到自己原来的想法是那样的,意识到自己现在的想法是这样的,意识到这样和那样之间有怎样的不同;甚至,在对与错、好与坏、优与更优,差与更差之间反复选择的过程中,不断强化自己的元认知能力……

始发于微信公众号:神秘极客