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

golang map to struct

map映射到结构体,这里只支持简单的数据类型,复杂的需要在拓展 package main import ( "errors" "fmt" "reflect" "strconv" "time" ) type User struct { Name string Age int8 Date time.Time } func main() { data := make(map[string]interface{}) data["Name"] = "张三" data["Age"] = 26 data["Date"] = "2015-09-29 00:00:00" result := &User{} err := FillStruct(data, result) fmt.Println(err, fmt...阅读全文

博文 2015-09-29 16:00:03 别人说我名字很长

golang中的类和接口的使用

类使用:实现一个people中有一个sayhi的方法调用功能,代码如下: type People struct { //.. } func (p *People) SayHi() { fmt.Println("************************* say hi !!") } func (this *LoginController) Get() { p := new(People) p.SayHi() this.TplName = "login.html" } 接口使用:实现上面功能,代码如下: type People struct { //.. } func (p *People) SayHi() { fmt.Println("*************************...阅读全文

博文 2016-04-26 01:00:00 vipstone

Go中map的创建和初始化

// code_014_map_usage project main.go package main import ( "fmt" ) func main() { /*Go语言中的map(映射,字典)是一种内置的数据结构,它是一个无序的key-value对的集合。 1)键的约束: 在一个map里所有的键都是唯一的,而且必须是支持==和!=操作符的类型 2)切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键 err, invalid map key type []string 3)map值: 可以是任意类型,没有限制。 4)键值的数据类型: map里所有键的数据类型必须是相同的,值也必须如何,但键和值的数据类型可以不相同。 5)注意:map是无序的,我们无法决定它的返回...阅读全文

博文 2018-10-05 01:35:15 ck_god

golang excel

github.com/tealeg/xlsx 封装的接口简单易用 package main import ( "bufio" "fmt" "github.com/tealeg/xlsx" "os" "strings" ) func main() { if len(os.Args) != 3 { fmt.Printf("Usage : %s inFile outFile\n", os.Args[0]) return } inFileName := os.Args[1] outFileName := os.Args[2] inFh, err := os.OpenFile(inFileName, os.O_RDONLY, 0755) if err != nil { fmt.Printf("open...阅读全文

博文 2015-04-04 03:00:00 rojas

关于《我为什么放弃Go语言》的讨论

CSDN 上有一篇文章 [《我为什么放弃Go语言》](http://blog.csdn.net/liigo/article/details/23699459),在 golang-china 讨论组引发了一些讨论,为了便于墙内 gopher 们阅读,选择了一些有价值的评论发在这里。(重点关注 minux 大神的回复) 刘鑫: 无所谓啦,本来就是个工具语言,没必要人人都去拜。对自己好用,就用实际行动来支持,这不比打嘴炮好多了。从来没有一门编程语言能让所有人都满意。何况人家文章里有些东西写的还是挺有道理。特别是社区的态度问题。去年我说某IDE的插件不能识别不可达的逻辑,一大群人出来教育我说go语言本来就这么设计的。只有巢鹏一个人的博客上写着这是go官方2009年就明明白白列出来的一个...阅读全文

golang笔记:unsupported driver -> Scan pair: -> *string

golang里,操作mysql数据库,使用查询语句的时候,一般的写法 rows, err := db.Query("SELECT name from table) if err != nil { return } for rows.Next() { var name string err = rows.Scan(&name) if err != nil { return } } 当查出来的字段有NULL的时候,就会报这样的错误unsupported driver -> Scan pair: -> *string 这又是由于Go语言对数据类型的严格限制。name的类型是string,所以只能接受string类型的值,而此处nil是为空的指针类型。最佳解决办法是——插入记录的时候不要...阅读全文

golang学习的点点滴滴:接口复制和接口查询

package main import "fmt" type IFile interface { Read() Write() } type IReader interface { Read() } type File struct { } func (f *File) Read() { } func (f *File) Write() { } func main() { f := new(File) var f1 IFile = f // ok 因为FIle实现了IFile中的所有方法 var f2 IReader = f1 // ok 因为IFile中包含IReader中所有方法 // var f3 IFile = f2 // error 因为IReader并不能满足IFile(少一个方...阅读全文

博文 2014-10-04 19:27:40 亓斌哥哥

Golang hashmap 的使用及实现

基本语法 定义hashmap变量 由于go语言是一个强类型的语言,因此hashmap也是有类型的,具体体现在key和value都必须指定类型,比如声明一个key为string,value也是string的map, 需要这样做 var m map[string]string // 声明一个hashmap,还不能直接使用,必须使用make来初始化 m = make(map[string]string) // 初始化一个map m = make(map[string]string, 3) // 初始化一个map并附带一个可选的初始bucket(非准确值,只是有提示意义) m := map[string]string{} // 声明并初始化 m := make(map[string]string) ...阅读全文

博文 2017-08-22 10:05:03 51reboot

雨痕新作《Go语言学习笔记》出版了

《Go语言学习笔记》——雨痕著 出版了。购买地址: - [china-pub](http://product.china-pub.com/4971695) - [京东](http://item.jd.com/10466396823.html) 目录: ``` 上卷 语言详解 第1 章 概述 ............... 3 1.1 特征 ....................... 3 1.2 简介 ....................... 6 第2 章 类型 ..............18 2.1 变量 ..................... 18 2.2 命名 ..................... 22 2.3 常量 ........................阅读全文

golang 中的 type switch 类型判断

golang 语言中 也有 类是 javascript 的 typeof 判断类型的 方法 比如 func (a interface{}){ //第一种 if inst,ok:=a.(TypeA);ok{ inst.MethodA() } //第二种 switch inst:=a.(type){ case TypeA: inst.MethodA() default: fmt.Println("unknow") } } a可能是任意类型 a.(某个类型) 返回两个值 inst 和 ok ,ok代表是否是这个类型,Ok如果是 inst 就是转换后的 类型 a.(type) type是关键字 结合switch case使用 TypeA(a) 是强制转...阅读全文

博文 2014-10-04 19:26:55 健哥大人

golang interface赋值

说说我对golang的interface赋值的理解。 先说golang中类型方法定义。 如 type bird struct { id int } func (b bird) fly() { fmt.Println("fly") } func (b *bird) eat() { b.id++ } 中bird类型有两个方法,fly和eat。 两个方法是有区别的,fly由(b bird)绑定,eat由(b *bird)绑定。 在应用中,(b *bird)绑定方式可以修改对象中的参数,而(b bird)方式则不可以。 再来说接口的赋值。接口赋值可以分为对象对接口的赋值和接口对接口的赋值。 对象对接口的赋值需要对象完全实现接口定义的所有方法。 如定义如下接口 type animal interfac...阅读全文

博文 2015-06-17 20:02:23 iwbno1

Go:保留关键字及基本数据类型

1 命名规范 在Go中几乎所有的东西都是有名字或标识符的(类似于C家族语言),且它们是对大小写敏感的。相应的规则如下: 必须以字符开头(所有Unicode UTF-8中的字符 或 下划线“_”)后面可以跟0或多个字符或数字,如:x56, _x32等。不能以数字开头或系统保留关键字和操作符。如:1ab, case, a+b。下划线"_"本身在Go中是一个特殊的标识符,称为空标识符。可以代表任何其它的标识符,但是它对应的值会被忽略。所以仅能被作为占位符使用。 同时,在Go中也支持匿名,如匿名变量、自定类型和函数。 2 系统关键字或保留字 在Go中,为了简化代码编译过程中对代码的解析,其定义的保留关键字只有25个。详见如下: break default func interface select ...阅读全文

博文 2014-10-10 20:00:01 aaron_ye

golang语法总结(八):类型零值、类型别名、类型转换

类型零值 变量声明为某种类型后的值就为该类型的零值,它不是空值。通常数值类型默认为0,bool为false,string为空字符串 类型别名 比如: type text stringfunc main() { var t text = "hello world" fmt.Println(t)} 类型转换 Go语言不存在隐式转换,必须显式转换,并且只能在两种相互兼容的类型间转换,转换示例: a := 3.14b := int(a)fmt.Println(b)var c int32 = 256var d = float64(c)fmt.Println(d...阅读全文

博文 2016-02-22 14:00:07 QQ245671051

一个简单GOLANG路由

package controllers import ( . "logger" "web" ) //对象继承直接拥用REST标准接口 type login struct { web.ControllerBase } func (this *login) Get() { this.Template["key"] = "value" this.WriteString("GET:", this.Template) } func (this *login) Post() { this.WriteString("POST:", this.Template) } //对象不继承注册一个方法到路由 type signOut struct { } func (this *signOut) signOutGe...阅读全文

博文 2015-06-17 20:18:49 x_focus

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 int64 i = 0x100 fmt.Println(strconv.FormatInt(i, 10)) FormatI...阅读全文

博文 2015-10-14 13:53:14 陈杰斌

GO语言Comma-ok断言

Comma-ok断言的语法是:value, ok := element.(T)。element必须是接口类型的变量,T是普通类型。如果断言失败,ok为false,否则ok为true并且value为变量的值。来看个例子: package main import ( "fmt" ) type Html []interface{} func main() { html := make(Html, 5) html[0] = "div" html[1] = "span" html[2] = []byte("script") html[3] = "style" html[4] = "head" for index, element := range html { if value, ok := elem...阅读全文

博文 2016-08-16 10:00:22 alvine008

关于golang中map的key的类型

golang中的map,的 key 可以是很多种类型,比如 bool, 数字,string, 指针, channel , 还有 只包含前面几个类型的 interface types, structs, arrays 显然,slice, map 还有 function 是不可以了,因为这几个没法用 == 来判断 原文如下: As mentioned earlier, map keys may be of any type that is comparable. The language spec defines this precisely, but in short, comparable types are boolean, numeric, string, pointer, channe...阅读全文

博文 2016-09-03 14:00:07 hificamera

golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换

golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换 #string到intint,err:=strconv.Atoi(string)#string到int64int64, err := strconv.ParseInt(string, 10, 64)#int到stringstring:=strconv.Itoa(int)#int64到stringstring:=strconv.FormatInt(int64,10) #int到int64,把int先转成字符串再转成int64,返回带err参数的需要忽略掉s := strconv.Itoa(int)s64,_ := strconv.ParseInt(s,10,...阅读全文

博文 2018-06-07 15:30:02 zdz8207

go int类型转换string,通过反射类型对比

1.在拼写string时,下面这种写法会报错:mismatched types string and int func GetErrorJsonData(status int, msg string) string { jsons := "{\"status\":" +status+ ",\"message\":\"" + msg + "\"}" return jsons }正确的写法为:需要引入"strconv"包func GetErrorJsonData(status int, msg string) string { jsons := "{\"status\":" + strconv.Itoa(status) + ",\"message\":\"" + msg + "\"}" retu...阅读全文

博文 2015-10-27 19:00:05 aqiang912

golang 断言 + 类型转换

自博客园http://my.oschina.net/u/157514/blog/148285 golang 语言中 也有类似javascript 的 typeof 判断类型的 方法 比如 func (a interface{}){ //第一种 if inst,ok:=a.(TypeA);ok{ inst.MethodA() } //第二种 switch inst:=a.(type){ case TypeA: inst.MethodA() default: fmt.Println("unknow") } } a可能是任意类型 a.(某个类型) 返回两个值 inst 和 ok ,ok代表是否是这个类型,Ok如果是 inst 就是转换后的 类型 a.(type) type是关键字 结合switch...阅读全文

博文 2015-06-17 20:03:49 u012210379

Go语言中包的风格指南

# Go语言中包的风格指南 Go 语言也有自己的命名与代码组织规则。漂亮的代码,布局清晰、易读易懂,就像是设计严谨的 API 一样。拿到代码,用户首先看到和接触的就是布局、命名还有包的结构。 这篇文章不是为了给大家设立硬性的规定,而是用实践引导大家形成自己的规则。因为具体问题要具体分析,通过自己的判断才能挑选出最恰当的规则。 ## 包 所有的 Go 代码都是以包的形式组织起来的。Go 中的包就是目录或文件夹里面包括一个或者多个以 `.go` 结尾的文件。用目录或文件夹这样的方式来管理代码,与电脑管理目录或文件夹是一样一样的。 所有的 Go 代码都是放在包里的,且只能是通过包来进行访问。理解并且建立良好的包的习惯,可以帮助写出高效的代码。 * * * ## 包的组织 我们先聊聊如何组织 Go ...阅读全文

博文 2017-12-04 07:08:17 wi-cuckoo

Go各种类型转换及函数的高级用法

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 int64 i = 0x100 fmt.Println(strconv.FormatInt(i, 10)) FormatI...阅读全文

博文 2016-02-25 18:00:00 kenkao

深入Go语言 - 2 常量、变量、动态类型和静态类型

目录 [−] 常量变量变量声明简化静态类型和动态类型 本文介绍Go语言的常量和变量的语言细节。 常量 只有数值类型和字符串类型才可以作为常量。 数值类型包括 布尔类型、rune类型、各种整型、浮点类型、复数。 常量值既可以是数值类型的字面量,也可以是字符串字面量,以及常量的等价形式, 如: 常量表达式, 如 4 * 5 转换结果是常量, 如 int(10.0) 内建函数的返回值, 如unsafe.Sizeof、cap、len 复数、实数和虚数的应用 true和false赋值给bool类型的常量 内建的 iota 用变量赋值给常量是不允许的: 12var vs = "hello world"const s = vs //错误 常量的命名还是遵循前一篇文章的介绍,所有你看到一些"奇怪"的常量名不...阅读全文

博文 2017-02-08 12:53:38 smallnest

golang http content_type

1.如果没有指定content_type的话,http包会查看文件的前512 byte,从而推测文件类型。 2.常用类型为: text/html 返回网页格式。text/plain 返回文本格式,也就说不会解析html。application/octet-stream 一般都是二进制格式,可用来下载。(这个有点复杂,不是很清楚) image/***audio/***video/**...阅读全文

博文 2015-06-17 20:17:44 rufidmx

Erlang .vs. Golang

最近研究了一阵子 Erlang , 他有20岁,而 Golang 才 5岁。 Erlang 是纯解释性的,动态的,没有数据类型的, 属于 lisp 语言家族。 而 Golang 是纯编译的, 静态的,严格数据类型的,属于 C语言家族。 Erlang 最早祭起“并发编程”的大旗,是 “并发导向”(Current Orient )的语言,强调并发运行的成员; 而 Golang 对“并发” 强调的 成员之间的通道 chan 。各有所长吧。
不过, 我 还真的不喜欢 lisp 风格, 非常不适应; 而 Golang 的 C风格则让人人通体舒泰。
Golang 的门槛相对很低, 学习曲线也极平滑。 相对比而言, Golang 的优越不是一星半点 ...阅读全文

Golang实现多线程并发下载

大家都用过迅雷等下载工具,特点就是支持并发下载,断点续传。我们这里不介绍它,这个比较复杂了,逼人也不懂。本文只介绍狭义上的简易的断点续传和狭义上的多线程下载。跟之前一样,旨在研究原理,实际生活中基本没啥用,实测下来多线程下载比单线程下载还慢。。。太丢人了。 主要讲三个方面,如何HTTP的并发下载、通过Golang进行多协程开发、如何断点续传。 HTTP的并发下载 想要并发下载,就是把下载内容分块,然后并行下载这些块。这就要求服务器能够支持分块获取数据。大迅雷、电驴这种都有自己的协议,thunder://这种,我们只研究原理,就说说HTTP协议对于并发的支持。 HTTP头 对应值 含义 Content-Length 14247 HTTP响应的Body大小,下载的时候,Body就是文件,也可以认...阅读全文

博文 2017-02-09 12:25:29 Bryce

golang package整理(strconv)

//package strconv //与字符串相关的类型转换都是通过 strconv 包实现的 //任何类型 T 转换为字符串总是成功的 //将字符串转换为其它类型 tp 并不总是可能的,可能会在运行时抛出错误 parsing "…": invalid argument //获取程序运行的操作系统平台下 int 类型所占的位数 strconv.IntSize //**********数字类型转换到字符串**/ //返回数字 i 所表示的字符串类型的十进制数 strconv.Itoa(i int) string //将 64 位浮点型的数字转换为字符串,其中 fmt 表示格式(其值可以是 'b'、'e'、'f' 或 'g'),prec 表示精度,bitSi// ze 则使用 32 表示 fl...阅读全文

博文 2015-08-01 09:00:02 ivandong_qifan

空结构体

空结构体 这篇文章探讨了我喜欢的Go数据类型,空结构体。 空结构体是一个没有field的结构体类型。这里有几个例子,有命名和匿名形式: type Q struct{} var q struct{} 所以,如果空结构体没有成员,我们该怎么使用它? width 在深入研究空结构体本身前,我想简要讨论下width。 术语width来自于gc编译器,尽管它的词源可能追溯到几十年年。 width描述了类型实例占用的字节数目。因为一个进程的地址空间是一维的,我认为witdh比size更合适。 width一个类型的属性。因为Go程序的每个值都有一个类型,值类型定义了它的witdh,一般是8比特的倍数。 我们可以发现任何值的宽度,它的类型的width使用unsafe.Sizeof()函数: var s st...阅读全文

go语言指针类型的使用

go语言的指针类型 简单地说go语言的指针类型和C/C++的指针类型用法是一样的,除了出去安全性的考虑,go语言增加了一些限制,包括如下几条: 不同类型的指针不能互相转化,例如*int, int32, 以及int64 任何普通指针类型*T和uintptr之间不能互相转化 指针变量不能进行运算, 比如C/C++里面的++, --运算 举例来说 package main import ( "fmt" ) func main() { i1 := int(1) i2 := int32(1) i3 := int64(1) p1 := &i1 p2 := &i2 p3 := &i3 p1 = (* int)(p2) p1 = (* int)(p3) p2 = (* int32)(p1) p2 = (* ...阅读全文

博文 2017-09-07 03:05:00 CodeGeek

golang: 常用数据类型底层结构分析

虽然golang是用C实现的,并且被称为下一代的C语言,但是golang跟C的差别还是很大的。它定义了一套很丰富的数据类型及数据结构,这些类型和结构或者是直接映射为C的数据类型,或者是用C struct来实现。了解golang的数据类型和数据结构的底层实现,将有助于我们更好的理解golang并写出质量更好的代码。 基础类型 源码在:$GOROOT/src/pkg/runtime/runtime.h 。我们先来看下基础类型: /* * basic types */ typedef signed char int8; typedef unsigned char uint8; typedef signed short int16; typedef unsigned short uint16; ty...阅读全文

博文 2014-10-04 19:27:03 陈一回

Go的类型断言解析

经常地我们对一个接口值的动态类型是不确定的,如方法的形参为接口类型时,此时就需要检验它是否符合我们需要的类型。类型断言是一个使用在接口值上的操作。 如果对Golang的接口和接口值的概念不熟悉,看这里:Go的接口总结断言类型的语法:x.(T),这里x表示一个接口的类型,T表示一个类型(也可为接口类型)。一个类型断言检查一个接口对象x的动态类型是否和断言的类型T匹配。 类型断言分两种情况:第一种,如果断言的类型T是一个具体类型,类型断言x.(T)就检查x的动态类型是否和T的类型相同。 如果这个检查成功了,类型断言的结果是一个类型为T的对象,该对象的值为接口变量x的动态值。换句话说,具体类型的类型断言从它的操作对象中获得具体的值。 如果检查失败,接下来这个操作会抛出panic,除非用两个变量来接...阅读全文

博文 2017-10-20 08:06:27 susufufu

golang入门篇-基础类型

golang有如下基本类型: 整数类型: int8、int16等等 浮点类型:float32、float64 布尔类型:bool 复数类型: complex64、complex128 字符串类型: string 字符类型: byte、rune 整数类型 整型转换 golang中的编译器不会做隐式的类型转换,int和int32是俩种不同的类型。 var value2 int32 value1 := 64 // value1将会被自动推导为 int类型 value2 = value1 // 编译错误 value2 = int32(value1) // 强制类型转换编译通过 在做强制类型转换时,需要注意数据长度被截短而发生的数据精度损失(比如将浮点数强制转为整数)和值溢出(值超过转换的目标类型的值...阅读全文

博文 2017-10-07 19:31:38 u010990172

goLang 类型断言 type assertion

goLang有类型转换/类型断言/类型切换 1.类型断言 类型断言就是将接口类型的值(x),装换成类型(T)。格式为: x.(T) v:=x.(T) v,ok:=x.(T) 类型断言的必要条件就是x是接口类型,非接口类型的x不能做类型断言: var i int=10 v:=i.(int) //错误 i不是接口类型 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 没有实现接口 I (missin...阅读全文

博文 2018-02-05 15:34:42 soledad

Go接口详解

Go接口的设计和实现是Go整个类型系统的一大特点。接口组合和嵌入、duck typing等实现了优雅的代码复用、解耦、模块化的特性,而且接口是方法动态分派、反射的实现基础(当然更基础的是编译期为运行时提供的类型信息)。理解了接口的实现之后,就不难理解"著名"的nil返回值问题以及反射、type switch、type assertion等原理。本文主要基于Go1.8.1的源码介绍接口的内部实现及其使用相关的问题。 1. 接口的实现 (1) 下面是接口在runtime中的实现,注意其中包含了接口本身和实际数据类型的类型信息: // src/runtime/runtime2.go type iface struct { // 包含接口的静态类型信息、数据的动态类型信息、函数表 tab *itab...阅读全文

博文 2017-06-20 05:45:29 pax0s

Go实现查找目录下(包括子目录)替换文件内容

【功能】 按指定的目录查找出文件,如果有子目录,子目录也将进行搜索,将其中的文件内容进行替换。 【缺陷】 1. 没有过滤出文本文件 2. 当文件过大时,效率不高 【代码】 package main import ( "flag" "fmt" "io/ioutil" "os" "path/filepath" "strings" ) type ReplaceHelper struct { Root string //根目录 OldText string //需要替换的文本 NewText string //新的文本 } func (h *ReplaceHelper) DoWrok() error { return filepath.Walk(h.Root, h.walkCallback) } f...阅读全文

博文 2015-07-21 15:00:02 Gopher老虞

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

Go语言中隐式接口的冲突问题

Go语言中隐式接口的冲突问题 Go语言中采用的是隐式接口, 只要满足的接口的定义, 就可以当作接口使用. 比如内置的 error 接口: type error struct { Error() string } 隐式接口的好处有很多. 但我个人觉得最主要的一点就是不需要再去画祖宗八代的继承关系图了(松耦合). 但是隐式接口会带来冲突问题. 简单来说, 我也想定义一个自己的 MyError 接口, 里面也有一个 Error() string 方法: type MyError struct { Error() string } 但是我希望 MyError 接口 和 error 接口 是不同的类型 (不能相互转换). 当然, 在 Go语言中 MyError 接口 和 error 接口 是等价的, ...阅读全文

博文 2015-05-19 14:00:05 chai2010

golang中 方法集的概念,你了解么?

go规范中提到过方法集的概念,你了解么?下面的代码输出结果是啥? package main import "fmt" type t1 int type t2 int func( t *t1) String() string { return "ptr" } func( t t2) String() string { return "val" } func main() { var a t1 var b t2 a = 5 fmt.Println( a, b) } 结果分析: 指针的方法集包括两部分:(t *T)这样的方法和(t T)这样的方...阅读全文

GOLANG 基本数据类型 整型

基本数据类型-整型 种类 有符号(负号) int8 int16 int32 int64 无符号(无符号) uint8 uint16 uint32 uint64 架构特定(取决于系统位数) int uint 类型别名 Unicode字符rune类型等价int32 byte等价uint8 特殊类型 uintptr,无符号整型, 由系统决定占用位大小,足够存放指针即可,和C库或者系统接口交互 取值范围 具体类型 取值范围 int8 -128到127 uint8 0到255 int16 -32768到32767 uint16 0到65535 int32 -2147483648到2147483647 uint32 0到4294967295 int64 -9223372036854775808到9223...阅读全文

博文 2016-08-30 16:00:00 zengyz

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

golang之cgo---类型转换小试牛刀之C结构体和go结构体转换

上一篇文章讲了go与C基本类型转换(http://blog.csdn.net/freeape/article/details/51885308),但是在实际项目中用到的不仅仅是基本类型之间的转换,更多的是函数封装中的值传递和指针传递,如何在C功能函数中和Go中进行各种值和指针传递呢?根本方法还是利用基本类型,包括特别常用unsafe.Pointer   先看一个例子: package main /* #include #include #include #include #define MAX_FACES_PER_DETECT 64 typedef struct Point{ float x; float ...阅读全文

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()) } 可以对包中的 任意 类型定义任意方法,而不仅仅是针对结构体。但是,不能对来自其他包的类型或基础类型定义方法...阅读全文