go语言

GoLang系列-beego框架的安装(一)

送分小仙女□ 提交于 2019-12-30 04:56:43
GoLang系列-beego框架的安装(一) 前言:到这里相信大家应该对Go语言有了大概的了解,作为一个快速增长的开源编程语言,构建简单、快速并且可靠,那么在Go语言下有哪些Web开发框架呢?先放一张人气图如下: 当然上图仅供参考,但是可以说明的是Go下Web框架用的最多的还是Gin 和 Beego ;Gin作为一个Go语言写的HTTP Web框架,它提供了Martini风格的API并有更好的性能,而Beego同样作为Go语言下开源的,高性能Web框架他的性能虽不敌Gin,但是从各个功能完善角度讲,它是有非常大的优势的, 此篇博客将主要针对于Beego框架的使用进行介绍 Beego安装 (我这里主要以window为操作系统,其他操作系统安装原理一样) 1.首先安装Go https://golang.org/dl/ 上图为不同操作系统下的安装文件,我这里环境为Windows,下载完成之后在系统变量里配置环境变量,我这里安装到D盘Golang目录下,所以在path下添加: D:\Golang\bin 配置完成之后检查是否安装成功,如下可以看到已经成功安装Go,版本为1.13.5 C:\Users\Administrator>go version go version go1.13.5 windows/amd64 接下来我们配置GOPATH,也就是工作空间目录

Go语言之依赖管理

让人想犯罪 __ 提交于 2019-12-28 01:25:26
Go语言之依赖管理 Go语言的依赖管理随着版本的更迭正逐渐完善起来。 依赖管理 为什么需要依赖管理 最早的时候,Go所依赖的所有的第三方库都放在GOPATH这个目录下面。这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决? godep Go语言从v1.5开始开始引入 vendor 模式,如果项目目录下有vendor目录,那么go工具链会优先使用 vendor 内的包进行编译、测试等。 godep 是一个通过vender模式实现的Go语言的第三方依赖管理工具,类似的还有由社区维护准官方包管理工具 dep 。 安装 执行以下命令安装 godep 工具。 go get github.com/tools/godep 基本命令 安装好godep之后,在终端输入 godep 查看支持的所有命令。 godep save 将依赖项输出并复制到Godeps.json文件中 godep go 使用保存的依赖项运行go工具 godep get 下载并安装具有指定依赖项的包 godep path 打印依赖的GOPATH路径 godep restore 在GOPATH中拉取依赖的版本 godep update 更新选定的包或go版本 godep diff 显示当前和以前保存的依赖项集之间的差异 godep version 查看版本信息 使用 godep

《Go语言高级编程》截选:Database 和数据库打交道

断了今生、忘了曾经 提交于 2019-12-27 07:48:52
本节将对 database/sql 官方标准库作一些简单分析,并介绍一些应用比较广泛的开源ORM和SQL Builder。并从企业级应用开发和公司架构的角度来分析哪种技术栈对于现代的企业级应用更为合适。 5.5.1 从 database/sql 讲起 Go官方提供了 database/sql 包来使用户进行和数据库打交道的工作,实际上 database/sql 库只是提供了一套操作数据库的接口和规范,例如抽象好的SQL预处理、连接池管理、数据绑定、事务、错误处理等。官方并没有提供具体某种数据库实现的协议支持。 和具体的数据库(如MySQL)打交道,还需要再引入MySQL的驱动,像下面这样: import "database/sql" import _ "github.com/go-sql-driver/mysql" db, err := sql.Open("mysql", "user:password@/dbname") import _ "github.com/go-sql-driver/mysql" 上一句 import ,实际上是调用了 mysql 包的 init() 函数,做的事情也很简单: func init() { sql.Register("mysql", &MySQLDriver{}) } 在 sql 包的全局 map 里把 mysql 这个名字的 Driver

第3章 作用域

