![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang
稻壳doke
一位不愿意做crud程序员的程序员
展开
-
go string类型方法的性能
今天在测试性能时,需要拼接一段字符串,发现string类型用 + 号拼接会比将字符串装进 切片中,再用strings.join()方法生成需要的字符串慢很多倍。string是一个不可变类型,每次都会创建一个新的 string 类型的值,然后重新赋值给这个变量。最快的应该是使用strings.Builder来构建,因为直接通过指针来操作了。附上源码// String returns the accumulated string.func (b *Builder) String() string {原创 2021-11-15 18:24:10 · 325 阅读 · 0 评论 -
golang超过uint64大数运算
uint64最大是18446744073709551615超过这个数可以用以下方法运算package mainimport ( "bufio" "os" "fmt" "strings")func multi(str1,str2 string) (result string) { if len(str1) ==0 && len(str2) ==0 { result = "0" return } var index1 = len(str1) - 1 va原创 2021-10-29 18:34:43 · 1562 阅读 · 0 评论 -
golang参数校验
在web开发过程中,我们经常需要校验前端传过来的值是否合法,这时可以用validator进行校验这里用到的是tag,像这样:type User struct { Name string `json:"name" validate:"min=0,max=35"` Age unit8 `json:"age" validate:"lte=90,gte=0"`}标记之间特殊符号说明逗号( ,):把多个验证标记隔开。注意:隔开逗号之间不能有空格, validate:“lt=0,gt原创 2021-10-22 10:54:02 · 2173 阅读 · 0 评论 -
go封装的日志工具
package loggerimport ( "fmt" "io" "log" "os" "runtime" "time")var logger *log.Loggertype LogMessage struct { file string line int message interface{} msgType string}const ( DEFAULT_DIR string = "log/" DEFAULT_PREFIX原创 2021-07-14 09:44:18 · 142 阅读 · 0 评论 -
【go】冒泡排序
package mainimport "fmt"func bubbleSort(arr *[5]int) { fmt.Println("排序前:", (*arr)) for i := 0; i < len(*arr)-1; i++ { for j := 0; j < len(*arr)-1-i; j++ { if (*arr)[j] > (*arr)[j+1] { (*arr)[j], (*arr)[j+1] = (*arr)[j+1], (*arr)[j]原创 2021-04-19 18:42:00 · 125 阅读 · 0 评论 -
go的内联优化
先说一下什么是内联吧。内联,就是将一个函数调用原地展开,替换成这个函数的实现。通俗易懂的解释就是将函数的调用转换为一个函数实现。这样做会增加编译后二进制文件的大小,但它可以提高程序的性能。那么Go语言中,什么样的函数可以被内联呢?我们一起来看。规则让我们从一个示例开始。下面这个程序的源码,分别编写在两个文件中,作用是对一组数字进行加或减:package mainfunc main() { n := []float32{120.4, -46.7, 32.50, 34.65, -67.45}原创 2021-04-19 10:03:47 · 580 阅读 · 1 评论 -
golang导出excel
后端写法func CapitalFlowExport(c *gin.Context) { file := xlsx.NewFile() // 这中间自己写业务逻辑生成excel表 // 我用的是 "github.com/tealeg/xlsx" 这个框架 v1.0.0 版本 c.Header("responseType", "blob") c.Header("Content-Disposition", "filename=excel名称.xlsx") c.Header("Content-Ty原创 2021-04-15 18:23:57 · 788 阅读 · 0 评论 -
go交替打印数字和字符
package mainimport "fmt"func main() { A := make(chan bool,1) B := make(chan bool) Exit := make(chan bool) go func() { s := []int{1, 2, 3, 4} for i := 0; i < len(s) ; i++ { if ok := <-A; ok { fmt.Println("A:", s[i]) B <- tru原创 2021-03-28 10:16:26 · 294 阅读 · 0 评论 -
go的GMP模型M、P的数量
GMP模型的简介G:goroutine 协程P:processor 处理器M:thread 内核线程一、P的数量问题:在程序中通过runtime.GOMAXPROCS() 来设置二、M的数量问题:1、Go语⾔本身是限定M的最⼤量是100002、runtime/debug包中的SetMaxThreads函数来设置3、有⼀个M阻塞,会创建⼀个新的M4、如果有M空闲,那么就会回收或者睡眠...原创 2021-03-27 17:41:13 · 2727 阅读 · 0 评论 -
Go语言中函数new与make的使用和区别
变量的声明var i intvar s string变量的声明我们可以通过var关键字,然后就可以在程序中使用。当我们不指定变量的默认值时,这些变量的默认值是他们的零值,比如int类型的零值是0,string类型的零值是"",引用类型的零值是nil。对于例子中的两种类型的声明,我们可以直接使用,对其进行赋值输出。但是如果我们换成引用类型呢?package mainimport ( "fmt")func main() { var i *int *i=10 fmt.Println(*i原创 2021-03-27 16:40:44 · 121 阅读 · 0 评论 -
【go】切片(slice)
1.切片的底层实现:type slice struct { array unsafe.Pointer //数组指针 len int //切片长度 cap int //切片容量}声明slice后,此时该slice还未被分配空间,但是可以用append插入数据,append操作会自动给slice扩容 var slice []int //slice[0] = 1 //panic: runtime error: index out of range s原创 2021-03-08 14:08:19 · 57 阅读 · 0 评论