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

go学习

package main import ( "errors" "fmt" ) //在go语言中的不可思议的事情返局部变量的指针,一切ok func myfun() *int { var a int = 10 return &a } //用来处理常规错误 func myerror() { err := errors.New("emit macho dwarf:elf header corrupted") if err != nil { fmt.Print(err) } } //还有就是在go中字符串常量可以修改 func main1() { var va = float32(3.2) var myname = "peter" c := []byte(myname) c[0] = 'A' var...阅读全文

博文 2016-05-24 23:00:13 u010165367

Go语言错误处理

package main import ( "fmt" "math" ) //对应错误类型输出 type ErrNegativeSqrt float64 //定义错误类型输出 func (e ErrNegativeSqrt) Error() string { return fmt.Sprintf("cannot Sqrt negative number:%f", float64(e)) } //计算平方根的方法 func Sqrt(f float64) (float64, error) { if f > 0 { return math.Sqrt(f), nil } return 0, ErrNegativeSqrt(f) } func main() { g, h := Sqrt(2) if ...阅读全文

博文 2015-06-17 23:03:18 genispan

golang手把手实现tcp内网穿透代理(2)

上一篇文章明确了我们需要做的东西,接下来就是实现具体功能 定义数据模型 首先是协议的定义,服务端和客户端需要一套协议来交互 协议的内容包括了,livecheck,以及发起tcp连接建立的请求,和响应的对象 假设内网里面需要暴露到外网的端口是5050,那么客户端需要请求服务端在外网建立一个端口,同时服务端需要知道内网被代理的端口是多少。 是因为当外网端口接收到tcp请求的时候,服务端也是需要下发请求到客户端要求客户端建立到被代理端口的连接的。 那么使用什么文本格式呢?首先考虑使用大家都知道的比较简单的,那就是json格式了。 既然使用的文本格式是json,那么需要了解golang下怎么使用json的序列化和反序列化一个对象。 下面开始结构体的定义: 新建一个model.go文件,用来放客户端和...阅读全文

博文 2019-06-17 00:32:40 iamdev

groupcache 使用示例

