Go

gRPC 2 kubernetes

Submitted by Lizhe on Sun, 12/27/2020 - 15:32

这里因为 为了更好的看出 被访问的目标pod,我对server端代码进行了一些修改,所以干脆就把所有代码再贴一遍

先看目录结构

20201225213517

/home/lizhe/works/grpc_helloworld_golang/pbfiles/Hi.proto

 

gRPC 1 helloworld go-lang

Submitted by Lizhe on Sat, 12/26/2020 - 05:37

 

运行起来的话大概是这样

 

20201225213517

从零开始

1. 先安装 golang

sudo apt install golang

添加环境变量

export GOROOT=/usr/lib/go
export GOPATH=$HOME/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOROOT:$GOPATH:$GOBIN

2. 安装git

sudo apt install git

3. 安装 grpc 依赖

go get -u github.com/golang/protobuf/protoc-gen-go

关于 Go 项目在docker环境中的部署问题

Submitted by Lizhe on Fri, 09/20/2019 - 05:17

这个问题来自于 Colin 最近的一个新项目,这个项目的技术选型符合我心目中的完美项目

如果把 Vue 换成 React 看起来就更舒服了。

他们打算使用下面这种结构

20190920012411

实际上这个模型又回到了之前我的实习生小盆友的学习项目中的问题,

Colin 他们也使用了 golang 镜像,和实习生一样,他们认为和java镜像一样,既然我使用golang,那么我需要一个golang运行环境

但是这里,golang 本身不是 动态语言或者混合语言(像java那样,既JIT又有class解释器),它实际上是一种现代 C 语言

Go 多线程 (5) RWLock 读写锁

Submitted by Lizhe on Mon, 04/01/2019 - 07:31

读写锁的读行为不会造成同步

但是写行为会同时禁止 读/写 操作

例子很简单, 懒得写了网上找了一个, 下面可以看到读的时候没有阻塞

 

package main

 

import (

    "sync"

    "time"

)

 

var m *sync.RWMutex

 

func main() {

    m = new(sync.RWMutex)

 

    // 多个同时读

    go read(1)

    go read(2)

 

    time.Sleep(2 * time.Second)

}

 

func read(i int) {

    println(i, "read start")

 

    m.RLock()

    println(i, "reading")

Go 单元测试

Submitted by Lizhe on Fri, 10/26/2018 - 05:57

 

 

package lizhe

 

import (

    "errors"

)

 

func Division(a, b float64) (float64, error) {

    if b == 0 {

        return 0, errors.New("除数不能为0")

    }

 

    return a / b, nil

}

 

 

package lizhe

Go 反射

Submitted by Lizhe on Fri, 10/26/2018 - 03:23

package main

 

import (

    "fmt"

    "reflect"

)

 

type User struct {

    Id int

    Name string

    Age int

}

 

func (u User) Hello() {

    fmt.Println("Hello world!")

}

func Info(o interface{}) {

    t := reflect.TypeOf(o)

    fmt.Println("Type:", t.Name())

 

Go 读写mysql

Submitted by Lizhe on Thu, 10/25/2018 - 10:00

package main

 

import (

    "database/sql"

    "log"

 

    _ "github.com/go-sql-driver/mysql"

)

 

func checkErr(err error) {

 

    if err != nil {

 

        //log.Println(err)

 

    }

 

}

 

func main() {

 

Go 多线程 (4) sync.Pool

Submitted by Lizhe on Tue, 10/23/2018 - 07:26

sync.Pool 用于缓存

1. pool 可以减少GC对高并发的性能影响
2. 提供了对象重用
3. 并发安全
4. 仅受限于内存大小
5. 减少GC
6. 对象被删除时不会通知
7. 动态扩容或者收缩

package main

 

import (

    "log"

    "sync"

)

 

func main() {

    var intPool = sync.Pool{}

    for i := 0; i < 5; i++ {

        intPool.Put(i)

    }

    log.Println(intPool.Get())