golang
文章平均质量分 63
golang编程学习
OceanStar的学习笔记
这个作者很懒,什么都没留下…
展开
-
golang学习目录
入门原创 2021-08-22 14:25:22 · 252 阅读 · 2 评论 -
golang: Logrus实现日志打印
golang标准库的日志框架非常简单,仅仅提供了print,panic和fatal三个函数,对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持. 所以催生了很多第三方的日志库,但是在golang的世界里,没有一个日志库像slf4j那样在Java中具有绝对统治地位.golang中,流行的日志框架包括logrus、zap、zerolog、seelog等.logrus是目前Github上star数量最多的日志库,logrus的使用非常简单,与标准库log类似。转载 2023-06-27 14:38:58 · 1570 阅读 · 0 评论 -
golang:module requires Go 1.xx 解决之道,不升go
在使用多版本的golang的小伙伴,往往会遇到这个问题。本文就如何不升级 go 版本来解决该问题。转载 2023-05-10 14:00:35 · 1739 阅读 · 0 评论 -
golang:Golang utf8编码与utf16编码相互转换(string 和 []uint16互转)
【代码】golang:Golang utf8编码与utf16编码相互转换(string 和 []uint16互转)转载 2023-05-25 14:02:34 · 991 阅读 · 0 评论 -
golang:unsupported Scan, storing driver.Value type []uint8 into type *time.Time
连接数据库的时候,有的字段为TIMESTAMP类型。需要在DSN里面加上?转载 2023-05-15 19:03:19 · 639 阅读 · 0 评论 -
golang:ent实体框架
好烦,我就想自己使用自定义除了id字段以外的字段作为主键名!转载 2023-05-15 17:33:02 · 562 阅读 · 4 评论 -
golang:如何在proto3中用上golang对应的interface{}类型
首先,我希望所有golang中用于http请求响应的结构,都使用proto3来定义。麻烦的是,有的情况下某个字段的类型可能是动态的,对应的JSON类型可能是number/string/boolean/null中的其中一种。使用protoc生成代码后,发现这玩意儿完全没办法做json的encode/decode。理想的办法是让生成golang代码中的 user_input 成为 interface{} 类型。但如何才能让proto3生成golang的interface类型呢?转载 2023-05-12 15:23:57 · 1735 阅读 · 0 评论 -
golang:http.request
/ Headers that Request.Write 处理自身应跳过 var reqWriteExcludeHeader = map [ string ] bool {转载 2023-05-11 17:12:08 · 738 阅读 · 0 评论 -
golang:版本升级
命令查看go版本go version版本低于1.18,看来必须要升级版本了。转载 2023-05-10 14:48:15 · 844 阅读 · 5 评论 -
golang:centos使用unixODBC 连接sqlserver2008
# cat /etc/os-release NAME="CentOS Linux"VERSION="7 (Core)"ID="centos"ID_LIKE="rhel fedora"VERSION_ID="7"PRETTY_NAME="CentOS Linux 7 (Core)"ANSI_COLOR="0;31"CPE_NAME="cpe:/o:centos:centos:7"H...原创 2019-04-26 16:28:50 · 4097 阅读 · 1 评论 -
golang:heap
从这个接口可以看出,其继承了sort.Interface接口,那么sort.Interface的定义是什么呢?也就是说,我们要使用go标准库给我们提供的heap,那么必须自己实现这些接口定义的方法,需要实现的方法如下:Len() int实现了这五个方法的数据类型才能使用go标准库给我们提供的heap,下面简单示例为定义一个IntHeap类型,并实现上面五个方法。转载 2023-05-08 12:38:12 · 738 阅读 · 0 评论 -
golang:依赖注入库 - Wire
wire是由google开源的一个供go语言使用的注入依赖代码生成工具。它能够根据你的代码,生成相应的依赖注入go代码。与其他依赖注入工具不同,比如 Uber 的 Dig 和 Facebook 的 Inject,这 2 个工具都是使用反射实现的依赖注入,而且是运行时注入(runtime dependency injection)。wire 是编译代码时生成代码的依赖注入,是编译期间注入依赖代码(compile-time dependency injection)。转载 2023-04-13 19:44:25 · 632 阅读 · 0 评论 -
golang:go-zero之微服务如何拆分
微服务架构能够快速、频繁、可靠的交互大型,复杂的应用程序,通过业务拆分实现服务组件化,使用组件进行组合从而快速开发系统。转载 2020-01-20 13:41:20 · 385 阅读 · 0 评论 -
golang:etcd入门
etcd是CoreOS团队于2013年6月发起的开源项目,它的目标是构建一个高可用的分布式键值(key-value)数据库。etcd内部采用raft协议作为一致性算法,etcd基于Go语言实现。etcd项目地址:https://github.com/coreos/etcd/转载 2020-01-12 12:08:31 · 2161 阅读 · 0 评论 -
golang:Kratos 微服务框架 API 工程化指南
工程转载 2023-03-24 22:11:27 · 726 阅读 · 0 评论 -
golang:使用 buf 替代 protoc 自动生成 protobuf
buf 可以做 protoc 的替代品buf 效率比 protoc 更好buf 使用 yaml 文件,使用更清晰目前不支持 Windows,下面为 linux 演示官方文档:https://docs.buf.build/官方的BSR地址是https://buf.build/,我们可以https://buf.build/login页面进行注册登录。使用体验类似github。转载 2023-03-24 22:47:47 · 2725 阅读 · 2 评论 -
golang:kratos生成proto以及API编写
Debug分析源码代理子类的实现过程:断点执行到方法上时,我们可以发现注入的customerDao对象,本质上是通过JdkDynamicAopProxy生成的一个代理对象。代理对象中方法调用的分析当程序执行的时候,会通过JdkDynamicAopProxy的invoke方法,对customerDao对象生成动态代理对象。根据对Spring Data JPA介绍而知,要想进行f...转载 2020-01-17 16:43:56 · 1678 阅读 · 0 评论 -
golang:kratos项目搭建
准备基础工程创建maven的web工程1、new ---- 》 Maven Projetc----》选择 Create a simple project(skip archetype selection)2、在Artifact部分中:GroupId: com.atguigu.securityArtifact Id:securityPackaging: war3、发现项目出现了一个x...转载 2020-01-12 12:39:00 · 1237 阅读 · 1 评论 -
golang:go语言操作protobuf协议使用详解
下载地址: https://github.com/protocolbuffers/ProtoBuf/releases注意,不同的电脑系统安装包是不一样的:解压之后会出来两个文件夹子bin和include然后配置环境变量打开下面文件在最后添加再执行下面命令,然后重启。重启之后,检查时候成功安装protobuf-go插件执行完毕之后,去GOPATH路径下查看,一定会有protoc-gen-go文件。其环境变量已经在上边添加了,这里就不用再加了。iphone.proto内容为:进入pbfi转载 2019-04-04 18:28:27 · 1492 阅读 · 1 评论 -
golang:深入理解 Go Modules 的 go.mod 与 go.sum
流行的现代编程语言一般都提供依赖库管理工具,如 Java 的 Maven 、Python 的 PIP、Node.js 的 NPM 和 Rust 的 Cargo 等。Go 最为一门新生代语言,自然也有其自己的库管理方式。转载 2023-03-20 12:26:56 · 2280 阅读 · 0 评论 -
golang:在linux版本下安装go与JetBrains golang过程记录
1、下载Go语言SDK官网:https://golang.org/dl/如果被墙了,https://studygolang.com/dl,这里我下载的是:$ mv go1.12.4.linux-amd64.tar /usr/local/$ cd /usr/local/$ tar -xvf go1.12.4.linux-amd64.tar结果会在当前目录下出现一个go包...原创 2018-10-19 18:11:09 · 4121 阅读 · 1 评论 -
golang多线程之future
package mainimport ( "fmt" "sync" "time")// Completer用于获取未来的结果。仅仅用于接受type Completer <-chan interface{}// Future用于构建异步任务。 等这个任务完成之后,所以关心这个结果的任务[其他任务可能在干别的事情]都可以接受到消息。type Future struct { triggered bool item interface{} err error转载 2020-08-31 10:03:17 · 384 阅读 · 1 评论 -
golang之RPC学习
rpc什么是rpc我们知道Socket和HTTP采用的是类似"信息交换"模式,即客户端发送一条信息到服务端,然后(一般来说)服务器端都会返回一定的信息以表示响应。客户端和服务端之间约定了交互信息的格式,以便双方都能够解析交互所产生的信息。但是很多独立的应用并没有采用这种模式,而是采用类似常规的函数调用的方式来完成想要的功能。RPC就是想实现函数调用模式的网络化。客户端就像调用本地函数一样,然后客户端把这些参数打包之后通过网络传递到服务端,服务端解包到处理过程中执行,然后执行的结果反馈给客户端。RPC转载 2020-08-16 21:49:32 · 427 阅读 · 0 评论 -
golang:从0到1利用socket编程实现一个简单的http服务器
前置知识https://blog.csdn.net/zhizhengguan/article/details/108026066开始编程第一份代码package mainimport ( "fmt" "net")func accept_request_thread(conn net.Conn) { defer conn.Close() for { // 创建一个新切片, 用作保存数据的缓冲区 buf := make([]byte, 1024) n, err := co原创 2020-08-28 11:56:11 · 1015 阅读 · 0 评论 -
golang:socket编程详解
网络编程有两种:tcp socket编程,是网络编程的主流。之所以叫做tcp socket编程,是因为底层是基于tcpip协议的b/s结构的http编程,我们使用浏览器去访问服务器,使用的就是http协议,而http底层使用的依旧是tcp socket实现的socket编程socket的作用socket可以通过网络连接让多个进程建立通信并且相互传输数据,不管进程是不是在一个主机上。这意味这socket可以用来提供网络中不同计算机的多个应用程序的通信,可以用于单个计算机上的多个应用程序之间通信。转载 2020-08-16 00:21:07 · 7724 阅读 · 2 评论 -
Golang 任务队列策略 -- 读《JOB QUEUES IN GO》
Golang 在异步处理上有着上佳的表现。因为 goroutines 和 channels 是非常容易使用且有效的异步处理手段。下面我们一起来看一看 Golang 的简易任务队列转载 2020-07-15 13:13:09 · 734 阅读 · 0 评论 -
golang并发之sync包
在Go语言并发编程中,提倡**“使用通信共享内存,不要使用共享内存通信”**,而这个通信的媒介就是channel。 chan是线程安全的,不需要考虑数据冲突问题,面对并发问题,我们始终应该优先考虑使用通道,它是 first class 级别的,但是纵使有主角光环加持,通道也不是万能的,它也需要配角,这也是共享内存存在的价值,其他语言中主流的并发编程都是通过共享内存实现的,共享内存必然涉及并发过程中的共享数据冲突问题,而为了解决数据冲突问题,Go 语言沿袭了传统的并发编程解决方案 —— 锁机制,这些锁都位于.转载 2020-07-10 14:44:15 · 877 阅读 · 0 评论 -
字节序:Big Endian 和 Little Endian
字节序字节序,也就是字节的顺序,指的是多字节的数据在内存中的存放顺序。在几乎所有的机器上,多字节对象都被存储为连续的字节序列。例如:如果C/C++中的一个int型变量 a 的起始地址是&a = 0x100,那么 a 的四个字节将被存储在存储器的0x100, 0x101, 0x102, 0x103位置。根据整数 a 在连续的 4 byte 内存中的存储顺序,字节序被分为大端序(Big Endian) 与 小端序(Little Endian)两类。 然后就牵涉出两大CPU派系:Motorola转载 2020-08-08 23:28:32 · 7915 阅读 · 0 评论 -
golang测试
testing 方便进行 Go 包的自动化单元测试、基准测试net/http/httptest 提供测试 HTTP 的工具testing - 单元测试testing 为 Go 语言 package提供自动化测试的支持。通过 go test命令,能够自动执行如下形式的任何函数:func TestXxx(*testing.T)要编写一个新的测试套件,需要创建一个名称以 _test.go...转载 2020-03-18 15:49:55 · 190 阅读 · 0 评论 -
golang:实现凯撒密码的加密解密
package mainimport "fmt"// 参考 :https://blog.csdn.net/qq_33296108/article/details/85852919// https://studygolang.com/articles/18246/*1.大写字符A到Z的ASCII代码分别是065到090,字符加一,代码加一2.小写字符a到z的ASCII代码分别是0...原创 2020-02-27 17:34:57 · 789 阅读 · 0 评论 -
golang:1分钟实现“延迟消息”功能
一、缘起很多时候,业务有"在一段时间之后,完成一个工作任务"的需求例如:滴滴打车订单完成之后,如果用户一直不评价,48小时会将自动评价为5星一般来说怎么实现这类48小时之后自动评价为5星的需求呢?常见方案:启动一个cron定时任务,每小时跑一次,将完成时间超过48小时的订单取出,置为5星,并把评价状态置为已评价。假设订单表的结构为:t_order(oid, finish_time, st...转载 2019-05-26 14:33:22 · 2631 阅读 · 4 评论 -
golang:撒了盐的加密方法
也就是{ "keys": ["ctrl+shift+enter"], "command": "open_in_browser" }转载 2018-10-25 17:53:23 · 1300 阅读 · 0 评论 -
golang:channel的超时
基本语法通道声明和初始化我们可以通过chan关键字来声明通道类型变量var ch chan int // 声明一个通道类型变量 ch,并且通道中只能传递 int 类型数据我们还可以通过如下方式声明通道数组、切片、字典,以下声明方式表示 chs 中的元素都是 chan int 类型的通道:var chs [10]chan intvar chs []chan intvar chs map[string]chan int不过,实际编码时,我们更多使用的是下面这种快捷方式同时声明和初始化通道类转载 2020-09-03 14:25:21 · 1922 阅读 · 0 评论 -
golang:channel收发数据时的状态转换
接收元素怎么接收elem := <- ch如果当前通道中没有任何值,那么当前goroutine会被迫进入Gwaiting状态。什么时候唤醒:直到ch中有新的元素才会被唤醒ch通道被关闭时会里面结束, 并且elem会被赋予该通道元素类型的零值。elem, ok := <- ch如果当前通道中没有任何值,那么当前goroutine会被迫进入Gwaiting状态。什么时候唤醒:直到ch中有新的元素才会被唤醒, ok = truech通道被关闭时会里面结束, 并且转载 2020-09-04 18:10:19 · 312 阅读 · 0 评论 -
golang:使用通道发送数据和接收数据的特性
通道的特性Go语言中的通道(channel)是一种特殊的类型。在任何时候,同时只能有一个 goroutine 访问通道进行发送和获取数据。goroutine 间通过通道就可以通信。通道像一个传送带或者队列,总是遵循先入先出(First In First Out)的规则,保证收发数据的顺序。声明通道类型通道本身需要一个类型进行修饰,就像切片类型需要标识元素类型。通道的元素类型就是在其内部传输的数据类型,声明如下:var 通道变量 chan 通道类型通道类型:通道内的数据类型。通道变量:保存通转载 2021-08-24 16:26:26 · 2226 阅读 · 0 评论 -
golang:有缓存channel和无缓存channel的区别
goroutine首先我们来看线程,在golang里面也叫goroutine在读这篇文章之前,我们需要了解一下并发与并行。golang的线程是一种并发机制,而不是并行。它们之间的区别大家可以上网搜一下,网上有很多的介绍。下面我们先来看一个例子吧package mainimport( "fmt")func main(){ go fmt.Println("1") fmt.Pr...转载 2020-02-14 18:06:47 · 2603 阅读 · 0 评论 -
golang:channel的引入
go并发编程原理Go 语言的协程实现被称之为 goroutine,由 Go 运行时管理,在 Go 语言中通过协程实现并发编程非常简单:我们可以在一个处理进程中通过关键字 go 启用多个协程,然后在不同的协程中完成不同的子任务,这些用户在代码中创建和维护的协程本质上是用户级线程,Go 语言运行时会在底层通过调度器将用户级线程交给操作系统的系统级线程去处理,如果在运行过程中遇到某个 IO 操作而暂停运行,调度器会将用户级线程和系统级线程分离,以便让系统级线程去处理其他用户级线程,而当 IO 操作完成,需要恢复转载 2020-09-03 13:11:55 · 736 阅读 · 0 评论 -
golang:实现延迟消息原理与方法
原文:https://www.cnblogs.com/jkko123/p/7239420.html实现延迟消息最主要的两个结构:环形队列:通过golang中的数组实现,分成3600个slot。任务集合:通过map[key]*Task,每个slot一个map,map的值就是我们要执行的任务。原理图如下:package mainimport ( "fmt" "errors" "t...转载 2019-05-26 15:24:19 · 1710 阅读 · 3 评论 -
golang:获取协程ID,从此走上一条曲折的不归路
类似于其他语言的线程ID,C++当中,每个请求过来,开启一个单独的线程处理它,那么线程的ID是当前请求的唯一标识符。有了唯一标识符以后,就可以创建一个线程安全的全局map来管理每个请求的生命周期的变量。在go语言中,谷歌开发者不建议大家获取协程ID,主要是为了GC更好的工作,滥用协程ID会导致GC不能及时回收内存。如果一个第三方库使用了协程ID,那么使用该库的人将会莫名中招。package gomapimport ( "bytes" "fmt" "runtime" "strconv" "s转载 2020-08-09 11:26:45 · 3709 阅读 · 0 评论 -
golang:理解goroutine 和线程
要理解什么是goroutine,我们先来看看进程,线程以及协程之间的区别,这能帮助我们更好的理解goroutine**进程:**分配完整独立的地址空间,拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程的切换只发生在内核态,由操作系统调度线程: 和其它本进程的线程共享地址空间,拥有自己独立的栈和共享的堆,共享堆,不共享栈,线程的切换一般也由操作系统调度(标准线程是的)。**协程:**和线程类似,共享堆,不共享栈,协程的切换一般由程序员在代码中显式控制。进程和线程的切换主要依赖于时间片的控制,而协程的转载 2020-07-15 14:06:54 · 892 阅读 · 1 评论