一个缓存系统,memcached的golang版本,这里先了解一下使用方式 使用示例 groupcache由于是框架,需要导入在编写业务代码才能运作 缓存方式可自定义:db,文件等 type TblCache struct { Id int Key string Value string } func main() { //定义节点数量以及地址 peers_addrs := []string{"http://127.0.0.1:8001", "http://127.0.0.1:8002"} db, _ := sql.Open("sqlite3", "./console.db") if len(os.Args) != 2 { fmt.Println("\r\n Usage local_addr...阅读全文

博文 2019-02-28 15:34:44 Linrundong

go语言坑之并发访问map

go提供了一种叫map的数据结构,可以翻译成映射,对应于其他语言的字典、哈希表。借助map,可以定义一个键和值,然后可以从map中获取、设置和删除这个值,尤其适合数据查找的场景。但是map的使用有一定的限制,如果是在单个协程中读写map,那么不会存在什么问题,如果是多个协程并发访问一个map,有可能会导致程序退出,并打印下面错误信息: fatal error: concurrent map read and map write 上面的这个错误不是每次都会遇到的,如果并发访问的协程数不大,遇到的可能性就更小了。例如下面的程序: package main func main() { Map := make(map[int]int) for i := 0; i < 10; i++ { go wri...阅读全文

博文 2017-04-24 12:54:10 songleo

对Golang interface的理解

什么是interface interface是一组method(方法)的组合,我们通过interface来定义对象的一组行为。 interface类型 interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。 (如果给鸭子模型定义划水的方法,当我再新建立一个鸟的对象,让它实现划水的方法,这时我可以认为鸟也是鸭子) 一个例子: type Human struct { name string age int phone string } type Student struct { Human //匿名字段Human school string loan float32 } type Employee struct { Human //匿名字段Human...阅读全文

博文 2019-03-05 15:35:00 不会飞的章鱼

39.蛤蟆笔记go语言——接口

39.蛤蟆笔记go语言——接口 在Go中,保留字interface被赋予了多种不同的含义。每个类型都有接口,意味着对那个类型定义了方法集合。 接口定义为一个方法的集合。方法包含实际的代码。换句话说,一个接口就是定义,而方法就是实现。因此,接收者不能定义为接口类型,这样做的话会引起invalid receiver type ... 的编译器错误。 根据规则,单方法接口命名为方法名加上-er后缀:Reader,Writer,Formatter等。 有一堆这样的命名,高效的反映了它们职责和包含的函数名。 Read,Write,Close,Flush,String等等有着规范的声明和含义。为了避免混淆,除非有类似的声明和含义,否则不要让方法与这些重名。相反的,如果类型实现了与众所周知的类型相同的方法...阅读全文

博文 2016-07-09 12:00:12 notbaron

又特么一编程语言开源上线了,真的是学不动了

就在 6 月 24 号的时候,一种开源的名为 V 的新的静态类型编程语言,正式开源了,并发布了首个可用版本,当前开源的版本是 0.0.12 。一经开源,就在 Github 上引起了大量的关注,star 数也是嗖嗖上升。那么什么是 V 语言呢?相信大家对 Golang ,也就是 go 语言都有所耳闻,甚至熟悉吧?而 V 语言的名字比 Go 语言还简洁,少一个字母叫:V ,全名叫:vlang 。它被描述为一种简单,快速,编译的语言,用于创建可维护的软件。它的创造者 Alex Medvednikov 表示它与 Go 非常相似,并受到 Oberon,Rust 和 Swift 的启发。其提供了方便、快捷、安全的编程语言和工具包,还能够很好地服务于区块链技术。V 语言多牛逼?据说 V 语言将来每秒可以编...阅读全文

golang的func的一些笔记

先看一看func 的基本构成元素 func (p myType ) funcName ( a, b int , c string ) ( r , s int ) { return } 其中: 关键字———func // 这个是定义函数的关键字 函数拥有者—(p myType) // 这个是此函数的拥有者,下面解释(此项可省略) 方法名———funcName // 这个是定义函数的名字 入参———— a,b int,b string // 这个是定义函数的入参 返回值——— r,s int // 这个是定义函数的返回值,golang可以返回多个值 函数体——— { } 重点说说这个函数拥有者(p myType),这个是相较于C/C++比较特殊的地方。 为特定类型定义函数,即为类型对象定义方法 ...阅读全文

10分钟让你明白MySQL是如何利用索引的

一、前言 在MySQL中进行SQL优化的时候,经常会在一些情况下,对MySQL能否利用索引有一些迷惑。 譬如: MySQL 在遇到范围查询条件的时候就停止匹配了,那么到底是哪些范围条件? MySQL 在LIKE进行模糊匹配的时候又是如何利用索引的呢? MySQL 到底在怎么样的情况下能够利用索引进行排序? 今天,我将会用一个模型,把这些问题都一一解答,让你对MySQL索引的使用不再畏惧 二、知识补充 key_len EXPLAIN执行计划中有一列 key_len 用于表示本次查询中,所选择的索引长度有多少字节,通常我们可借此判断联合索引有多少列被选择了。 在这里 key_len 大小的计算规则是: 一般地,key_len 等于索引列类型字节长度,例如int类型为4 bytes,bigint为...阅读全文

博文 2017-08-09 05:10:53 Harvey

golang枚举类型 - iota用法拾遗

在c#、java等高级语言中,经常会用到枚举类型来表示状态等。在golang中并没有枚举类型,如何实现枚举呢?首先从枚举的概念入手。 1、枚举类型定义 从百度百科查询解释如下:http://baike.baidu.com/link?url=Lrq57-YIZJ35grERvdg2kh7lfGfxvvLCVsNBMAqjBUOQX3CJUYnJp-9oZ2-rf3JGMqL3e4RbnSRQWs_5nmaI6K 枚举类型在C#或C++,java,VB等一些计算机编程语言中是一种基本数据类型而不是构造数据类型,而在C语言等计算机编程语言中是一种构造数据类型。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。 枚举可以根据Integer、Long、Short或Byte...阅读全文

关于golang struct interface的理解使用

前端时间说了不少golang常用库包的使用,貌似没有详细说struct interface的概念。在说interface之前,我们知道在Golang 中是没有类class 的概念,golang是通过 interface 类型接口实现的继承多态的效果。 一个 interface 类型定义了一个方法集做接口。 使用golang实现继承时,我们只要记得要给我们的interface类型实现一个method,就完成了对interface的使用。 该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。 http://xiaorui.cc/?p=2938 我们首先要区分出goalng的方法和函数。他们之间虽然都是通过func定义的,但还是有区别的。 这是函数,很直接的函数。 Pyt...阅读全文

博文 2017-04-04 19:27:24 rfyiamcool

如何理解 golang nil

golang 中的 nil 是不同于其他语言的,为了更好的理解 nil,在此我将尝试一步一步揭示 nil 在 golang 中的一些操作和现象。 1. nil 是不能比较的code-1 Play 123456789package mainimport ( "fmt")func main() { fmt.Println(nil==nil)} code-1 输出 1tmp/sandbox318449491/main.go:8: invalid operation: nil == nil (operator == not defined on nil) 这点和 python 等动态语言是不同的,在 python 中,两个 None 值永远相等。 123>>> None == NoneTrue>>>...阅读全文

博文 2017-07-28 13:11:56 三月沙

Golang数据结构 - 1 - 数组

数组 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构。 在这里我们将用Go语言中的切片特性来实现数组的基本操作。 数组类型定义 我们首先定义数组类型为Array, 同时定义数组中元素类型为Element。代码如下 // 数组定义 type Element interface {} type Array []Element 创建数组 使用Go语言创建切片数组很简单,代码如下 arr := Array{1,2,3,4,5} // 1 arr := make(Array, 5) // 2 数组遍历 我们可以使用Go中for循环于range语法对数组进行遍历,代码如下 for i, v := range arr { fmt.Printf("arr[%d]=%v\n",i, v)...阅读全文

博文 2019-06-18 23:32:46 monigo

go 结构体

go 结构体 go 结构体 定义 赋值 工厂方法 Go 通过结构体的形式支持用户自定义类型。 结构体是复合类型(composite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。 定义 结构体定义的一般方式如下: type Identifier struct { field1 type1 field2 type2 ... } 赋值 结构体是值类型,因此可以通过 new 来创建。 我们可以使用 . 给字段赋值: structname.fieldname = value 同样的,也可以使用 . 获取结构体字段的值: structname.fieldname 在 G...阅读全文

博文 2016-09-08 10:00:02 fengfengdiandia

go 结构体

go 结构体 go 结构体 定义 赋值 工厂方法 Go 通过结构体的形式支持用户自定义类型。 结构体是复合类型(composite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。 定义 结构体定义的一般方式如下: type Identifier struct { field1 type1 field2 type2 ... } 赋值 结构体是值类型,因此可以通过 new 来创建。 我们可以使用 . 给字段赋值: structname.fieldname = value 同样的,也可以使用 . 获取结构体字段的值: structname.fieldname 在 G...阅读全文

博文 2016-09-08 07:00:07 fengfengdiandia

go函数定义遇到的困惑

在python中可以这么写: ```python def haha(): def ha(): return "000" return ha() ``` 但是如果在go中定义的话就会遇到问题,为什么 ```go func main(){ //下面三个如果定义在main函数中就会报错 为什么 func squeare(n int) int { return n * n}; func negative(n int) int { return -n}; func product(m, n int) int { return m*n}; } ``` 编译报错: `syntax error: unexpected squeare, e...阅读全文

Golang内置类型和函数

工具包fmt 标准包errors 错误工具包string 字符串操作包strconv 字符串转换包regexp 正则包(golang的正则实现的RE2标准)encoding/json json转换工具包/* 内置类型值类型:boolint(32 or 64), int8, int16, int32, int64uint(32 or 64), uint8(byte), uint16, uint32, uint64float32, float64stringcomplex64, complex128array -- 固定长度的数组引用类型:(指针类型)slice -- 序列数组(最常用)map -- 映射chan -- 管道内置函数append -- 把东西增加到slice里面,返回修改后的sl...阅读全文

博文 2018-10-27 23:34:38 水无寒

Golang之struct

1.用来定义复杂数据结构 2.struct里面可以包含多个字段(属性) 3.struct类型可以定义方法,注意和函数的区分。 4.struct类型是值类型 5.struct类型可以嵌套 6.Go语言没有class类型,只有struct类型 package main import "fmt" //声明结构体 type Student struct { Name string Age int Score int } func main() { //struct字段访问,使用“点”访问 var stu Student stu.Name = "yuchao" stu.Age = 18 stu.Score = 99 fmt.Printf("name=%s age=%d scrore=%d", stu....阅读全文

Golang重要特征之init函数

go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性 inti函数主要特征: 1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等 2 每个包可以拥有多个init函数 3 包的每个源文件也可以拥有多个init函数 4 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明) 5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序 6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用 下面的两个go文件演示了: 一个package或者是go文件可以包含多个init函数 init函数是在main函数之前执行的 init函数被自动调用,不能在其他函数中调用,显式调用会报该函数未定义 gprog....阅读全文

博文 2018-12-10 17:34:48 Chole121

Golang基础(三)-- interface{}、断言、switch type

(转自:https://blog.csdn.net/a595364628/article/details/54598227) 一、interface interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。详细的语法参考下面这个例子 type Human struct { name string age int phone string } type Student struct { Human //匿名字段Human school string loan float32 } type Employee struct { Human //匿名字段Human company string money float32 } //Human对象实现Sayh...阅读全文

博文 2018-08-23 19:35:18 魔改谢馒头

ARTS 第22周

ARTS 第22周分享 [TOC] Algorithm 274. H-Index [medium] [题目描述] Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher's h-index. According to the definition of h-index on Wikipedia: "A scientist has index h if h of his/her N papers have at least h citations each, and the other N −...阅读全文

golang关键字

# golang学习 ## golang关键字 ```json break :中断本层循环,直接退出本层循环 case :一般与switch一起做条件选择,还可以与select结合使用 chan :信道定义 const :常量声明 continue:中断本次循环,进入下一次循环 default:与switch一起使用设置默认值 func :定义方法(函数)的关键字 defer :方法最后执行的操作,新定义的后执行 go:开启go-routine else:与if以前做条件筛选 goto:转向指定代码模块 fallthrough:与switch一起继续执行下面的case条件 if:条件判断 for:循环语句关键字 import:导入依赖包 interface :接口类型 map :map集合类...阅读全文

博文 2019-02-26 14:00:01 songylwq

Golang基础(一)-- slice用法和本质

今天问题问的很基础,考察了很多概念性问题,有些没有答上来,自己做一下笔记 Q1:Golang里哪些是值类型,哪些是引用类型 A1:Golang中只有三种引用类型:slice(切片)、map(字典)、channel(管道); 关联知识:slice用法和本质: 转自:https://studygolang.com/articles/5877、 数组 Go的切片是在数组之上的抽象数据类型,因此在了解切片之前必须要要理解数组。 数组类型由指定和长度和元素类型定义。例如, [4]int 类型表示一个四个整数的序列。数组的长度是固定的,长度是数组类型的一部分(int[4] 和 [5]int 是完全不同的类型)。 数组可以以常规的索引方式访问,表达式 s[n] 访问数组的第n 个元素。 数组不需要显式的初...阅读全文

博文 2018-08-22 19:35:12 魔改谢馒头

如何使用自定义包中声明的结构体

大家好,我是golang新人,碰到了一个语法级别问题,找了好多地方也没头绪,希望前辈指点: 目录结构: ``` /test | |--/demo | |--demo.go |--main.go ``` demo.go: ```go package kz type Order struct{ name String } ``` ```go package main import ( "fmt" "./demo" ) func main(){ var o kz.Order o.name="kz" fmt.Println(o) o1 := kz.Order{name:"kz"} fmt.Print...阅读全文

Golang研学:在函数、方法、接口中用好指针类型

Golang研学:在函数、方法、接口中用好指针类型 在大部分面向对象语言如C++、C#、Java,在函数传参数时除了基础值类型,对象是通过引用方式传递的。 然而,在Go语言中,除了map、slice和chan,所有类型(包括struct)都是值传递的。 那么,如何在函数外使用函数内处理后的变量呢?只能通过返回新变量吗? 不,可以使用指针 大部分面向对象语言都很少有用到指针的场景了,但是在Go语言中有大量的指针应用场景,要成为一名合格的Gopher,必须了解。 概念 每一个变量都会分配一块内存,数据保存在内存中,内存有一个地址,就像门牌号,通过这个地址就可以找到里面存储的数据。 指针就是保存这个内存地址的变量。 在Go语言中,用&取得变量的地址 //为了说明类型,我采用了显性的变量定义方法,实...阅读全文

博文 2019-04-27 00:34:41 ZetaChow晓代码

go 结构体

go 结构体 go 结构体 定义 赋值 工厂方法 Go 通过结构体的形式支持用户自定义类型。 结构体是复合类型(composite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。 定义 结构体定义的一般方式如下: type Identifier struct { field1 type1 field2 type2 ... } 赋值 结构体是值类型,因此可以通过 new 来创建。 我们可以使用 . 给字段赋值: structname.fieldname = value 同样的,也可以使用 . 获取结构体字段的值: structname.fieldname 在 G...阅读全文

博文 2016-09-08 08:00:11 fengfengdiandia

Go关键字--type

友情推广 type type有如下几种用法: 定义结构体 定义接口 类型定义 类型别名 类型查询 定义结构体 结构体是用户自定义的一种抽象的数据结构,golang中struct类似于java语言中的class, 在程序设计中,有着举足轻重的地位。结构体的用法,将会在struct关键字中详细的介绍。下边来看一下定义一个结构体的语法格式: type name struct { Field1 dataType Field2 dataType Field3 dataType } 定义接口 接口相关知识点,将会在interface关键字中详细介绍,下边来看一段定义接口的语法格式: type name interface{ Read() Write() } 类型定义 使用类型定义定义出来的类型与原类型不...阅读全文

博文 2019-01-31 18:31:04 hzwy23

go"泛型编程"

开始文章之前我们要先弄清楚什么是『泛型编程』。 In the simplest definition, generic programming is a style of computer programming in which algorithm are written in terms of types to-be-specified-later that are then instantiated when needed for specific types provided as parameters. – From Wikipedia. 简单来说就说,我们编写的代码不是针对特定的类型(比如适用于int, 不适用于string)才有效,而是大部分类型的参数都是可以工作的。我们来看一...阅读全文

Go语言中的变量

1 概述 变量(Variable)是程序运行过程中,内容可以变化(修改)的量,变量的功能是存储用户的数据,是计算机语言中能储存计算结果或能表示值抽象概念。变量,是通过变量的标识符定位值的过程。变量的内存模拟演示: 2 定义:声明和初始化 定义变使用var关键字,需要指定其类型,可以同时初始化,如果没有指定初始化值,则使用类型的默认值,语法如下: // 声明变量,未初始化(默认值初始化) var name string // 声明变量,特定值初始化 var user string = "Hank" Go语言中的变量必须声明后才可以使用,不能直接使用未定义的变量。 3 类型默认值(零值) Go语言的类型默认值如下所示: 整型和浮点型变量的默认值为 0。 字符串变量的默认值为空字符串。 布尔型变量...阅读全文

博文 2018-10-28 07:35:08 小韩说课

golang基础(1)

golang-gopher.png go 作为一门相对年轻的语言是在 2009 年由 Ken Thompson 和 Robert Griesemer 共同在 Google 孵化出来的。go 在许多方面都是可以看到 c 和 c++ 的影子。 robert_griesemer.jpg Ken Thompson 参与了开发 unix,而且 Thompson 也参与 c 语言开发。(下图) thompson01.jpg 编译为机器码 垃圾回收 协程(goroutine) 用于线程同步的通道(channels) 静态类型 没有类或类型的继承 通过接口定义关系 go 作为一门高级语言有自己垃圾回收,因此 go 语言不算上是一门可以写出高效的低级语言。所有 golang 并不适合开发操作操作系统和大型游戏...阅读全文

golang学习笔记

与c语法不同之处: 1. 参数列表中各个参数类型相同时可以只写出最后一个,如:add(x, y int) int { return x +y } 2. 类型在参数名(变量/函数)后面 3. 函数的左大括号要跟函数名同一行,否则编译不过 4. 函数定义要先写关键字func在函数开头(函数外的每个语句都要以func、var等等关键字开头) 5. 在包或者函数级别声明变量时要用var语句 6. 函数支持多值返回,如:func swap(x, y string) (string, string) { return y,x } 7. 函数支持命名返回值,如func split(x int) (x, y int) { ... return} 8. 初始化使用表达式时可以不用写类型,由初始值推导出类型 9...阅读全文

博文 2016-09-08 07:00:13 qq_32746725

【Go学习笔记】11、方法method

方法method Go中虽没有class,但依旧有method 通过显示说明receiver来实现与某个类型的组合 只能为同一个包中的类型定义方法 Receiver 可以使类型的值或者指针 不存在方法重载 可以使用值或指针来调用方法,编译器会自动完成转换 从某种意义上来说,方法是函数的语法糖,因为receiver其实就是方法所接收的第1个参数(Method Value vs. Method Expression) 如果外部结构和潜入结构存在同名方法,则优先调用外部结构的方法 类型别名不会拥有底层类型所附带的方法 方法可以调用结构中的非公开字段 1234567891011121314151617type A struct { Name string}func main (){//method ...阅读全文

博文 2017-05-30 05:10:22 HundredLee

Go语言学习之关键字用途介绍 go开发

随着技术的发展,go语言逐步的进入了市场,有很多IT技术人员想要了解go语言,有很多公司已经开始使用go语言来实现一些功能。如果你在学习go语言,那么go语言的关键字都有什么用途呢?我们来了解一下。var :用于变量的声明const :用于常量的声明type :用于声明类型func :用于声明函数和方法package :用于声明包文件import :用于导入其它packagereturn :用于从函数返回defer :延迟调用,在函数退出之前执行go :创建一个协程select :用于选择不同类型的通讯interface :用于定义接口struct :用于定义数据类型break、case、continue、for、fallthrough、else、if、switch、goto、default...阅读全文

博文 2018-10-17 17:35:13 mo默瑶

使用二进制形式发布go package

我们在使用Go进行开发的时候, 经常会使用到第三方的库, 这时候我们一般都会通过go get到github.com、bitbucket或者自己私有库中去拉取第三库的源代码。 今天正好群里有网友问能不能将自己开发的库以二进制形式提供给用户,我就顺便整理了一下。 以二进制方式提供库的动机可能是为了保护自己公司的知识产权,也有可能是从安全的角度考虑,避免一些关键信息的泄漏等等,这不是本文讨论的范围。 虽然以前的版本能够曲折的实现使用二进制的库,但是正式提供的方案是在Go 1.7中。 在 Go 1.7 Release Notes提到: This release adds experimental, minimal support for building programs using binary-...阅读全文

博文 2018-02-28 10:55:11 smallnest

[Go 教程系列笔记]多态-Go中的OOP

Go 教程系列笔记 Interface 第一部分 Go 教程系列笔记 Interface 第二部分 Go 教程系列笔记 并发介绍 Go 教程系列笔记 goroutine(协程) Go 教程系列笔记 Channel 通道 Go 教程系列笔记 缓冲通道和工作池 Go 教程系列笔记 Select Go 教程系列笔记 Mutex(互斥锁) Go 教程系列笔记 结构而不是类-Go中的OOP Go 教程系列笔记 组合而不是继承-Go 中的 OOP Go 教程系列笔记 多态-Go 中的 OOP Go 中的多态性是在接口的帮助下实现的。正如我们已经讨论过的,接口可以在Go 中隐式实现。如果类型定义了接口中声明的所有方法,则类型实现接口。让我们看看在接口的帮助下如何在Go中实现多态性。 使用接口的多态性 任何...阅读全文

博文 2019-08-14 17:02:52 xfstart07

go 结构体

go 结构体 go 结构体 定义 赋值 工厂方法 Go 通过结构体的形式支持用户自定义类型。 结构体是复合类型(composite types),当需要定义一个类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。然后可以访问这些数据,就好像它是一个独立实体的一部分。 定义 结构体定义的一般方式如下: type Identifier struct { field1 type1 field2 type2 ... } 赋值 结构体是值类型,因此可以通过 new 来创建。 我们可以使用 . 给字段赋值: structname.fieldname = value 同样的,也可以使用 . 获取结构体字段的值: structname.fieldname 在 G...阅读全文

博文 2016-09-08 09:00:03 fengfengdiandia

Golang笔记: 接口(interface)

Go语言不是一种“传统”的面向对象编程语言,它里面没有类和继承的关系。但是Go语言通过灵活的接口概念,可以实现很多面向对象的特性,不同于其他语言的接口概念,GO语言的接口独特在满足隐式实现(没必要给具体类型定义所有满足的接口类型)。接口声明: 接口声明格式 说明:接口类型名,使用 type 将接口定义为自定义类型名,在类型名结尾加 er 注:Go语言的每个接口中的方法数量不会很多。Go语言希望通过一个接口精准描述它自己的功能,而通过多个接口的嵌入和组合的方式将简单的接口扩展为复杂的接口。接口的实现条件 如果一个任意类型 T 的方法集为一个接口类型的方法集的超集,则我们说类型 T 实现了此接口类型。T 可以是一个非接口类型,也可以是一个接口类型。实现关系是隐式的,没有类似与 implement...阅读全文

博文 2019-07-07 17:32:40 Boston199834

golang基础--method方法

Go没有类似python语言中类class的概念,但依旧有method 类型方法定义格式如下 func (a mytype) method_name(x type)(y type){ return y } 调用方式: instance.method(args) -> (type).func(instance, args) 通过显示的说明Receiver(强制函数传递的第一个参数)来实现与某个类型(struct,int...)的组合 package main import "fmt" type A struct{ Name Sting } func main() { a := A{} //实例化结构体 a.Method_Print() //结构体调用方法 } func (a A) Method...阅读全文

博文 2018-07-15 12:30:00 failymao

golang学习笔记

与c语法不同之处: 1. 参数列表中各个参数类型相同时可以只写出最后一个,如:add(x, y int) int { return x +y } 2. 类型在参数名(变量/函数)后面 3. 函数的左大括号要跟函数名同一行,否则编译不过 4. 函数定义要先写关键字func在函数开头(函数外的每个语句都要以func、var等等关键字开头) 5. 在包或者函数级别声明变量时要用var语句 6. 函数支持多值返回,如:func swap(x, y string) (string, string) { return y,x } 7. 函数支持命名返回值,如func split(x int) (x, y int) { ... return} 8. 初始化使用表达式时可以不用写类型,由初始值推导出类型 9...阅读全文

博文 2016-09-08 08:01:07 qq_32746725

golang切片排序sort包的使用

# golang切片排序sort包的使用 golang的sort包提供了部分切片排序的函数和用户自定义数据集的函数。 ## 排序切片 ```go func Example1() { arry := []int{5,8,3,1,4,2,7,6} fmt.Println(arry) sort.Ints(arry) fmt.Println(arry) // Output: // [5 8 3 1 4 2 7 6] // [1 2 3 4 5 6 7 8] } ``` ## 排序用户自定义数据集 ![Alt text](./1562483367982.png) ```go type Person struct { Name string Age int } func (p Person) Strin...阅读全文

博文 2019-07-07 16:08:34 BethlyRoseDaisley

高效生成JSON串——json-gen

概述 游戏服务端的很多操作(包括玩家的和非玩家的)需要传给公司中台收集汇总,根据运营的需求分析数据。中台那边要求传过去的数据为 JSON 格式。一开始我们使用 golang 标准库中的encoding/json,发现性能不够理想(因为序列化使用了反射,涉及多次内存分配)。由于数据原始格式都是map[string]interface{},且需要自己一个字段一个字段构造,于是我想可以在构造过程中就计算出最终 JSON 串的长度,那么就只需要一次内存分配了。 使用 下载: $ go get github.com/darjun/json-gen 导入: import ( jsongen "github.com/darjun/json-gen" ) 使用起来还是比较方便的: m := jsongen....阅读全文