Go
go strings.Builder
字符串拼接和strings.Buffer缺点 Go里面的字符串是常量,对字符串的修改会重新申请内存地址。虽然bytes.Buffer避免了字符串修改过程中的内存申请,但是最后从[]byte转成字符串时会重新内存申请。从Go 1.10开始,提供了性能更好的方法strings.Builder,与byte ......
go map
map内存模型 // A header for a Go map. type hmap struct { // 元素个数,调用 len(map) 时,直接返回此值 count int flags uint8 // buckets 的对数 log_2 B uint8 // overflow 的 buc ......
学的java,工作用的go?
学的java,找的java开发,进了公司却在使用go。 第一天让拉代码,我以为我拉的是java代码,没想到却是go。当时慌死了,我只听说过go,连hello world都没有go写过。既来之,则安之,我接下来就是装goland,配环境变量,好在代码跑起来了,这个项目使用go+Gin来进行开发,甚至连 ......
go context
使用场景 在协程之间传递上下文 context接口 type Context interface { // 返回绑定当前context的任务取消的截止时间 // 如果没有设定期限,将返回ok == false Deadline() (deadline time.Time, ok bool) // 绑 ......
go目录结构和交叉编译
环境变量 GOROOT:GO语言的安装路径GOPATH:项目目录GOBIN:执行go install go文件时,生成可执行文件的路径,通常设置为GOPATH/bin。 GOPATH目录结构 GOPATH/src目录下放源代码文件。GOPATH/pkg目录下放执行go install 目录名后生成的 ......
go单元测试显示测试用例代码覆盖率
执行单个目录所有测试用例并生成覆盖率 go test -gcflags=all=-l -coverprofile=$GOPATH/bin/c.out . go tool cover -html=$GOPATH/bin/c.out -o=$GOPATH/bin/tag.html 执行单个测试用例并生成 ......
go垃圾回收
三色标记法 三色标记法配合写屏障和辅助GC。1.初始状态所有对象都是白色。2.从根出发扫描,将引用的对象标记为灰色。3.分析灰色对象是否引用了其他对象,自身标记为黑色,将它引用的其他对象标为灰色4.重复步骤3,直到灰色对象队列为空。此时白色对象即为垃圾,进行回收。 写屏障:每一轮GC开始时会初始化屏 ......
GO协程
goroutine 协程本意是coroutine,go协程是goroutine。线程分为内核态线程(内核线程)和用户态线程(协程)。线程由CPU调度是抢占式的,协程由用户态调度是协作式的(主动让出才执行下一个)。 N:1(N个用户线程绑定1个内核线程) 例子:python的gevent优点:协程切换 ......
Go并发编程实战 第三章 并发编程综述
> 经过前两章的基本认识,终于开始并发编程了。 # 并发编程基础 ## 基本概念 1. 串行和并行程序:串行程序特指只能被顺序执行的指令列表,并发程序则是可以被并发执行的两个及以上的串行程序的综合体。 2. `并发和并行`: 并行是指两个或者多个事件在**同一时刻**发生;而并发是指两个或多个事件在 ......
说说 Go 语言的坑(二)
上一篇文章 [说说 Go 语言 for-range 的坑](https://imlht.com/archives/187/) 说的是 for-range 的,工作中,其实还是遇到蛮多奇奇怪怪的问题,这里也顺便整理了一下,就当作是续集:) 先继续看 for-range 的另一个坑: #### 下面代码 ......
go text模板
package installimport ( "bytes" "fmt" "strings" "text/template" "github.com/fanux/sealos/pkg/logger" "sigs.k8s.io/yaml")var ConfigType stringfunc setK ......
go学习笔记
# 包 go 由包组织(即一个文件夹,文件夹的名字对应包的名字,文件夹可以包含一个多个 go 源文件),每个源文件用`packge 包名`在开头声明 main 包:定义一个独立可执行程序,总是程序开始的地方 **包的导入** 通过`import 包名`或`import (多个包名)`来导入包 包名重 ......
go 服务端分层框架设计
框架分为四层。models,controllers,repositories,services 以User为例 1、controller示例 ``` package controllers import ( "appserver/services" "github.com/gin-gonic/gin ......
go 给一个切片,将其写入到一个单链表中
package main import "fmt" // 功能:实现一个单链表(给一个切片,将其写入到一个单链表中) type Node struct { Value int Next *Node } func create(slice []int) *Node { if len(slice) == ......
kafka-consumer.go
package consumer import ( "fmt" "sync" "github.com/Shopify/sarama" ) type CRead func() string func Run() { var wg sync.WaitGroup consumer, err := sara ......
kafka-producer.go
package producer import ( "fmt" "github.com/Shopify/sarama" ) type CRead func() string func Run(cRead CRead) { config := sarama.NewConfig() config.Pro ......
kafka-main.go
package main import ( "bufio" "kafka/consumer" "kafka/producer" "os" "strings" ) var inputReader *bufio.Reader func init() { inputReader = bufio.NewRe ......
【Go】基础
## 关于项目新建 ### 使用path新建 * 新建项目位置必须在go目录下 > 先查找gopath/src这个目录之下,在查找goroot/src这个目录之下,如果都没有则报错 ,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 # 前言 本文主要通过值传递和指针、字符串、数组、切片、集合、面向对象(封装、继承、抽象)和 ......
Go并发编程实战 第一章 初识Go语言
第一章基本上就是讲解Go的历史、如何安装GO、Go的基本概念和一些常用的命令。由于学习Go也有一段时间了,可以看出书中有一些概念其实不完全正确的,特别是gopath部分。 大概知识点如下: 1. 工作区的概念:早期Go确实建议把所有的工程代码放在`GOPATH`环境变量下,这个目录是你自己设置的,可 ......
Go 语言的 nil 能比较自己吗
## nil 是什么? 可以看看官方的描述,在 buildin/buildin.go 里: ```go // nil is a predeclared identifier representing the zero value for a // pointer, channel, func, in ......
Go并发编程学习
> 想起来还不是很熟悉Go的并发编程,趁现在有空学一下。找了一些资料,感觉也不是很好,最终选择看这本书(看到一些大佬推荐的) > 本章作为这个书的目录部分索引,会一直更新到这本书看完,算是立个flag吧。 > 2023-7-12: 更新第一章初识Go语言 # Go并发编程实战  func main() { //创建有重复数值的数组 a1 := []int{1, 2, 3, 1, 4, 5, 2} a2 := []string{"t1", "t2", "t1", "t3", "t5", "t3"} //创建m ......
Go语言中的性能测试
# 单元测试 测试单元的结果是否符合预期 ```Go //go_test.go import ( "fmt" "testing" ) func Add() int { fmt.Println("AAAAAAAAAAAAAA") return 5 } func Sub() int { fmt.Prin ......
go编写zabbix企业微信媒介脚本
```go package main import ( "bytes" "fmt" "io" "net/http" "os" "time" "github.com/bytedance/sonic" ) var ( subject, message, webHook, is_all, user_pho ......
go项目的打包部署
1.go项目在window下编译简易打包1).在windows下直接编译生成main.exe文件在项目main.go同级目录下执行以下命令go build main.go 2).将当前目录下的main.go打包成gotest.exe文件(在windows下可以直接执行)在项目main.go同级目录下 ......
go语言-不同类型转换为JSON格式数据
1.将结构体转换为JSON: package main import ( "encoding/json" "fmt" ) type Person struct { Name string Age int Email string } func main() { person := Person{Na ......
go generate命令简介
最近在研究[kratos](https://github.com/go-kratos/kratos)的使用,发现在`kratos run`之前会先运行`go generate ./...`命令。 这个命令之前没怎么用过,所以决定学习下该命令的用法。 `go generate`是Go语言中的一个命令, ......