佐手、 提交于 2019-12-27 02:07:04
第3章 作用域 3.1 关于作用域 3.1.1 局部变量与全局变量 (1)局部变量:Go语言中,在函数体或代码块内声明的变量称为局部变量,他们的作用域只在其所属的函数体或代码块内,特别的,参数和返回值变量也是局部变量。 (2)全局变量:Go语言中,在函数体外声明的变量称为全局变量,他们的作用域都是全局(在本包范围内)。全局变量可以在整个包甚至是外部包(被到处后)使用。 (3)简式变量:Go语言中使用 “:=” 声明的变量一般也是局部变量,如果新的局部变量域同名已定义的变量不在一个作用域中,Go语言会在此作用域新定义的这个局部变量,遮盖住全局变量。 3.1.2 显式与隐式代码块 根据Go语言的规范,Go语言中的标识符作用域是基于代码块的。代码块是包裹在一对花括号{}内部的声明和语句。 特别的,Go语言中某变量具体对应的内存的分配,仅在定义时完成。即,确定某变量对应的具体内存,直接寻找其定义时对应的内存即可。 package main var ( Ga int = 100 ) func GetGa1 ( ) func ( ) int { Ga := 10 return func ( ) int { Ga = Ga + 1 return Ga // Ga对应GetGa1中的Ga := 10 } } func GetGa2 ( test func ( ) int ) func ( )

go语言中var

妖精的绣舞 提交于 2019-12-27 00:30:30
go语言中定义变量使用关键字var,如:var x int=4 也可以写成x:=4; 在函数中, := 简洁赋值语句在明确类型的地方,可以用于替代 var 定义。 ( := 结构不能使用在函数外,函数外的每个语法块都必须以关键字开始。) package main import ( "fmt" ) func main() { var x int = 4 fmt.Println(x)//输出4 fmt.Println(&x)//输出指针 //fmt.Println(*x) //错误 y := 4 fmt.Println(y)//输出4 fmt.Println(&y)//输出指针 //fmt.Println(*y) //错误 var v *int = new(int)//返回值为指针 fmt.Println(*v)//输出为0,它只是将内存清零,而不是初始化内存*v = 4//赋值 fmt.Println(v)//输出指针 fmt.Println(*v)//输出4 z := new(int)//代替var v *int = new(int) *z = 3 fmt.Println(z)//输出指针 fmt.Println(*z)//输出3 }总结go语言的变量定义返回值中隐含了指针,可以进行取指针操作,不嫩进行取值操作。golang中查看变量类型:import "reflect

Go语言_基础学习篇

牧云@^-^@ 提交于 2019-12-27 00:30:17
GO文件目录结构 该图是go-windows的目录结构 如图,go的程序应该是在gopath文件夹下的,分为bin, pkg, 和src三个子文件夹 src文件夹 :每个次级文件夹(如demo)就是代表一个go项目,里面存放源程序 bin文件夹 :go的每个项目生成的二进制可执行程序。windows下会生成.exe文件,linux下会生成可执行文件。Go的最大特色之一就是可移植性,就是说,当生成一个demo.exe之后,将这个exe文件放在任意一台windows系统上(即使没有安装go安装包),也是可以执行的。这是让PHP,Python等脚本语言望成莫及的。 pkg文件夹 :第三方库。里面存放你的项目中引用的第三方库(非官方已经提供的库)。 Go基础知识 变量赋值:(有下面几种形式, 都是将a 设置为 int 12) var a a = 12 a := 12 a,b :=12,23 常量赋值: 1 itoa使用 const( a = iota b ) iota是go的常量赋值自增量,上面代码将a设置为0,b设置为1 2 string go中string是常量,只能用双引号来表示。 a := "this is string" a[0] = 'c' (这个是错误的,会报错) 如果要做上面的操作应该这样: a := "this is string" c := []bytes(a) c[0

Golang基础(5):Go语言反射规则

寵の児 提交于 2019-12-27 00:29:19
Go语言反射规则 - The Laws of Reflection 转: http://my.oschina.net/qbit/blog/213720 原文地址: http://blog.golang.org/laws-of-reflection 介绍 反射在计算机的概念里是指一段程序审查自身结构的能力,主要通过类型进行审查。它是元编程的一种形式,同样也是引起混乱的重大来源。 在这篇文章里我们试图阐明Go语言中的反射是如何工作的。每种语言的反射模型是不同的(许多语言不支持反射),然而本文只与Go有关,所以我们接下来所提到的“反射”都是指Go语言中的反射。 类型与接口 由于反射是建立在类型系统(type system)上的,所以我们先来复习一下Go语言中的类型。 Go是一门静态类型的语言。每个变量都有一个静态类型,类型在编译的时后被知晓并确定了下来。 ? 1 2 3 4 type MyInt int var i int var j MyInt 变量 i 的类型是 int ,变量 j 的类型是 MyInt 。虽然它们有着相同的基本类型,但静态类型却不一样,在没有类型转换的情况下,它们之间无法互相赋值。 接口是一个重要的类型,它意味着一个确定的的方法集合。一个接口变量可以存储任何实现了接口的方法的具体值(除了接口本身)。一个著名的例子就是 io.Reader 和 io.Writer :

Go语言之反射(二)

和自甴很熟 提交于 2019-12-27 00:27:50
反射的值对象 反射不仅可以获取值的类型信息,还可以动态地获取或者设置变量的值。Go语言中使用reflect.Value获取和设置变量的值。 使用反射值对象包装任意值 Go语言中,使用reflect.ValueOf()函数获得值的反射值对象(reflect.Value)。书写格式如下: value := reflect.ValueOf(rawValue)    reflect.ValueOf返回reflect.Value类型,包含有rawValue的值信息。reflect.Value与原值间可以通过值包装和值获取互相转化。reflect.Value是一些反射操作的重要类型,如反射调用函数。 从反射值对象获取被包装的值 Go 语言中可以通过 reflect.Value 重新获得原始值。 1.从反射值对象(reflect.Value)中获取值的方法 可以通过下面几种方法从反射值对象 reflect.Value 中获取原值,如表1-2所示。 表1-2 反射值获取原始值的方法 方法名 说明 Interface() interface{} 将值以interface{}类型返回,可以通过类型断言转换为指定类型 Int() int64 将值以int类型返回,所有有符号整型均可以此方式返回 Uint() uint64 将值以uint类型返回,所有无符号整型均可以此方式返回 Float()

Go语言反射规则

做~自己de王妃 提交于 2019-12-27 00:24:05
原文地址: http://blog.golang.org/laws-of-reflection ##介绍 反射在计算机的概念里是指一段程序审查自身结构的能力,主要通过类型进行审查。它是元编程的一种形式,同样也是引起混乱的重大来源。 在这篇文章里我们试图阐明Go语言中的反射是如何工作的。每种语言的反射模型是不同的(许多语言不支持反射),然而本文只与Go有关,所以我们接下来所提到的“反射”都是指Go语言中的反射。 ##类型与接口 由于反射是建立在类型系统(type system)上的,所以我们先来复习一下Go语言中的类型。 Go是一门静态类型的语言。每个变量都有一个静态类型,类型在编译的时后被知晓并确定了下来。 type MyInt int var i int var j MyInt 变量 i 的类型是 int ,变量 j 的类型是 MyInt 。虽然它们有着相同的基本类型,但静态类型却不一样,在没有类型转换的情况下,它们之间无法互相赋值。 接口是一个重要的类型,它意味着一个确定的的方法集合。一个接口变量可以存储任何实现了接口的方法的具体值(除了接口本身)。一个著名的例子就是 io.Reader 和 io.Writer : // Reader is the interface that wraps the basic Read method. type Reader interface

Go语言(变量和常量)

拜拜、爱过 提交于 2019-12-26 23:14:07
变量和常量是编程中必不可少的部分,也是很好理解的一部分。 标识符与关键字 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和 _ (下划线)组成,并且只能以字母和 _ 开头。 举几个例子: abc , _ , _123 , a123 。 关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。 Go语言中有25个关键字: 1 break default func interface select 2 case defer go map struct 3 chan else goto package switch 4 const fallthrough if range type 5 continue for import return var 此外,Go语言中还有37个保留字。 1 Constants: true false iota nil 2 3 Types: int int8 int16 int32 int64 4 uint uint8 uint16 uint32 uint64 uintptr 5 float32 float64 complex128 complex64 6 bool byte rune string error 7 8 Functions: