go语言

go语言学习-接口

家住魔仙堡 提交于 2019-12-26 22:50:37
Go语言中虽然没有传统面向对象语言中类、集成的概念,不过提供了接口的支持,可以使用接口来使用一些面向对象的特性。 在 go 语言中,的接口有下面几个特点: 可以包含0个或多个方法的签名 只定义方法的签名,不包含实现 实现接口不需要显式的声明,只需实现相应方法即可 接口的定义 定义方式如下: type Namer interface { method1(param_list) return_list method2(param_list) return_list ... } 这里的 Namer 就是接口的名字,只要符合标识符的规则即可。不过,通常约定的接口的名字最好以 er, r, able 结尾(视情况而定),这样一眼就知道它是接口。 实现接口 在 go 中实现接口很简单,不需要显式的声明实现了某个接口,想要实现某个接口,只需要实现接口中的所有方法即可。 package main import "fmt" import "math" type Shaper interface { Area() float32 Circumference() float32 } type Rect struct { Width float32 Height float32 } type Circle struct { Radius float32 } func (r Rect) Area() int

Go语言mgo

牧云@^-^@ 提交于 2019-12-26 07:10:06
本文重点介绍mgo使用,仅简单介绍mongodb。 mongodb特性 mongdb简单介绍 注意: 上图已经告知我们mongo不支持事务,在开发项目应用时,想要保证数据的完整性请考虑关系型数据库(经典例子银行转账)。 mongo提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。所谓原子操作就是要么这个文档保存到mongodb,要么没有保存到mongodb,不会出现查询到的文档不完整的情况。 mgo简介 mgo 是 mongodb 的 GO 语言驱动包。 mgo官网: http://labix.org/mgo mgo使用 mgo方案一 package mgo import ( "flag" "gopkg.in/mgo.v2" "log" "study/conf" ) var session *mgo.Session var database *mgo.Database func init() { /*配置mongodb的josn文件,配置内容如下: { "hosts": "localhost", "database": "user" }*/ filename := flag.String("config", "./conf/config.json", "Path to configuration file") flag.Parse() config := &conf

golang学习笔记---函数、方法和接口

谁都会走 提交于 2019-12-25 04:22:24
函数: 对应操作序列,是程序的基本组成元素。 函数有具名和匿名之分: 具名函数一般对应于包级的函数,是匿名函数的一种特例,当匿名函数引用了外部 作用域中的变量时就成了闭包函数,闭包函数是函数式编程语言的核心。方法是绑 定到一个具体类型的特殊函数,Go语言中的方法是依托于类型的,必须在编译时静 态绑定 接口: 定义了方法的集合,这些方法依托于运行时的接口对象,因此接口对 应的方法是在运行时动态绑定的。 Go程序函数启动顺序的示意图: 要注意的是,在 main.main 函数执行之前所有代码都运行在同一个goroutine,也 就是程序的主系统线程中。 因此,如果某个 init 函数内部用go关键字启动了新的 goroutine的话,新的goroutine只有在进入 main.main 函数之后才可能被执行到。 函数 在Go语言中,函数是第一类对象,我们可以将函数保持到变量中。函数主要有具名 和匿名之分,包级函数一般都是具名函数,具名函数是匿名函数的一种特例 // 具名函数 func Add(a, b int) int {   return a+b } // 匿名函数 var Add = func(a, b int) int {   return a+b } Go语言中的函数可以有多个参数和多个返回值,参数和返回值都是以传值的方式和 被调用者交换数据。在语法上,函数还支持可变数量的参数

Golang编程之变量篇

我是研究僧i 提交于 2019-12-25 04:22:07
1、变量的简介 变量是大多数编程语言中最基本的组成元素。从本质上说,变量相当于是对一块或者多块数据存储空间的命名,程序可以通过定义一个变量来申请一块或者多块数据存储空间,之后可以通过引用变量名来使用这些存储空间。作为静态类型语言,Go语言变量总是有固定的数据类型,类型决定了变量内存的长度和存储格式。 2、变量的定义 关键字var用于定义变量,和C语言不同,类型被放在变量名后。 变量定义的一般语法如下: var 变量名字 类型 = 初始化表达式 其中“类型”或“初始化表达式”两个部分可以省略其中的一个。如果省略的是“类型”,那么编译器将根据初始化表达式来推导变量的类型信息;如果“表达式”被省略,那么将用零值( 数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型变量对应的零值是nil )初始化该变量。零值初始化机制可以确保每个声明的变量总是有一个良好定义的值,因此在Go语言中不存在未初始化的变量。 在一个语句中同时定义一组变量,或用一组初始化表达式定义并初始化一组变量: var i, j, k int // int, int, int var b, f, s = true, 2.3, "four" // bool, float64, string 一组变量也可以通过调用一个函数,由函数返回的多个返回值初始化: var ret,

Go语言 1入门

别说谁变了你拦得住时间么 提交于 2019-12-25 01:14:59
文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 1.1 编译环境及开发工具 1.1.1 Go 语言编译器 下载地址: http://liteide.org/cn/doc/install/ 由于 Go 语言支持 Windows 、 mac 和 Linux 等主流操作系统,所以我们需要根据操作系统选择不同的安装包文件。以 win10 64 位操作系统为例,选择的安装包文件为 :go1.8.3.windows-amd64.msi 。点击默认安装即可。 接下来,配置环境变量 GOPATH 。右击 ” 此电脑 ” 选择属性,然后选择左边列表中的高级系统设置,接下来在弹出的对话框中点击环境变量按钮。在系统变量中,点击新建按钮。在弹出的对话框中,变量名写 GOPATH ,变量值写设置的 Go 项目路径。 Go 项目路径下约定有三个子目录: 1) src 存放源代码(比如: .go .c .h .s 等) 2) pkg 存放 编译后生成的文件(比如: .a ) 3) bin 存放 编译后生成的可执行文件(为了 执行 方便,可以把此目录加入到 path 环境 变量中) Go 常用的三个命令: go run :直接运行程序 go build :编译生成可执行程序 go get :获取远程包(需提前安装

go语言入门

北慕城南 提交于 2019-12-25 01:14:29
1、hello world //go文件的后缀是.go package main //表示helo.go文件所在的包是main,在go中每个文件都必须归属于一个包 import "fmt" //表示引入一个包,包名是fmt,引入该包后,就可以使用 fmt 包的函数,比如:fmt.Println func main(){ //func 是一个关键字,表示一个函数。main 是函数名,是一个主函数,即我们程序的入口。 fmt.Println("hello,world") //表示调用 fmt 包的函数 Println 输出 “hello,world” } go build命令对go文件进行编译,生成可执行文件 go build -o 命令对go文件进行编译,生成自定义文件名字的可执行文件 go run命令直接运行go文件程序 2、golang 执行流程分析: (1)、如果是对源码编译后,再执行,go的执行流程如下图: (2)、如果是对源码直接 执行go run源码,go的执行流程如下图: 两种执行流程的方式区别: (1)、如果先编译生成了可执行文件,那么可以将该可执行文件拷贝到没有go开发环境的机器上仍然可以运行 (2) 如果是直接go run go源代码,那么如果要在另外一个机器上这么运行,也需要go开发环境,否则无法执行 (3) 在编译时

GO语言初探

☆樱花仙子☆ 提交于 2019-12-25 01:14:12
1、GO使用UTF-8编码,纯Unicode文本编写。 2、$ go verson (windows) 3、windows下,需要设置go语言的环境变量,新建一个名为 GOROOT的变量,指向go的具体目录,例如:C:\go\bin。 4、构建Go程序,需要进行编译和链接。 5、注释风格与C++相同,//和/**/。 6、main函数为入口,也是唯一的,每个Go程序必须包含的。 7、使用 import 导入相关的包。 8、支持常用的类型和操作符。 9、go语言中不适用分号结束,import导入多个包的时候,也不使用逗号隔开。 10、if,for等条件都不适用()括号。 11、函数和方法,使用func关键字进行定义。 12、go语言为强类型语言,使用操作符 := 进行快速变量声明,可以自动进行变量类型的推导。(类似于js中的var的用法。) 13、依旧使用=进行赋值。 14、fmt包中,包含丰富的打印函数变体。log提供了日志记录的功能,os提供操作系统级别的函数和变量。 15、path/filepath提供了路径操作函数。 16、采用单引号表达字符,可以使用log.Fatal()函数。 17、go支持命名和匿名的自定义类型。 18、go语言中不存在类的概念,只讲类型和值。 19、go提供for不带条件的循环,即无限循环,需要在其中加入跳出循环的条件:例如: for{if(err!

Go之路之go语言结构

倖福魔咒の 提交于 2019-12-25 01:13:26
Go Hello World 实例 package main //定义了包名,必须在源文件中非注释的第一行指名这个文件属于哪个包,每个Go应用程序都包含一个名为main的包 import "fmt" 告诉Go编译器这个程序需要使用fmt包,fmt包含了格式化I/O的函数 func main() { //是程序开始执行的函数,main函数是每一个可执行程序所必须包含的,一般来说都是启动后第一个执行的函数(如果有init()函数则会先执行该函数) /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!") 可以将字符串输出到控制台,并在最后自动增加换行符\n } 需要注意: { 不可以单独放在一行 例如: package main import "fmt" func main() { // 错误,{ 不能在单独的行上 fmt.Println("Hello, World!") } 行分隔符 在Go程序中,一行代表一个语句的结束,结尾不需要添加单位符号,这些工作都将由GO编译器自动完成,但是如果将多个语句写在同一行,则需要以;结尾,不鼓励这种写法 fmt.Println("Hello, World!") fmt.Println("Hello");fmt.Println("World") 注释 // 单行注释 /* My name is Jan多行注释*/

Go语言-Day01_1

爱⌒轻易说出口 提交于 2019-12-25 01:12:51
Go 语言结构 在我们开始学习 Go 编程语言的基础构建模块前,让我们先来了解 Go 语言最简单程序的结构。 Go Hello World 实例 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 接下来让我们来看下简单的代码,该代码输出了"Hello World!": 1 package main 2 3 import "fmt" 4 5 func main() { 6 /* 这是我的第一个简单的程序 */ 7 fmt.Println("Hello, World!") 8 } 让我们来看下以上程序的各个部分: 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序, 每个 Go 应用程序都包含一个名为 main 的包。 下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素), fmt 包实现了格式化 IO(输入/输出)的函数。 下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数( 如果有 init() 函数则会先执行该函数 )。 下一行 /*...*/ 是注释,在程序执行时将被忽略

Go语言结构

冷暖自知 提交于 2019-12-25 01:08:31
基础组成: 包声明,引入包、函数、变量、语句&表达式、注释(与c中类似) eg: package main import "fmt" func main() { /* 这是我的第一个简单的程序 */ fmt.Println("Hello, World!") } 第一行代码 package main 定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。 下一行 import "fmt" 告诉 Go 编译器这个程序需要使用 fmt 包(的函数,或其他元素),fmt 包实现了格式化 IO(输入/输出)的函数。 下一行 func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。 下一行 /*...*/ 是注释,在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。 下一行 fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。