Go语言中文网 为您找到相关结果 1016

Golang使用lua脚本实现redis原子操作

# 目录 - [redis 调用Lua脚本](#redis 调用Lua脚本) *[EVAL命令](#EVAL命令) *[SCRIPT命令](#SCRIPT命令) - [redis+lua 实现评分排行榜实时更新](#redis+lua 实现评分排行榜实时更新) *[lua 脚本](#lua 脚本) *[ Golang调用redis+lua示例](#Golang调用redis+lua示例) *[ byte切片与string的转换优化](#byte切片与string的转换优化) *[ github链接](#github链接) - [参考文献](#参考文献) # redis 调用Lua脚本 ## EVAL命令 redis调用Lua脚本需要使用EVAL命令。 redis EVAL命令格式: ``` ...阅读全文

博文 2020-02-28 14:47:25 GrassInWind2019

Go语言:MD5加密

Golang的加密库都放在crypto目录下,其中MD5库在crypto/md5包中,该包主要提供了New()和Sum()函数。 package main import ( "crypto/md5" "encoding/hex" "fmt" ) func main() { data := []byte("Mdroid.cn") md5Ctx := md5.New() md5Ctx.Write(data) cipherStr := md5Ctx.Sum(nil) fmt.Println(cipherStr) fmt.Printf("%x\n", md5.Sum(data)) fmt.Printf("%x\n", cipherStr) fmt.Println(hex.EncodeToString...阅读全文

博文 2017-08-27 16:34:54 Mdroid

golang-数组和切片的区别

数组: 语法: //value := [数据长度]类型 {} arr := [1]string{"1"}// 声明并且赋值 arr = [1]string{}// 声明未赋值 arr[0]="1" 数组类型的值(以下简称数组)的长度是固定的数组的长度在声明它的时候就必须给定,并且在之后不会再改变。可以说,数组的长度是其类型的一部分(数组的容量永远等于其长度,都是不可变的) 切片: 语法: //value := []类型 {} // 创建长度容量都为0的切片 value :=[]string{}// []string{"1"} 长度容量为1的切片 value :=append(value,"1") //数据转切片 arr := [1]string{"1"} slice :=arr[:] // ...阅读全文

博文 2019-08-30 16:32:47 yylany

Go 语言切片(Slice)

定义切片 你可以声明一个未指定大小的数组来定义切片: var identifier []type 切片不需要说明长度。 或使用make()函数来创建切片: var slice1 []type = make([]type, len)也可以简写为slice1 := make([]type, len) 也可以指定容量,其中capacity为可选参数。 make([]T, length, capacity) 这里 len 是数组的长度并且也是切片的初始长度。 当leng增长,超出 capacity(容量)是,容量自动会扩大至两倍 空(nil)切片:一个切片在未初始化之前默认为 nil,长度为 0 len() 和 cap() 函数 切片是可索引的,并且可以由 len() 方法获取长度。切片提供了计算容...阅读全文

博文 2015-08-14 15:00:01 直冲

beego excel表格批量导入数据问题

想得到的是这种sql语句 [INSERT INTO `user` (`name`, `email`, `age`, `is_active`) VALUES (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?), (?, ?, ?, ?)] str是一个切片数组 现在代码得到的sql语句都是单条插入 求大神来解决 var info models.Info for num, strsclice := range str { if num == 0 { contin...阅读全文

Go语言学习之路(五)输入和输出

输出语句 1.输出方法 fmt.Println()//换行输出 fmt.Print()//不换行输出 fmt.Printf() 2.输入方法 数据间隔只能使用回车 数据间隔可以使用空格和回车 fmt输入输出(printf和scanf采用的数据类型格式化) Scan()函数和Scanf()方法关于字符型变量的问题: var a byte fmt.Scan(&a) fmt.Printf("%c",a) Scan接收字符型变量时只接收整型 并通过ASCII码值转换为字符型 var a byte fmt.Scanf("%d",&a) fmt.Printf("%c",a) Scanf %d只能接收整型,不能接收字符型 所以在输入字符型变量时应该使用fmt.Scanf(“%c”,&a) 格式 含义 %%...阅读全文

博文 2018-12-17 00:31:01 weixin_39640179

go的数组和切片

对于GO的数组和切片的初步了解, 切边是数组的一个指针,切片的初始化有三种:一种是通过make,即 slice := make([]int,5,10) 另一种是通过:=指向一个已经存在的数组。即 slice := []int {1,2,3,4,5,6} 切片的切片不可初始化超过原始切片的cap值,比如: sliceA := make([]int,5,10) sliceB := sliceA[:11] 这个是不行的,11超过了sliceA的cap值(10),会报运行时异常。 对切片的append,如果超过切片的cap值,编译器会扩充切片cap至原始切片cap+扩展后的切片len...阅读全文

博文 2014-10-10 17:00:06 canzyq

go语言那些“坑”之函数切片参数

函数的切片参数问题 输出结果: test变量容量足够容纳addElement函数添加的元素,所以在函数中ret地址没变。test及ret指向的地址应该是一样的,但函数调用完成后test值还是为空?为了解答这个问题先看下这个issue。 s和t属于不同变量,但append操作后s和t指向了同一个内存(s容量没有扩展),但s并没有打印1234,之所以会这样是因为append赋值给t后,t的长度变成了4,而s的没有变化。但s指向的内存其实还是存在[1,2,3,4]值的。这样再回头看函数参数为切片的问题就清楚了,应该是test的长度未变导致的。引用golang中切片slice的引用和地址问题Golang 切片与函数参数“陷阱...阅读全文

博文 2019-07-12 21:32:40 空格键_11aa

Go 的类型转换

有时候你可能需要将变量转换为其他类型。Golang 不容许随意处理这种转换,转换是由类型系统的强制保证的某些规则。在这篇文章中,我们将讨论哪些转换是可能的,哪些是不可能,以及什么时候进行转换是有价值的。 Go 是一门强类型语言。它在类型上是严格的,编译期间会报告类型错误。 ```go package main import "fmt" func main() { monster := 1 + "2" fmt.Printf("monster: %v\n", monster) } ``` ``` > go build # github.com/mlowicki/lab ./lab.go:6: cannot convert "2" to type int ./lab.go:6: invalid o...阅读全文

博文 2018-08-06 20:42:59 magichan

golang 相同构造体变量 数据合并

主要功能 根据 第一个 构造体变量字段为空的值 用第二个变量对应字段不为空的值 进行赋值 切记。golang 中切片类型是不可以进行对比的。 package main import ( "fmt" "reflect" ) type conf struct { S string I []int } func main() { c1 := conf{S: "xiaochuan"} c2 := conf{I: []int{1, 2, 3}} v1 := reflect.ValueOf(c1) //初始化为c1保管的具体值的v1 v2 := reflect.ValueOf(c2) //初始化为c2保管的具体值的v2 v1_elem := reflect.ValueOf(&c1).Elem() //返...阅读全文

博文 2016-11-02 10:00:03 liangguangchuan

Golang从入门到精通

课程概述Golang从入门到精通,本课程以学习Golang语言开发互联网产品为目标,从基础理论知识入手,详实地讲解Golang语言的开发方法与技巧,并通过大量的线上训练,带领同学们全面掌握服务端高并发、过载保护、水平扩展、服务降级、服务限流以及微服务等主流互联网产品的开发技术栈,快速达到大公司工作两年的技术水平。章节1:Golang环境搭建课时1课程介绍10:08课时2Go的发展历史02:08课时3Go开发环境搭建09:18课时4Go目录结构介绍04:13课时5hello world程序演示16:56课时6Go常用命令介绍09:36课时7Go语言特性13:25章节2:数据类型课时8标识符和关键字04:44课时9变量介绍08:19课时10常量介绍14:21课时11常量练习03:26课时12数据...阅读全文

博文 2019-03-25 09:34:40 瑛子_1791198045

golang 指针

在Go语言中,有几种东西可以代表“指针”。  1. uintptr类型:该类型实际上是一个数值类型,也是Go语言内建的数据类型之一。根据当前计算机架构的不同,它可以存储32位或64位的无符号整数,可以代表任何指针的位(bit)模式,也就是原始的内存地址。  2.unsafe.Pointer:可以代表任何指向可寻址的值的指针,同时它也是前面提到的指针值和uintptr值之间的桥梁。也就是说,通过它,我们可以在这两种值之上进行双向的转换。 问:Go语言中哪些值是不可寻址的? 答: 1.常量的值 const num = 123 //_ = &num // 常量不可寻址。 2.基本类型值的字面量 //_ = &(123) // 基本类型值的字面量不可寻址。 3.算术操作的结果值 //_ = &(12...阅读全文

博文 2018-10-03 09:34:40 one_zheng

Go 中的复合字面量

![](https://raw.githubusercontent.com/studygolang/gctt-images/master/composite-literal/1_TM61VTlvvL2YWtI6UUYLOg.png) 在源代码中字面量可以描述像数字,字符串,布尔等类型的固定值。Go 和 JavaScript、Python 语言一样,即便是复合类型(数组,字典,切片,结构体)也允许使用字面量。Golang 的复合字面量表达也很方便、简洁,使用单一语法即可实现。在 JavaScript 中它是这样的: ```javascript var numbers = [1, 2, 3, 4] var thing = {name: "Raspberry Pi", generatio...阅读全文

博文 2018-05-08 22:11:54 yiyulantian

golang实现Ringbuf

Ring buffer算法优点:高内存使用率,在缓冲buffer内存模型中,不太容易发生内存越界、悬空指针等 bug ,出了问题也容易在内存级别分析调试。做出来的系统容易保持健壮。 package main import ( "bytes" "fmt" ) type Ringbuf struct { buf []byte start, size int } func New(size int) *Ringbuf { return &Ringbuf{make([]byte, size), 0, 0} } func (r *Ringbuf) Write(b []byte) { for len(b) > 0 { start := (r.start + r.size) % len(r.buf) n ...阅读全文

博文 2015-10-20 23:00:12 webyh

golang sort.Slice

sort.Slice是golang提供的切片排序方法, 其中使用到了反射(reflect)包 241 // Slice sorts the provided slice given the provided less function. 242 // 243 // The sort is not guaranteed to be stable. For a stable sort, use 244 // SliceStable. 245 // 246 // The function panics if the provided interface is not a slice. 247 func Slice(slice interface{}, less func(i, j int) boo...阅读全文

博文 2018-06-26 20:34:49 frank3

golang之树的遍历

go语言在区块链编程中有巨大的优势,其中fabric和ethereum都是基于go语言编写的。为了能更好的学习区块链的底层技术,先将go的基础打好。 本篇文章使用golang来实现树的遍历 树的定义 package tree type Node struct { Val int Left *Node Right *Node } 深度优先遍历 深度优先遍历需要优先使用栈 栈的定义 type Stack struct { list *list.List } func NewStack() *Stack { list := list.New() return &Stack{list} } func (stack *Stack) Push(value interface{}) { stack.lis...阅读全文

博文 2018-11-18 14:34:42 菟潞寺沙弥

golang map排序

package main import ( "fmt" "sort" ) // 按map的key排序 func main() { params := make(map[string]interface{}) params["age"] = 23 params["name"] = "xxx" params["sex"] = 0 params["level"] = 1 // 1.去除所有的key var keys []string for k := range params{ keys = append(keys, k) } // 对字符串切片排序 sort.Strings(keys) fmt.Println(keys) // 打印key, val for _, k := range keys{...阅读全文

Golang code review comments 【译文】

翻译自:https://github.com/golang/go/wiki/CodeReviewComments 注释 注释应该是一段完整的语句 注释应该以所描述内容的名字开头,并且以句号结尾 声明空的切片 应该使用: var t []string, 而不是: t := []string{} 前者会避免内存分配,除非使用了append() 不要使用panic 对于普通的错误处理,不要使用panic,使用error和多返回值, 参考:https://golang.org/doc/effective_go.html#errors 错误字符串 错误字符串不应该大写(除非是专有名词或者缩写) 不要以符号结尾 错误处理 不要使用_去丢弃error. 当一个函数返回error,去检查并处理error,或...阅读全文

博文 2017-09-07 13:34:47 痕无落

Go语言基础变量定义及初始化

package main import "fmt" func main(){ //变量定义 var v1 int var v2 string var v3 [10] int //数组 var v4 [] int //数组切片 var v5 struct{ f int } var v6 *int //指针 var v7 map[string] int //key 为string value为int的map var v8 func (a int) int //变量初始化 var var1 int = 10 var var2 = 10 var var3 := 10 fmt.Println("变量初始化") fmt.Printf("var1=%d, var2=%d, var3=%d\n", var1...阅读全文

博文 2015-03-17 03:00:01 qifeng1991

Go Range 内部实现

文:Go Range Loop Internals Go 里的 range 循环用起来非常方便,但我总觉得它在不同情况下的表现有点神秘。现在看来我并不孤单: