Go
文章平均质量分 89
IM魂影
什么都懂一点点,奔向全栈的路上!
展开
-
Go性能调优-pprof
在计算机性能调试领域里,profiling 是指对应用程序的画像,画像就是应用程序使用 CPU 和内存的情况。 Go语言是一个对性能特别看重的语言,因此语言中自带了 profiling 的库,这篇文章就要讲解怎么在 golang 中做 profiling。Go性能优化Go语言项目中的性能优化主要有以下几个方面:CPU profile:报告程序的 CPU 使用情况,按照一定频率去采集应用程序在 CPU 和寄存器上面的数据Memory Profile(Heap Profile):报告程序的内存使用情况原创 2021-02-09 11:00:12 · 5463 阅读 · 3 评论 -
Go语言标准库flag基本使用
Go语言内置的flag包实现了命令行参数的解析,flag包使得开发命令行工具更为简单。os.Args如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args来获取命令行参数。package mainimport ( "fmt" "os")//os.Args demofunc main() { //os.Args是一个[]string if len(os.Args) > 0 { for index, arg := range os.Args {转载 2021-02-09 10:22:54 · 432 阅读 · 0 评论 -
B站微服务框架Kratos详细教程(7)- 数据库
开始使用由于kratos使用了wire依赖注入框架,开始使用前,建议先了解相关教程:依赖注入wire使用详解配置打开配置文件configs/mysql.toml,修改为自己的服务器配置:[Client] addr = "127.0.0.1:3306" dsn = "{user}:{password}@tcp(127.0.0.1:3306)/{database}?timeout=1s&readTimeout=1s&writeTimeout=1s&parseTime=true原创 2020-12-16 15:34:44 · 22962 阅读 · 18 评论 -
Golang依赖注入框架wire使用详解
What is wire?wire是google开源的依赖注入框架。或者引用官方的话来说:“Wire is a code generation tool that automates connecting components using dependency injection.”。官方地址:https://github.com/google/wireWhy wire?除了wire,Go的依赖注入框架还有Uber的dig和Facebook的inject,它们都是使用反射机制来实现运行时依赖注入(r转载 2020-09-24 16:23:02 · 6563 阅读 · 3 评论 -
B站微服务框架Kratos详细教程(6)- 服务发现
安装cd $GOPATH/srcgit clone https://github.com/bilibili/discovery.gitcd discovery/cmd/discoverygo build启动discovery服务./discovery -conf discovery-example.toml#windowsdiscovery.exe -conf discovery-example.toml启动成功F:\Go\wwwroot\src\discovery\cmd\disc原创 2020-09-17 13:22:35 · 2467 阅读 · 3 评论 -
B站微服务框架Kratos详细教程(5)- gRPC
简介kratos的grpc框架 不是直接使用的google的grpc,http也是对grpc接口做了封装(上一节我们就学习了使用pb生成http相关接口)。官方原文:GRPC Warden:基于官方gRPC开发,集成discovery服务发现,并融合P2C负载均衡;快速开始这次我们需要新建2个项目,用于展示RCP的相互调用,由于都是可以调用对方提供的服务,所以两个服务都可以作为客户端和服务端。新建项目(服务1):kratos new rpcserver1 #这里不指定创建类型,项目会同事原创 2020-09-10 18:33:32 · 4649 阅读 · 3 评论 -
B站微服务框架Kratos详细教程(4)- Protobuf
准备基于proto文件可以快速生成bm框架对应的代码,提前需要准备以下工作:安装kratos tool protoc工具,请看kratos工具编写proto文件,示例可参考kratos-demo内proto文件创建新项目kratos new pbdemo --http查看项目文件pbdemo/api/api.proto:// 定义项目 API 的 proto 文件 可以同时描述 gRPC 和 HTTP API// protobuf 文件参考:// - https://develop原创 2020-09-09 14:44:26 · 2986 阅读 · 0 评论 -
B站微服务框架Kratos详细教程(3)- 中间件
背景基于bm的handler机制,可以自定义很多middleware(中间件)进行通用的业务处理,比如用户登录鉴权。接下来就以鉴权为例,说明middleware的写法和用法。自定义中间件middleware本质上就是一个handler,接口和方法声明如下代码:// Handler responds to an HTTP request.type Handler interface { ServeHTTP(c *Context)}// HandlerFunc http request ha原创 2020-09-08 17:09:56 · 3042 阅读 · 0 评论 -
B站微服务框架Kratos详细教程(2)- HTTP服务
背景在像微服务这样的分布式架构中,经常会有一些需求需要你调用多个服务,但是还需要确保服务的安全性、统一化每次的 请求日志或者追踪用户完整的行为等等。你可能需要一个框架来帮助你实现这些功能。比如说帮你在一些关键路径的请求上配置必要的鉴权 或超时策略。那样服务间的调用会被多层中间件所过滤并检查,确保整体服务的稳定性。设计目标性能优异,不应该掺杂太多业务逻辑的成分方便开发使用,开发对接的成本应该尽可能地小后续鉴权、认证等业务逻辑的模块应该可以通过业务模块的开发接入该框架内默认配置已经是 produ原创 2020-09-07 21:54:49 · 5648 阅读 · 2 评论 -
B站微服务框架Kratos详细教程(1)- 安装搭建
KratosKratos是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具。名字来源于:《战神》游戏以希腊神话为背景,讲述由凡人成为战神的奎托斯(Kratos)成为战神并展开弑神屠杀的冒 险历程。快速开始快速开始前,首先需要安装Go环境:Go version>=1.13CentOS Go环境搭建,Windows自行百度哈设置代理环境变量,提高下载速度。注意GO1.13及之后支持direct的写法go env -w GOPROXY=https://gopro原创 2020-09-07 17:12:26 · 9905 阅读 · 2 评论 -
Go Modules包管理工具使用详解
从Go 1.11开始, 引入了官方包(package)依赖管理工具 go mod。之前Golang 主要依靠vendor和GOPATH来管理依赖库,vendor相对主流,但现在官方更推荐使用go mod。Go 1.12 会删除对 GOPATH 的支持,go get 命令也会变成只能获取模块,不能像现在这样直接获取一个裸包。使用环境变量 GO111MODULE 开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是 auto。GO111MODULE=off 无模块支持,go 会从 GOPA原创 2020-09-05 16:49:28 · 1271 阅读 · 0 评论 -
CentOS 7安装Protobuf
GitHub下载最新版的,可能有些框架不支持最新版,注意下载自己需要的版本下载地址:https://github.com/protocolbuffers/protobuf/releases下载wget https://github.com/protocolbuffers/protobuf/releases/download/v3.13.0/protobuf-all-3.13.0.tar.gz解压tar -zxvf protobuf-all-3.13.0.tar.gz编译安装./conf原创 2020-09-03 22:12:57 · 6191 阅读 · 0 评论 -
Centos Go环境搭建
标准官网:https://golang.org/ 需要墙镜像官网:https://golang.google.cn/dl/ 【国内推荐】1、下载文件wget https://golang.google.cn/dl/go1.14.7.linux-amd64.tar.gz2、解压文件到 /usr/local如果之前已经安装过go的版本,先清空下go下面src,不然可能会报一些previous declaration at /usr/local/go/src/runtime/internal/atom原创 2020-09-02 11:15:32 · 699 阅读 · 0 评论 -
Go编程入门详细例子-TCP
服务器package mainimport ( "fmt" "net" //做网络socket开发时,net包含有我们需要所有的方法和函数 _"io")func process(conn net.Conn) { //这里我们循环的接收客户端发送的数据 defer conn.Close() //关闭conn for { //创建一个新的切片 buf := make(...原创 2020-05-06 11:25:20 · 362 阅读 · 0 评论 -
Go编程入门详细例子-反射
反射入门package mainimport ( "reflect" "fmt")//专门演示反射func reflectTest01(b interface{}) { //通过反射获取的传入的变量的 type , kind, 值 //1. 先获取到 reflect.Type rTyp := reflect.TypeOf(b) fmt.Println("rType=",...原创 2020-05-05 18:33:10 · 857 阅读 · 0 评论 -
Go编程入门详细例子-协程/管道
协程package mainimport ( "fmt" "strconv" "time")// 在主线程(可以理解成进程)中,开启一个goroutine, 该协程每隔1秒输出 "hello,world"// 在主线程中也每隔一秒输出"hello,golang", 输出10次后,退出程序// 要求主线程和goroutine同时执行//编写一个函数,每隔1秒输出 "hello...原创 2020-05-05 15:06:59 · 456 阅读 · 0 评论 -
Go编程入门详细例子-面向对象
结构体package mainimport ( "fmt")//定义一个Cat结构体,将Cat的各个字段/属性信息,放入到Cat结构体进行管理type Cat struct { Name string Age int Color string Hobby string Scores [3]int // 字段是数组...}func main() { // 张...原创 2020-04-26 21:51:27 · 554 阅读 · 0 评论 -
Go编程入门详细例子-基础
变量 //golang的变量使用方式1 //第一种:指定变量类型,声明后若不赋值,使用默认值 // int 的默认值是0 , 其它数据类型的默认值后面马上介绍 var i int fmt.Println("i=", i) //第二种:根据值自行判定变量类型(类型推导) var num = 10.11 fmt.Println("num=", num) //第三种:省略var...原创 2020-04-26 12:50:20 · 1135 阅读 · 0 评论 -
网游服务端架构
最近二十年以来,IT行业发展之迅猛。计算机也从最开始的“毒害青少年的罪魁祸首”变成了各行各业都离不开的工具。在这个过程中,网络游戏也变得容易让人接受了,再也不像二十年前一样,如过街老鼠,人人喊打。现在的游戏已经是几乎下到幼儿园上到养老院的居家旅行必备良品。因此,从技术层面来说,现在的网络游戏也面领着用户量激增、业务逻辑越来越复杂、需求频繁变化等种种问题。所以,对于一款网游来说,拥有一套高承载、稳...转载 2020-04-24 16:11:55 · 1274 阅读 · 0 评论 -
游戏服务器架构设计整理
一个大型的网落游戏服务器应该包含几个模块:网络通讯,业务逻辑,数据存储,守护监控(不是必须),其中业务逻辑可能根据具体需要,又划分为好几个子模块。这里说的模块可以指一个进程,或者一个线程方式存在,本质上就是一些类的封装。对于服务器的并发性,要么采用单进程多线程,要么采用多进程单线程的方式,说说两种方式的优缺点:一、单进程多线程的服务器设计模式,只有一个进程,但一个进程包好多个线程:网络通讯...转载 2020-04-24 15:43:03 · 1065 阅读 · 0 评论 -
Go游戏服务端框架从零搭建(一)— 架构设计
本教程以Go语言分区游戏服务端框架搭建为例。Go语言是Google开发的一种静态强类型、编译型、并发型、具有垃圾回收功能的编程语言。语法上近似C语言,支持接口、可通过struct包含另一个struct方式实现继承等面向对象的概念。性能上媲美C/C++,相比C/C++更健壮,更易开发并发程序。我以前也写C++服务端,接触Go后,更倾向用Go做游戏服务端开发。所谓分区游戏,指游戏将分为很多个区,不...转载 2020-04-21 13:52:41 · 4259 阅读 · 1 评论 -
CentOS 安装Golang开发环境
方法一:使用二进制文件安装 (推荐)1、下载二进制文件:wget https://storage.googleapis.com/golang/go1.7.3.linux-amd64.tar.gz2、解压并创建工作目录:tar -zxf go1.7.3.linux-amd64.tar.gz -C /usr/local/mkdir /Golang3、设置环境变量:在 /e...转载 2018-04-02 15:12:43 · 609 阅读 · 0 评论 -
Golang动态加载方案踩坑记
Blog的high玩页,准备采用插件的方式完成,就需要能够本地编写插件代码,然后上传到服务端编译(也可以选择不编译),然后做成插件的方式放到服务端,后续有点击的时候,才会加载到内存中,访问完毕自动卸载。这样有几个好处:比较省内存,有的插件比较巨大,比如后续介绍的搭建的tensorfow深度平台,会占用大量的内存,所以不可能静态加载。 不会和Blog的代码有重叠,blog是blog、插件是插件...转载 2018-04-02 18:43:23 · 10262 阅读 · 1 评论 -
golang以插件的方式加载动态库
环境 系统: linux (别问为什么,因为windows下golang不支持动态库) golang版本: 1.5 以上支持动态库,1.8以上支持plugin插件代码 插件代码跟普通的golang模块代码没啥差别,主要是package必须是 main。下面是一段简易的插件代码//testplugin.gopackage mainimport ( "fmt")...转载 2018-04-02 18:49:44 · 5735 阅读 · 0 评论 -
Linux下编译运行Go程序
编译go build test.go 指定输出文件go build -o mygameserver修改权限命令chmod 777 程序名称后台运行的命令nohup ./程序名 & 如果要关闭程序,可以使用命令”ps” 查看后台程序的pid,然后使用“kill 程序pid”命令,关闭程序比如程序名为test,可以用如下命令查询 ps aux|gre...转载 2018-05-30 17:30:20 · 28115 阅读 · 0 评论 -
Go语言学习之encoding/json包
生命不止,继续go go go !!!json json大家都不陌生: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript 规范的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并...转载 2018-07-06 11:18:43 · 771 阅读 · 0 评论 -
PHP中使用gRPC客户端
因为工作需要使用gRPC,本人使用的是windows10,不过linux的操作流程基本一样。直接进入主题,分为了几部分1、下载Protoc下载地址:https://github.com/google/protobuf/releases这里采用的二进制文件,选择对应的平台,下载https://github.com/protocolbuffers/protobuf/releases/down...转载 2019-05-23 16:30:14 · 9817 阅读 · 0 评论 -
go import用法
import “fmt”最常用的一种形式import “./test”导入同一目录下test包中的内容import f “fmt”导入fmt,并给他启别名fimport . “fmt”,将fmt启用别名”.”,这样就可以直接使用其内容,而不用再添加fmt,如fmt.Println可以直接写成Printlnimport _ “fmt” 表示不使用该包,而是只是使用该包的init函数...转载 2018-03-10 19:30:59 · 4537 阅读 · 0 评论