go语言

Beego-Go语言在开发过程遇到一些小问题汇总

☆樱花仙子☆ 提交于 2019-12-18 10:13:40
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在开发过程中经常会遇见一些问题,现把汇总和解决方法记录一下。 1、session设置的问题 在设置session的时候,有整型,有字符串类型,在连接的时候要用到: fmt.Sprintf() + 连接字符串,不格式一下,直接拼接会报错 this.SetSession("userLogin", fmt.Sprintf("%d", users.Id)+"||"+users.Username+"||"+users.Avatar) 2、session获取问题 在设置好session后,获取的是通过 this.GetSession("userLogin") 如果userLogin的值是整型的话,不会报错;如果按上面的(第一条),整型与字符串拼接,会报错 可以采用: this.GetSession("userLogin").(string) .(string)有多种类型,如果获取session报错的时候,根据自己的实际情况换成.(int)等 在非Controller中操作Session import ( "github.com/astaxie/beego/context" ) var FilterAdmin = func(ctx *context.Context) { ctx.Input.CruSession.Get(

go语言基本运算符

不问归期 提交于 2019-12-18 09:31:02
Go语言基础之运算符 运算符用于在程序运行时执行数学或逻辑运算。 运算符 Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 算数运算符 运算符 描述 + 相加 - 相减 * 相乘 / 相除 % 求余 注意: ++ (自增)和 -- (自减)在Go语言中是单独的语句,并不是运算符。 关系运算符 运算符 描述 == 检查两个值是否相等,如果相等返回 True 否则返回 False。 != 检查两个值是否不相等,如果不相等返回 True 否则返回 False。 > 检查左边值是否大于右边值,如果是返回 True 否则返回 False。 >= 检查左边值是否大于等于右边值,如果是返回 True 否则返回 False。 < 检查左边值是否小于右边值,如果是返回 True 否则返回 False。 <= 检查左边值是否小于等于右边值,如果是返回 True 否则返回 False。 逻辑运算符 运算符 描述 && 逻辑 AND 运算符。 如果两边的操作数都是 True,则为 True,否则为 False。 || 逻辑 OR 运算符。 如果两边的操作数有一个 True,则为 True,否则为 False。 ! 逻辑 NOT 运算符。 如果条件为 True,则为 False,否则为 True。 位运算符 位运算符对整数在内存中的二进制位进行操作。 运算符 描述 &

Go语言 进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿

独自空忆成欢 提交于 2019-12-18 03:46:03
原文: http://www.cnblogs.com/shenguanpu/archive/2013/05/05/3060616.html 电话面试被问到go的协程,曾经的军伟也问到过我协程。虽然用python时候在Eurasia和eventlet里了解过协程,但自己对协程的概念也就是轻量级线程,还有一个很通俗的红绿灯说法:线程要守规则,协程看到红灯但是没有车仍可以通行。现在总结各个资料,从个人理解上说明下 进程 线程 轻量级进程 协程 go中的goroutine 那些事儿。 一、进程 操作系统中最核心的概念是进程,分布式系统中最重要的问题是进程间通信。 进程 是“程序执行的一个实例” ,担当分配系统资源的实体。进程创建必须分配一个完整的独立地址空间。 进程切换 只发生在内核态,两步:1 切换页全局目录以安装一个新的地址空间 2 切换内核态堆栈和硬件上下文。 另一种说法类似:1 保存CPU环境(寄存器值、程序计数器、堆栈指针)2修改内存管理单元MMU的寄存器 3 转换后备缓冲器TLB中的地址转换缓存内容标记为无效。 二、线程 书中的定义:线程是进程的一个执行流,独立执行它自己的程序代码。 维基百科: 线程 ( 英语 : thread )是 操作系统 能够进行运算 调度 的最小单位。 线程上下文一般只包含CPU上下文及其他的线程管理信息

Let's go! (Ubuntu下搭建Go语言环境)

人走茶凉 提交于 2019-12-18 01:15:21
自2009年Go语言发布以来,我一直在关注Go语言,如今Go语言已经发展到1.2版本,而且也收到越来越多的人关注这门语言。Go语言设计的目的就是为了解决执行数度快但是编译数度并不理想(如C++)以及编译速度快但执行效率不佳(.NET、Java),或者开发难度低但执行速度一般的动态语言这一问题。所以说,Go语言的特点是:快速编译,高效执行,易于开发。 好了,跳过那些框框条条的craps, 让我们直接先从Go语言的环境搭建开始,由于最近偏爱Ubuntu,在加上作为一门开源语言,在Linux上从源代码开始搭建环境更让人觉得有趣味性。 当然,如果你需要快速的搭建环境,也可以直接参考官方文档:http://golang.org/doc/install.html。考虑到官方文档已经十分详细,这里我就不再一一阐述了。 1. 设置Go环境变量 打开终端,输入命令: export GOROOT=$HOME/goexport PATH=$GOROOT/bin:$PATH 当然,你需要设置项目的目录 export GOPATH=$HOME/Applications/Go 2. 安装C工具 由于Go的工具链是用C语言编写的, 因此在安装Go之前序言安装相关的C工具。执行一下命令: sudo apt-get install bison ed gawk gcc libc6-dev make 3.

win10安装go环境+goland

浪尽此生 提交于 2019-12-17 20:23:32
1. go语言相关 ① go语言环境的配置 写的非常完整的博客: win10安装go环境 自己的改动: GOPATH 自己创造的一个目录: D:\GOPATH ,还在这个目录下创建了src、bin、pkg三个子目录 GOROOT 安装时选择的是: D:\GO path中写了 GOROOT 和 GOPATH 的bin目录: %GOPATH%\bin 、 %GOROOT%\bin 。 打开命令提示符,输入以下命令验证go环境安装是否成功 通过 go version 命令 通过 go env 命令: ② 使用goland进行go语言开发 官网下载goland: https://www.jetbrains.com/go/ 下载速度超级慢,百度云盘分享: https://pan.baidu.com/s/1-QrLhWMLiIaIB7H8L9rvrg ,提取码: ipyd 按照安装提示,一直next,然后通过学生邮箱实现免费使用 新建go工程,发现已经自动将其放在了 GOPATH 的src目录下,但是需要配置 GOROOT ,点击加号 --> 选择local --> 选择go的安装目录,完成添加! ③ 创建简单的go工程 新建go文件,注意要选择 simple application ,创建的go文件才能运行 输入以下内容: package main import "fmt" func

go语言之并发编程 channel

[亡魂溺海] 提交于 2019-12-17 20:16:35
前面介绍了goroutine的用法,如果有多个goroutine的话相互之间是如何传递数据和通信的呢。在C语言或者JAVA中,传输的方法包括共享内存,管道,信号。而在Go语言中,有了更方便的方法,就是channel。在同一时刻,仅有一个goroutine能向一个通道发送元素值,同时也仅有一个goroutine能从它那里接收元素值。在通道中,各个元素值都是严格按照发送到此的先后顺序排列的,最早被发送到通道的元素会最新被接收。因此通道相当于一个FIFO的队列。而且通道的元素也具有原子性,是不可被分割的。通道中的每一个元素值都只能被某一个goroutine接收,已被接收的的元素值会立刻从通道中删除。 channel的类型表示法:采用chan关键字 type intchan chan int var intchan chan int 上面两种声明表示一个chan int类型的变量。初始化后,变量intchan就可以用来传递int类型的元素值了。那么如何从通道中发送数据以及接收数据呢。Channel中采用<- 以及->符号 <- intchan就表示从intchan中发送一个数据。intchan <- 就表示intchan接收一个数据 初始化通道 make(chan int,10) 这个表达式初始化了一个通道类型的值,传递给make函数的第一个参数表明

Go语言反射之反射调用

大憨熊 提交于 2019-12-17 20:12:12
## 1 概述 利用反射,不仅可以获取信息,还可以创建实例,执行函数和方法。就是反射代理执行。 <!-- more --> ## 2 创建实例 创建实例的前提是具有 `reflect.Type` 对象,基于此创建实例。使用 `reflect.TypeOf()` 函数,可以获取得到某类型的 `reflect.Type` 对象,演示如下: ```go typeStu := reflect.TypeOf(Stu{}) s := reflect.New(typeStu) s.Elem().FieldByName("Name").SetString("Hank") // 利用反射设置结构体字段值 fmt.Println(s.Elem().FieldByName("Name").String()) // Hank ``` 我们创建了实例,一直都是通过反射的方式操作的。 ## 3 调用函数 如果值反射对象 `reflect.Value` 反射的是函数时,可以通过 `reflect.Value` 调用该函数。使用反射调用函数时,需要将参数使用反射值对象的切片 `[]reflect.Value` 构造后传入 `Call()` 方法中传参。调用完成时,函数的返回值通过 `[]reflect.Value` 返回。 演示如下: ```go func fn(p1, p2 int) int { return

Golang/Go语言/Go IDE/Go windows环境搭建/Go自动提示编译器/GoSublime

只谈情不闲聊 提交于 2019-12-17 05:30:54
Go是Google开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。   罗伯特·格瑞史莫(Robert Griesemer),罗勃·派克(Rob Pike)及肯·汤普逊于2007年9月开始设计Go语言,Go语言是基于Inferno操作系统所开发的。Go语言于2009年11月正式宣布推出,并在Linux及Mac OS X平台上进行了实现.  GO语言吉祥物,很可爱吧。 Go语言的hello world!代码: [java] view plain copy print ? package main import "fmt" func main() { fmt.Println( "Hello, 世界") } package main import "fmt" func main() { fmt.Println("Hello, 世界") } 接下来为大家带来,Go开发环境的安装。   首先是 安装Go ,这里有很详细的安装说明, http://code.google.com/p/golang-china/wiki/Install 或者 http://golang.org/doc/install 下面我们在window下面安装,google有提供win安装包,对于新手还是非常简单的! https://code.google.com/p/go/downloads/list 直接下一步.

go语言,struct and interface(golang)(二)

為{幸葍}努か 提交于 2019-12-17 05:21:37
go语言包含但不限于int32,float32,chan,map,slice等内建类型,同时为了能让用户定义自己的类型,go语言为我们提供了struct和interface这两种好用的工具 结构体(Struct) 和C语言的struct相似,在go语言中,我们依然用struct来声明一个结构体比如: type gameObject struct{ name string } 以上代码声明了一个名为gameObject的结构体,该结构体包含类型为string的字段name。 在go语言中,所有的类型名都是放在变量后面的,这也是go语言跟C/C++,JAVA,C#等语言区别比较大的地方。 既然有了struct,那有没有class呢? 没有class,go语言中的“面向对象”概念和上面提到的几种语言是有很大区别的,后面会讲到 嵌入(Embedding) go语言中的“继承”和其他语言中的继承有很大区别,比如: type player struct{ gameObject } 这是一种“继承”的写法,在go语言中这种方式叫做“嵌入”(embed),此时player类型就拥有了gameObject类型的name变量 方法(Method) 在go语言中,我们可以为自定义类型定义类型相关的方法,比如: func (p *player) Name() string{ return p.name }

go语言里双向链表使用

一个人想着一个人 提交于 2019-12-17 04:20:53
go语言里也提供有链表结构,在contain/list包里,是一个有头部和尾部指针的双向链表。在链表内部有一个关键的element结构,这个结构记录着元素的值,和一些关系等信息,在插入和删除时需要这个结构指针。具体使用看如下例子,关于链表插入、删除、遍历的方法: package main import ( "fmt" "container/list" ) //双链表里有一个*list.Element 结构,这个结构记录着列表元素的值以及与其他节点之间的关系等信息 func printlist(l *list.List) { //把链表指针传入 i:=1 for v:=l.Front();v!=nil;v=v.Next() { fmt.Printf("第%v个元素:%v\n",i,v.Value) i++ } } func main() { l:=list.New() //创建后返回的是*list.List链表类型。 l.PushBack("haha") l.PushFront(100) element:=l.PushBack(88) //保存元素结构指针 //fmt.Printf("元素:%v\n",element.Value) l.InsertAfter("xy",element) //在某个节点后插入 l.InsertBefore("abc",element) /