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

golang反射理解

### golang反射理论基础 ### 反射就是动态的获取对象的信息,动态的执行对象的方法,为什么不直接获取对象的属性呢?为什么不直接调用他的方法呢?因为有时候不知道这个对象具体是什么类型,具体有哪些属性和方法。 golang中的反射和类型息息相关,所以在了解反射之前一定要对golang的类型有一定的认识,golang的反射是对接口变量的动态类型(type)和动态值(value)相关的操作,所以golang的反射只和接口变量有关,反射是建立在接口变量基础之上的,在此可能会有这样的疑问,任何一个类型的变量都可以通过反射进行操作呀!比如int类型变量,我可以通过反射修改这个变量的值。是的,但这其实和反射只和接口变量有关并不冲突,因为接口变量也包括空接口变量,如:var i interface{...阅读全文

博文 2019-05-12 21:15:00 LeeYubo

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的接口类型是golang的一大神器,下面我们来看看如何将接口类型转换成其他的类型 package tests import ( "fmt" "github.com/go-xorm/core" "github.com/go-xorm/xorm" _ "github.com/lunny/godbc" "os" "testing" "zks.com/business/module" ) var DBE *xorm.Engine func Test_InitDb(t *testing.T) { dbhost := "localhost\\MSSQLSERVER2008" dbname := "FoodSafety_KF" dbuser := "sa" dbpwd := "sasa" va...阅读全文

博文 2015-06-17 20:01:42 niechaoya

Go语言阅读小笔记,来自知呼达达关于unsafe.Pointer的分享.

第一式 - 获得Slice和String的内存数据 func stringPointer(s string) unsafe.Pointer { p := (*reflect.StringHeader)(unsafe.Pointer(&s)) return unsafe.Pointer(p.Data) } func bytePointer(b []byte) unsafe.Pointer { p := (*reflect.SliceHeader)(unsafe.Pointer(&b)) return unsafe.Pointer(p.Data) } 第二式 - 把[]byte转成string package test import "testing" import "unsafe" func ...阅读全文

博文 2015-11-16 10:00:00 fyxichen

golang的反射机制

go反射 什么是反射?使用反射可以实现什么功能? 反射提供了一种可以操作任意类型数据结构的能力。通过反射你可以实现对任意类型的深度复制,可以对任意类型执行自定义的操作。另外由于golang可以给结构体定义tag熟悉,结合反射,于是就可以实现结构体与数据库表、结构体与json对象之间的相互转换。 使用反射需要注意什么事情? 使用反射时需要先确定要操作的值是否是期望的类型,是否是可以进行“赋值”操作的,否则reflect包将会毫不留情的产生一个panic。 struct initializer示例 go-struct-initializer 是我在学习golang反射过程中实现的一个可以根据struct tag初始化结构体的go library,这里对其中用到的反射技术做一下说明 package...阅读全文

博文 2016-10-04 05:00:03 ylwh8679

Go语言实战_自定义OrderedMap

一、 自定义OrderedMap 在Go语言中,字典类型的元素值的迭代顺序是不确定的。想要实现有固定顺序的Map就需要让自定义的 OrderedMap 实现 sort.Interface 接口类型。该接口类型中的方法 Len 、Less 和 Swap 的含义分别是获取元素的数量、比较相邻元素的大小以及交换它们的位置。 1.定义 OrderedMap 想要实现自定义一个有序字典类型,仅仅基于字典类型是不够的,需要使用一个元素有序的数据类型值作为辅助。如下声明了一个名为 OrderedMap 的结构体类型: type OrderedMap struct { keys []interface{} m map[interface{}]interface{} } 如上在 OrderedMap 类型中,...阅读全文

博文 2016-08-18 01:00:04 u012855229

Go语言5大基本数据类型解析

/*码农网底部横幅*/ var cpro_id = "u1635067"; Go语言目前也比较热门,本文主要来讨论一下Go语言的5大基本数据类型以及其使用方法。Go语言的基本数据类型包括注释、标识符、常量、变量以及布尔值,下面我们逐一来对这些数据类型进行分析。 1、注释(与C++一样) 行注释://块注释:/* …*/ 2、标识符 可以这么说,除了数字开头的不允许,符号开头的不允许,关键字不允许,其他的Unicode字符组合都可以。“_33”也可以是标识符、“我们”也可以是标识符。标识符也区分大小写。 (1)、以大写字母开头的标识符是公开的。(这个很有意思) (2)、其他任何标识符都是私有的。 (3)、空标识符“_”是一个占位符,用于赋值操作的时候,丢弃、忽略某个值。通常这样用: go的方法...阅读全文

博文 2015-03-11 14:12:24 codeceo

golang 如何限制文件上传的大小

err := r.ParseMultipartForm(32 << 20) // 32Mb if err != nil { http.Error(w, err.Error(), http.StatusBadRequest) } 文件上传一般会采用 POST multipart/form-data 的形式,处理这类请求要调用 r.ParseMultipartForm,无论是显式调用,还是在 r.FormFile 里面的隐式调用。 那 32Mb 是对文件上传大小的限制吗?不是,上传的文件们按顺序存入内存中,累加大小不得超出 32Mb ,最后累加超出的文件就存入系统的临时文件中。非文件字段部分不计入累加。所以这种情况,文件上传是没有任何限制的。 r.Body = http.MaxBytesRead...阅读全文

博文 2019-08-10 21:02:42 IceWhite_084a

一看就懂系列之Golang的接口

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011957758/article/details/81150622 https://blog.csdn.net/u011957758/article/details/81150622 前言 接口在面向对象编程中是经常使用的招式,也是体现多态很重要的手段。 是的。Golang中也有接口这玩意儿。 本文将以通俗易懂的方式,说清楚Golang的接口。 10s后,以下知识点即将到达战场: 1.为什么需要接口? 2.接口是什么?如何定义? 3.接口实战初体验 4.如何测试是否已实现该接口? 5.空接口&类型断言 6.接口零值 7.一个类型实现多个接口 8.指针与值类型实现接口的区别 9.接口嵌套 正文...阅读全文

博文 2019-04-29 07:31:35 u011957758

golang之map数据类型

先上代码…… package main import "fmt" func testMap() { //两种声明map方式,切记,必须初始化才能用,否则panic //var a map[string]string = map[string]string{ // "key": "value", //} a := make(map[string]string, 10) a["abc"] = "efg" //map的key是唯一的,修改值可以直接改 a["abc"] = "efg2" a["abc1"] = "efg" fmt.Println(a) } //map嵌套map //map是无序排序 func testMap2() { a := make(map[string]map[string]...阅读全文

博文 2018-01-10 16:30:04 pyyu

golang 接口 参数

conn, err = ln.Accept() go handleConnection(conn) 看到这里我曾经有个疑问,为什么不是 handleConnection(&conn) ? package main import ( "fmt" ) type Interface interface { say() string } type Object struct { } func (this *Object) say() string { return "hello" } func do(i Interface) string { return i.say() } func main() { o := Object{} fmt.Println(do(&o)) fmt.Printf("CC...阅读全文

博文 2014-10-04 19:27:01 咖啡伴侣

Golang学习笔记之方法(method)

如果对与结构体还有什么疑问的可以看一下Golang学习笔记之结构体 ⽅法总是绑定对象实例,并隐式将实例作为第⼀实参 (receiver)。 • 只能为当前包内命名类型定义⽅法。 • 参数 receiver 可任意命名。如⽅法中未曾使⽤,可省略参数名。 • 参数 receiver 类型可以是 T 或 *T。基类型 T 不能是接⼝或指针。 • 不⽀持⽅法重载, receiver 只是参数签名的组成部分。 • 可⽤实例 value 或 pointer 调⽤全部⽅法,编译器⾃动转换。 • Go 不允许同名函数,但是同名方法可以定义在不同的类型上 • method和receiver必须在同一个包里定义 • 作为函数参数,值类型就是值类型,指针类型就是指针类型 • 方法有一个值类型和指针类型的接受者时,...阅读全文

博文 2018-12-06 19:34:54 学生黄哲

GOLang CLI

GOLang CLI 刚接触GoLang,发现大家在写CLI的时候都会直接使用Go语言中自动的flag或者cobra。想着自己以后接触Go的机会会非常多,所以今天就进行总结。 Cobra 其实就是翻译Cobra的README内容https://github.com/spf13/cobra,不过对应的中文翻译https://o-my-chenjian.com/2017/09/20/Using-Cobra-With-Golang/ 基本概念这里不过多的叙述,也就是commands,arguments,和flags Generator的使用 这里主要介绍下Generator,因为Generator是一个非常好用的工具,可以非常方便的添加commands。 基本命令 cobra init:初始化 c...阅读全文

博文 2019-02-22 17:34:45 随笔6

Go语言类型switch

switch还可以用于判断变量类型。使用方式为T.(type),即在变量后加上.(type)。见代码: package main import ( "fmt" ) func main() { var a interface{} a = "abc" switch t := a.(type) { case string: fmt.Printf("string %s\n", t) case int: fmt.Printf("int %d\n", t) default: fmt.Printf("unexpected type %T", t) } } 输出结果为: string abc 如果将上面的: var a interface{} a = "abc" 这两句,合成一句: a := "abc" 编...阅读全文

博文 2015-03-08 03:00:01 baiyuxiong

json编码,用map转换的问题。

go action 中一个例子,如下,转换的时候,为什么不能转换成map[string]string类型呢?确实就是这个类型啊 会报错,报错就是说不是这个类型,是map[string]interface{}类型,为什么是这个类型呢?劳烦哪位可以帮着解答一下,谢谢。 错误信息: > panic: interface conversion: interface {} is map[string]interface {}, not map[string]string interface{} 不是可以接受任何类型么?为什么提示这个错误呢? ```go // This sample program demonstrates how to decode a JSON string. ...阅读全文

Golang数据类型和变量

数据类型 先来介绍一下Golang的数据类型。 布尔型 bool类型代表逻辑值,有真值true和假值false两种取值。 整数类型 整数类型有如下几种,这些整数都是有符号的类型,它们的无符号版本是类型名前面添加u,例如uint32。 类型 长度 int8 1字节 int16 2字节 int32 4字节 int64 8字节 除此以外,还有比较特殊的几种类型。 类型 长度 备注 byte 1字节 是int8的别名 int 和系统有关 有符号整数 uint 和系统有关 无符号整数 uintptr 和系统有关 指针类型 rune 4字节 是int32的别名,代表Unicode代码点 浮点数类型 有两种浮点数,单精度float32和双精度float64,类似于Java语言中的float和double。...阅读全文

博文 2017-06-01 14:07:30 乐百川

golang 读取ini文件

main.go package main import ( "fmt" "gopkg.in/ini.v1" "log" ) func main() { cfg, err := ini.Load("config.ini") getErr("load config", err) // 遍历所有的section for _, v := range cfg.Sections(){ fmt.Println(v.KeyStrings()) } // 获取默认分区的key fmt.Println(cfg.Section("").Key("version").String()) // 将结果转为string fmt.Println(cfg.Section("").Key("width").Float64()...阅读全文

30分钟上手GO语言--方法和接口

方法和接口 这章讲如何为类型定义方法;如何定义接口;以及如何将所有内容贯通起来。 方法:Go 没有类,但可以在结构体类型上定义方法。 package main import ( "fmt" "math" ) type Vertex struct { X, Y float64 } func (v *Vertex) Abs() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } func main() { v := &Vertex{3, 4} fmt.Println(v.Abs()) } 可以对包中的 任意 类型定义任意方法,而不仅仅是针对结构体。但是,不能对来自其他包的类型或基础类型定义方法...阅读全文

来参加NULS2.0造链黑客马拉松,赢近50万美元奖励!

NULS核心团队于2019年7月8日,正式开启了NULS2.0的全球公测,并同步推出了10分钟造链产品NULS Chain Box。为了丰富NULS模块仓库,满足更多应用场景需求,激励开发者参与体验造链,NULS核心团队发起了基于NULS2.0造链的全球黑客马拉松。本次大赛奖励丰厚,总值近50万美元。区块链的赛道上惊喜与挑战并存,我们希望每一个渴求创新与创造,并享受创造所带来成就感的开发者,都可以来参与本次大赛,成为领跑者赢取丰厚奖励。另外,如果您推荐开发者参与本次大赛,也能获得推荐人奖励。大赛规则 大赛时间2019年7月8日——2019年8月20日参赛作品要求1、基于NULS2.0的微服务架构,开发能够实现具体应用场景的模块,或者基于NULS2.0开发支持区块链生态的扩展模块,开发完成的模...阅读全文

博文 2019-07-10 17:03:06 NULS社区

golang map类型转换遇到的坑

map想必大家都很熟悉了,下面简单记录一下今天开发遇到的坑。基本概念>字典(Map)字典是一组无序的,键值对的集合。字典也叫做关联数组,因为数组通过索引来查找元素,而字典通过键来查找元素。当然,很显然的,字典的键是不能重复的。如果试图赋值给同一个键,后赋值的值将覆盖前面赋值的值。例如:x := make(map[string]interface{})y := make(map[string]interface{})y["name"] = "echo"y["ege"] = 28x["str"] = y如果我将以上的x返回,输出打印for k,v := range x["str"] { utils.display(v["name"])}执行后将报错,因为y,x定义的类型不同,正确x值的类型应该为...阅读全文

博文 2018-06-27 01:34:41 dok8s

golang断言

类型断言 type assertion 和上节的类型转换不同,类型断言是将接口类型的值x,转换成类型T。 格式为: x.(T) v := x.(T) v, ok := x.(T) 类型断言的必要条件是x是接口类型,非接口类型的x不能做类型断言: var i int = 10 v := i.(int) //错误 T可以是非接口类型,如果想断言合法,则T应该实现x的接口。 T也可以是接口,则x的动态类型也应该实现接口T。 var x interface{} = 7 // x 的动态类型为int, 值为 7 i := x.(int) // i 的类型为 int, 值为 7 type I interface { m() } var y I s := y.(string) // 非法: string ...阅读全文

博文 2020-02-13 09:32:48 哆啦在这A梦在哪

cgo

golang与C有着千丝万缕的联系,go代码中可以调用C代码 由于项目需要,新使用的golang语言需要调用C语言写的加解密函数,所以用到了cgo,在此记录一点使用心得 如何调C代码 非常简单,只需要两步 在golang代码开始部分(package xxx之后),添加注释,注释中编写需要使用的C语言代码 紧挨着注释结束,另起一行增加import "C",注意跟注释中的C代码紧挨,不要有空行,且不要跟其他golang的import放在一起 这样在golang语言的正文中就可以用C.xxx的方式调用注释中的C代码了 demo package main // #include // #include /* void print(char *s) { pri...阅读全文

博文 2017-10-23 09:04:52 风千寻艾

Go 语言 接口(Interface)

What is Interface type in Go ? GoLang官网language specification文档对interface type的概念说明如下: An interface type specifies a method set called its interface. A variable of interface type can store a value of any type with a method set that is any superset of the interface. Such a type is said to implement the interface. The value of an uninitialized variab...阅读全文

博文 2018-08-18 23:34:51 小杰的快乐时光

GO语言面试系列:(九)golang强制类型转换示例(usafe包)

题目: 设计父结构体—员工。子结构体:工人,农民,教师,科学家(scientist),服务生。 (1)其中工人,农民,服务生只有基本工资。(10分) (2)教师除基本工资外,还有课酬(元/天)。(10分) (3)科学家除基本工资外,还有年终奖。(10分) 编写一个测试结构体,将各种类型的员工的全年工资打印出来。(10分) 代码示例: package main import ( "fmt" "unsafe" ) type Employee struct { //基本工资 BaseWage float64 eType E_TYPE //员工类型 } type E_TYPE string const ( WORKER E_TYPE = "工人" FARMER = "农民" TEACHER2 = "...阅读全文

博文 2018-12-05 17:34:54 Chole121

Go 中的反射要点

简介 反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是Go语言中的反射模型。 类型以及接口 这个基本概念需要清晰,这里不详细展开。 基本类型就是一个值,接口类型是(值,类型)对。 看下面两个图: 当然还有一些内存优化的东西,这里也不展开。 接口对象到反射对象 反射只是从接口变量里面读取类型和值对。类型和值就是我们要的反射对象。package main import ( "fmt" "reflect") func main() { var x float64 = 3.4 fmt.Println("type:", reflect.TypeOf(x))}类型// TypeOf returns the reflection Type...阅读全文

博文 2015-09-26 03:00:01 bnbqian

golang将结构体转换成json,json转换成结构体

1、将结构体转换成json需要用到marshl函数(或者marshlIndent()函数)。 区别:marshl函数没有将json格式化输出,输出是一个json的字符串。----不利于直接查看json的结构。maeshldent函数 可以将json格式化输出,可阅读性提高了。 2、将json字符串转换成结构体需要用到marshl()函数。 实例如下: ```go package main import ( "log" "encoding/json" "fmt" ) type Movie struct{ Title string Year int `json:"released"` Color bool `json:"color, omitempty"` Actors []string } f...阅读全文

博文 2018-08-23 19:08:58 yuluxs

Go和C类型对应关系

C.char C.schar (signed char) C.uchar (unsigned char) C.short C.ushort (unsigned short) C.int C.uint (unsigned int) C.long C.ulong (unsigned long) C.longlong (long long) C.ulonglong (unsigned long long) C.float C.double. unsafe.Pointer (void*) // Go string to C string func C.CString(string) *C.char var val []byte (*C.char)(unsafe.Pointer(&val[0])...阅读全文

博文 2016-04-17 23:00:01 fyxichen

Go语言中 select 和 switch 的比较

select 和 switch 是 Go语言中进行分支操作的两个方式,各有各的应用场景。 select select只能应用于channel的操作,既可以用于channel的数据接收,也可以用于channel的数据发送。 如果select的多个分支都满足条件,则会随机的选取其中一个满足条件的分支, 如语言规范中所说: If multiple cases can proceed, a uniform pseudo-random choice is made to decide which single communication will execute. `case`语句的表达式可以为一个变量或者两个变量赋值。 有default语句。 下面的代码是 go by example 上的例子: 1...阅读全文

博文 2017-07-08 10:18:23 smallnest

C#与golang常用数据类型对应关系

C# golang proto 范围 sbyte int8 int32 -128->127 short int16 int32 -32768->32767 int int32 int32 -2 147 483 648->2 147 483 647 long int64 int64 -9 223 372 036 854 775 808->9 223 372 036 854 775 807 byte unit8或byte int32 0->255 ushort unit16 uint32 0->65535 uint unit32 uint32 0->4 294 967 295 ulong unit64 uint64 0->18 446 744 073 709 551 615 decimal fl...阅读全文

博文 2015-09-25 03:00:00 ha666

Go语言string,int,int64 ,float转换

(1)int转strings := strconv.Itoa(i)等价于 s := strconv.FormatInt(int64(i), 10)(2)int64转stringi := int64(123)s := strconv.FormatInt(i, 10)第二个参数为基数,可选2~36注:对于无符号整形,可以使用FormatUint(i uint64, base int)(3)string转int1i, err := strconv.Atoi(s)(4)string转int641i, err := strconv.ParseInt(s, 10, 64)第二个参数为基数(2~36),第三个参数位大小表示期望转换的结果类型,其值可以为0, 8, 16, 32和64,分别对应 int, i...阅读全文

博文 2019-08-23 15:32:53 麦子时光_新浪微博

chan中传递map数据,传递的是引用

写个demo测试一下,channel中传递的是数据的拷贝,还是引用? 预期:传递的是引用类型 package main import ( "fmt" ) func main() { var sliceChan chan [2]map[string]int = make(chan [2]map[string]int, 2) //construct array m1 := map[string]int{ "rows":12, } m2 := map[string]int{ "columns":10, } bulk := [2]map[string]int{m1, m2} //directly read then sliceChan <- bulk e := <-sliceChan fmt.Pri...阅读全文

博文 2018-03-25 16:34:38 欧阳少辰

Go 面向对象概念

前言: 本文是学习<> -- 清华大学出版社(王鹏 编著) 的2014年1月第一版 做的一些笔记 , 如有侵权, 请告知笔者, 将在24小时内删除, 转载请注明出处! 1. 对象 - 任意简单的内置数据类型 - 任意复杂的结构体 - 表示具体的事物 / 抽象的规则 / 计划 / 事件 等. 2. 对象的状态 - 用数值来描述, 如长方体的长和宽等. 3. 对象的操作 - 用于改变对象的状态, 操作就是对象的行为. - GO语言中称为Method(方法), Method 就是在 函数(function) 前面增加了一个接收者(Receiver)对象. 将操作和对象关联起来了. - 定义: func (recv receiver_type) methodName(args)(...阅读全文

博文 2015-09-30 03:00:01 roger9567

golang 结构体笔记

一、概念 结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员。 二、结构体声明及使用 // 声明结构体 type Employee struct { ID int Name string } func main() { // 结构体实例化 emp := Employee{ID: 1, Name: "Frod"} // 匿名字段实例化 emp2 := Employee{1, "Frod2"} fmt.Println(emp) fmt.Println(emp2) } 三、聚合结构 golang没有继承的概念, 推崇的是类聚合 type Address struct { Province string City string Detail string } ...阅读全文

博文 2016-02-01 17:00:00 loveyx

golang字符转换

golang是强类型语言,在应用过程中类型转换基本都会用到。下面整理一下常用的类型转换,会持续更新。整形转字符串fmt.Println(strconv.Itoa(100))该方法的源码是:// Itoa is shorthand for FormatInt(i, 10).func Itoa(i int) string { return FormatInt(int64(i), 10)}可以看出是FormatInt方法的简单实现。字符串转整形i, _ := strconv.Atoi("100")fmt.Println(i)64位整形转字符串var i int64i = 0x100fmt.Println(strconv.FormatInt(i, 10))FormatInt第二个参数表示进制,10表...阅读全文

博文 2019-07-30 21:32:40 萌小熙喵

Golang中的接口与鸭子类型

1 接口的定义与理解 接口是一个自定义类型,它是一组方法的集合。从定义上来看,接口有两个特点。第一,接口本质是一种自定义类型,因此不要将golang中的接口简单理解为C++/Java中的接口,后者仅用于声明方法签名。第二,接口是一种特殊的自定义类型,其中没有数据成员,只有方法(也可以为空)。 接口是完全抽象的,因此不能将其实例化。然而,可以创建一个其类型为接口的变量,它可以被赋值为任何满足该接口类型的实际类型的值。接口的重要特性是: (1)只要某个类型实现了接口要的方法,那么我们就说该类型实现了此接口。该类型的值可以赋给该接口的变量; (2)作为1的推论,任何类型的值都可以赋值给空接口interface{} 注意:这只是golang中接口的特性,为非所有类型的特性(接口是一种特殊的类型)。 ...阅读全文

博文 2017-02-09 17:25:40 说话的白菜

go语言基本语法——常量constant

一、常量的使用1.1 常量声明常量是一个简单值的标识符,在程序运行时,不会被修改的量。const identifier [type] = value 显式类型定义: const b string = "abc" 隐式类型定义: const b = "abc" package main ​ import "fmt" ​ func main() { const LENGTH int = 10 const WIDTH int = 5 var area int const a, b, c = 1, false, "str" //多重赋值 ​ area = LENGTH * WIDTH fmt.Printf("面积为 : %d", area) println() println(a, b, c) }运...阅读全文

任意数据类型切片 golang

package main import ( "fmt" . "strconv" ) type Element interface{} type List []Element type Person struct { name string age int } func (P Person) String() string { return "My name is " + P.name + " my age is " + Itoa(P.age) } var slice_1 = []string{"hello"} var map_1 = map[string]string{"city": "beijing", "name": "cs", "from": "usa"} func main() { ...阅读全文

博文 2015-06-17 20:18:50 yatere

golang: 详解interface和nil

golang的nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。nil是预先说明的标识符,也即通常意义上的关键字。在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic。对此官方有明确的说明:http://pkg.golang.org/pkg/builtin/#Type golang中的interface类似于java的interface、PHP的interface或C++的纯虚基类。接口就是一个协议,规定了一组成员。这个没什么好说的,本文不打算对宏观上的接口概念和基于接口的范式编程做剖析。golang语言的接口有其独到之处:只要类型T的公开方法完全满足接口...阅读全文

博文 2014-10-04 19:26:54 陈一回

Golang全面深入系列之 Error

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 Go errors简介 在Go的惯用法中,返回值不是整型等常用返回值类型,而是用了一个 error(interface类型)。 // The error built-in interface type is the conventional interface for // representing an error condition, with the nil val...阅读全文

博文 2018-03-19 17:33:04 90design

go - 内置基础类型

Go 语言中包括以下内置基础类型: 布尔型:bool 整型:int int64 int32 int16 int8 uint8(byte) uint16 uint32 uint64 uint 浮点型:float32 float64 复数型:complex64 complex128 字符串:string 字符型:rune 错误型:error 1. bool类型 关键字: bool 可定义为: true 或者 false 或者 逻辑表达式 var bool1 bool = true var bool2 bool = (2 == 2) 注:不能接受其他类型的赋值,包括(0, 1),也不支持自动或强制类型转换 2. 整型 分为有符号与无符号两种 值范围,如: int8 2^8 -128~127, ui...阅读全文

博文 2014-10-04 19:26:54 dyllove98