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

Golang的反射reflect深入理解和示例

[TOC] Golang的反射reflect深入理解和示例 【记录于2018年2月】 编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 每种语言的反射模型都不同,并且有些语言根本不支持反射。Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的,只要包含这个包就可以使用。 多插一句,Golang的gRPC也是通过反射实现的。 interface 和 反射 在讲反射之前,先来看看Golang关于类...阅读全文

博文 2018-02-04 18:10:59 掘金

golang数据类型map

1 map简介 map是一堆键值对的未排序集合,类似Python中字典的概念,它的格式为map[keyType]valueType,是一个key-value的hash结构。map的读取和设置也类似slice一样,通过key来操作,只是slice的index只能是int类型,而map多了很多类型,可以是int,可以是string及所有完全定义了==与!=操作的类型。 在C++/Java中,map一般都以库的方式提供,比如在C++中是STL的std::map<>,在Java中是Hashmap<>,在这些语言中,如果要使用map,事先要引用相应的库。而在Go中,使用map不需要引入任何库,并且用起来也更加方便。 2 map声明 声明map的语法如下 var map变量名 map[key] valu...阅读全文

博文 2015-06-17 20:17:47 JesseYoung

Golang interface接口全面理解(一)

There are three kinds of time: the future is late, and now it is flying like an arrow. The past will never stand still. 时间的步伐有三种:未来姗姗来迟,现在像箭一般飞逝,过去永远静立不动。 什么是interface 在面向对象编程中,可以这么说:“接口定义了对象的行为”, 那么具体的实现行为就取决于对象了。 在Go中,接口是一组方法签名。当一个类型为接口中的所有方法提供定义时,它被称为实现该接口。它与oop非常相似。接口指定类型应具有的方法,类型决定如何实现这些方法。 创建和实现interface 在Golang中只要实现了接口定义的方法,就是(JAVA implement...阅读全文

博文 2018-03-12 15:33:08 90design

Go语言 time时间格式转换

最近做项目用到golang语言,遇到时间格式相互转换的问题,参考网上资料自己写了代码测试了下,能够成功转换,把代码贴出来以备后用,也供需要者查看。 // time_format.go package main import ( "fmt" "time" ) func main() { fmt.Println("Hello World!") //返回现在时间 tNow := time.Now() //时间转化为string,layout必须为 "2006-01-02 15:04:05" timeNow := tNow.Format("2006-01-02 15:04:05") fmt.Println("tNow(time format...阅读全文

博文 2015-06-17 23:00:50 qq_534019165

golang将byte的int转换

在使用golang做数据传输的时候,会经常遇到byte与int的互转,但golang并没有现成的方法,因此只能通过binary包来解决 所以,需要 :import "encoding/binary",又因为是byte的转换,所以还涉及到了bytes:import "bytes" 代码如下: package main import ( "bytes" "encoding/binary" "fmt" "strings" ) func main() { b : = []byte{0x00, 0x00, 0x03, 0xe8} b_buf : = bytes .NewBuffer(b) var x int32 binary.Read(b_buf, binary.BigEndian, &x) fmt....阅读全文

博文 2014-10-04 19:27:14 kuerant

Golang中Slice的append详解

在Golang语言中,数据类型不多,但是够用,开发项目过程中,Slice属于最常用的数据结构之一,对其原理理解不清楚,很容易会遗留bug,笔者查询了很多博客资料,对Slice的append原理进行一个总结,如果有写的不清楚不明白之处,请多多包涵,并予以指正。 package main import "fmt" func main(){ s := []int{5} s = append(s,7) fmt.Println("cap(s) =", cap(s), "ptr(s) =", &s[0]) s = append(s,9) fmt.Println("cap(s) =", cap(s), "ptr(s) =", &s[0]) x := append(s, 11) fmt.Println("c...阅读全文

博文 2017-09-05 07:34:51 tomorrowwu

Go语言中的 Array, Slice和 Map

介绍 曾经学习python的时候,记得书上说 dict 是 python的 horsepower(动力)。然后,Slice 和 Map 又何尝不是 golang 的 workhorse 呢? Array 是值类型,Slice 和 Map 是引用类型。他们是有很大区别的,尤其是在参数传递的时候。 另外,Slice 和 Map 的变量 仅仅声明是不行的,必须还要分配空间(也就是初始化,initialization) 才可以使用。 第三,Slice 和 Map 这些引用变量 的 内存分配,不需要你操心,因为 golang 是存在 gc 机制的(垃圾回收机制) Array 的用法 数组的声明(这里就是定义,给数据存储分配了空间): var arrayName [arraySize] dataType...阅读全文

博文 2015-03-26 10:00:01 xiaorenwuzyh

GO语言的一些简单数据类型之间相互转换

在GO语言的使用过程中总会遇到一些类型之间相互转换的问题,做了一个简单的总结。只列出了几种易用的类型间的转换,如果用到其他类型间的数据类型格式转换,查看GO文档是很不错的选择。 strconv包实现了基本数据类型和其字符串表示的相互转换。 //string到int value_int,err:=strconv.Atoi(string) //int到string str:=strconv.Itoa(value_int) //string到int64 value_int64, err := strconv.ParseInt(string, 10, 64) //int64到string,需注意下面转换规定 //FormatInt returns the string representation ...阅读全文

博文 2015-06-23 23:02:19 qq_534019165

golang中结构体的初始化方法(new方法)

自定义一个结构体 type Rect struct { x, y float64 width, height float64 } 初始化方法: rect1 := new(Rect) rect2 := &Rect{} rect3 := &Rect{0, 0, 100, 200} rect4 := &Rect{width:100, height:200} 注意这几个变量全部为指向Rect结构的指针(指针变量),因为使用了new()函数和&操作符.而如果使用方法 a := Rect{} 则表示这个是一个Rect{}类型.两者是不一样的.参考代码: func main() { rect1 := &Rect{0, 0, 100, 200} rect1.x = 10 a := Rect{} a.x = ...阅读全文

博文 2015-10-14 17:00:03 徐学良

Golang-interface(一 基本使用)

github: https://github.com/ZhangzheBJUT/blog/blob/master/interface.md 一 接口概述 如果说gorountine和channel是支撑起Go语言的并发模型的基石,让Go语言在如今集群化与多核化的时代成为一道亮丽的风景,那么接口是Go语言整个类型系列的基石,让Go语言在基础编程哲学的探索上达到前所未有的高度。 Go语言在编程哲学上是变革派,而不是改良派。这不是因为Go语言有gorountine和channel,而更重要的是因为Go语言的类型系统,更是因为Go语言的接口。Go语言的编程哲学因为有接口而趋于完美。 C++,Java 使用"侵入式"接口,主要表现在实现类需要明确声明自己实现了某个接口。这种强制性的接口继承方式是面向对...阅读全文

博文 2015-06-18 17:04:35 Crazy__Programmer

golang实现unicode码和中文之间的转换

将中文转换为unicode码,使用golang中的strconv包中的QuoteToASCII直接进行转换,将unicode码转换为中文就比较麻烦一点,先对unicode编码按\u进行分割,然后使用strconv.ParseInt,将16进制数字转换Int64,在使用fmt.Sprintf将数字转换为字符,最后将其连接在一起,这样就变成了中文字符串了。 参考代码如下: 1 package main 2 3 import ( 4 "fmt" 5 "strconv" 6 "strings" 7 ) 8 9 func main() { 10 sText := "中文" 11 textQuoted := strconv.QuoteToASCII(sText) 12 textUnquoted := t...阅读全文

博文 2016-06-29 02:00:01 borey

Go Reflect

最近在看一些go语言标准库以及第三方库的源码时,发现go的reflect被大量使用,虽然反射的机制大多数语言都支持,但好像都没有go一样这么依赖反射的特性。个人觉得,reflect使用如此频繁的一个重要原因离不开go的另一个特性,空接口interface{},reflect配合空接口,让原本是静态类型的go具备了很多动态类型语言的特征。 另外,虽然反射大大增加了go语言的灵活性,但要完全掌握它的原理和使用也还是有一点难度的。 go的reflect库有两个重要的类型: reflect.Type reflect.Value Type,Value分别对应对象的类型和值数据 还有两个重要的函数: reflect.TypeOf(i interface{}) Type reflect.TypeOf()返...阅读全文

博文 2014-10-11 10:15:04 kenshin

golang 坑集

func main() { x := 1 defer func(a int) { fmt.Println("a=", a) }(x) defer func() { fmt.Println("x=", x) }() x++ } 结果: x=2 a=1 说明: defer 调用所需参数在 defer 语句执行时就被已计算好了 (拷贝传递),闭包内则是引用,defer执行顺序FIFO 数组和slice 数组是值类型 slice是引用类型, 数组的创建 arr:=[...]int{1,2,3} arr:=[3]int{} arr:=new([10]int) (注意new返回的是[10]int的指针类) slice的创建 slice:=[]int{1,2,3} slice:=arr[n:m]( n <...阅读全文

博文 2014-10-04 19:27:11 健哥大人

Go语言的类型转换和类型断言

类型转换和类型断言是Go语言中比较绕的地方. Go语言要求所有统一表达式的不同的类型之间必须做显示的类型转换. 而作为Go语言鼻祖的C语言是可以直接做隐式的类型转换的. 当然作为const类的字面值常量是要灵活很多的. 不过Go语言必须做显示的类型转换的要求也有例外的情况: 当普通T类型变量向I接口类型转换时是隐式的! 当IX接口变量向I接口类型转换可以在编译期完成时是隐式的! 类型之间转换的例子 下面是Go语言规范给出的部分例子: *Point(p) // same as *(Point(p)) (*Point)(p) // p is converted to *Point <-chan int(c) // same as <-(chan int(c)) (<-chan int)(c) /...阅读全文

博文 2015-05-18 12:37:04 chai2010

Go 方法、接口

在 Go 中,类型可以定义接收此类型的函数,即方法。每个类型都有接口,意味着对那个类型定义了方法集合。 下面定义了结构体类型 S 以及它的两个方法: type S struct { i int } func (p *S) Get() int { return p.i } func (p *S) Put(v int) { p.i = v } 方法 方法就是有接收者的函数。 可以在除了非本地类型(包括内建类型,比如 int)的任意类型上定义方法。然而可以为内建类型定义别名,然后就可以为别名定义方法。如 type Foo int // 为 int 定义别名 Foo func (self Foo) Emit() { fmt.Printf("%v", self) } 接口 接口定义为一个方法的集合。方...阅读全文

golang之cgo一---go与C基本类型转换

在嵌入式开发中总少不了和C/C++打交道,而在开发中也总有某些需求要用到某些其他工具的特性,比如go语言。 Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 Go语言的语法接近C语言,但是对于变量的声明是不同的,其他语法不同之处是For循环和if判断语句不需要用小括号括起来。Go语言支持垃圾回收功能。 与C++相比,Go语言并不包括如异常处理、继承、泛型、断言、虚函数等功能,但增加了slice型、并发、管道、垃圾回收、接口(interface)等特性的语言级支持。    当前有两个Go语言的编译器的分支。官方编译器gc和gccgo。官方编译器支持跨平台编译(但不支持CGO)   go还可以嵌入C代码,但是不可以...阅读全文

博文 2016-07-12 01:00:08 FreeApe

Go 系列教程 —— 4. 类型

这是我们 Golang 系列教程的第 4 个教程。 请阅读本系列的 [Golang 教程第 3 部分:变量](/articles/11756) 来学习变量的知识。 下面是 Go 支持的基本类型: - bool - 数字类型 - int8, int16, int32, int64, int - uint8, uint16, uint32, uint64, uint - float32, float64 - complex64, complex128 - byte - rune - string ### bool bool 类型表示一个布尔值,值为 true 或者 false。 ```go package main import "fmt" func main() { a := true b :...阅读全文

博文 2017-12-07 06:24:41 heyulong

golang面向对象总结

[plain] view plaincopy type $name struct{ property01 int property02 int } Golang里面的方法和接口都是基于这里type *** struct创建的类型,这里其实可以理解为: [php] view plaincopy class $name { public int property01; public int property02; } 类型就是类。 所以我们说是类型的某个方法,类型实现了某个接口。 类型是属性的集合,接口是方法的集合 函数的定义:func $funcName ( ) ( ){} 方法的定义:func ( ) $funcName ( ) ( ){} Func (成员变量 类型) funname(局部...阅读全文

博文 2015-06-17 20:02:17 erlang_team

golang type 和断言 interface{}转换

摘要 类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关 注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说通常需要手动转换,是 因为interface类型作为一个特例,会有不同的处理方式。 类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要 去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说通常需要手动转 换,是因为interface类型作为一个特例,会有不同的处理方式。 golang中的所有类型都有自己的默认值,对此我做了个测试。 $GOP...阅读全文

博文 2016-07-05 05:00:10 zhangym

golang将interface{}转换为struct

项目中需要用到golang的队列,container/list,需要放入的元素是struct,但是因为golang中list的设计,从list中取出时的类型为interface{},所以需要想办法把interface{}转换为struct。 这里需要用到interface assertion,具体操作见下面代码: 1 package main 2 3 import ( 4 "container/list" 5 "fmt" 6 "strconv" 7 ) 8 9 type People struct { 10 Name string 11 Age int 12 } 13 14 func main() { 15 // Create a new list and put some numbers ...阅读全文

博文 2017-12-28 19:00:07 lit10050528

Go学习笔记之基础数据类型

1 整数 在 Go 语言中,如果不加特殊前缀,都是10进制表示,例如:“100” 整数可以直接用指数形式,例如:“1E9”,意思是 1 * (10^9),1 乘以 10 的 9 次方 整数的加减法用 + 和 - 号,乘法用 * 号,除法用 / 号, 得到的商是整数,例如 5 / 2 = 2,而 % 号是求余(取模), 例如 5 % 2 = 1 在 Go语言中,整数类型分为带符号整型和不带符号整型,接着又分别按照长度各自划分为4个类型。 带符号整型 int8 int16 int32 int64 不带符号整型 uint8 uint16 uint32 uint 64 除此之外还有默认类型 int 和 uint,目前都是32位,未来可能会变成64位 还有2个特殊的整型别名 ,和字符串很相关,分别是:...阅读全文

博文 2014-10-12 21:00:11 hnxxwyq

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: 详解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-11-20 22:00:00 kai_ding

Golang基本类型整理

总是用的用的就模糊了,不知道基本的类型有哪些,看来要反反复复弄几次。 Golang基本类型整理 基本类型以及定义变量需要注意的 对于基本类型的介绍,感觉这个博客讲的比较透彻,基本上都是从源码的角度来入手分析的,自己并没有理解到这么深入的程度,这里跟着文章过一下,挑一些主要的部分记录一下。在go语言中,数据类型分为静态类型和底层类型,感觉底层类型是golang实现的时候所使用的c语言的类型,而静态类型仅仅是针对于go语言本身而言所定义好的类型。具体的信息可以查看$GOROOT/src/runtime/runtime.h 可以看到golang中的byte类型,通过typedef uint8 byte来定义,这样在golang中直接使用反射 package main import ( "fmt" ...阅读全文

博文 2015-06-23 03:00:00 Goden

golang 接口interface{}、断言、switch type

interface{} 可以接受任何类型的对象值 获取interface{}队形的数据类型,可以使用断言,或者 switch type 来实现 // Assertion project main.go package main import ( "fmt" ) type Bag struct { Key string } type Bag2 struct { Key int } func main() { var b1 interface{} var b2 interface{} b1 = Bag{Key: "1"} b2 = Bag2{Key: 0} //获取interface{}中存放的数据类型 //方法一: { //判断是否是Bag类型 若不是则置0 b, ok := b1.(Bag)...阅读全文

博文 2016-03-03 16:00:01 xia_xing

go语言实现遍历目录,及查找特定的文件类型

1 // filelist.go 2 package main 3 4 import ( 5 //"flag" 6 "fmt" 7 "os" 8 "path/filepath" 9 "strings" 10 ) 11 12 var ( 13 ostype = os.Getenv("GOOS") // 获取系统类型 14 ) 15 16 var listfile []string //获取文件列表 17 18 func Listfunc(path string, f os.FileInfo, err error) error { 19 var strRet string 20 strRet, _ = os.Getwd() 21 //ostype := os.Getenv("GOOS") // ...阅读全文

博文 2014-10-04 19:26:45 sn-dnv-aps

GoLang之对象

GoLang之面向对象 Go语言没有沿袭传统面向对象编程中的诸多概念,比如继承、虚函数、构造函数和析构函数、隐藏的this指针等。 类方法 在Go语言中,可以给任意类型(包括内置类型,但不包括指针类型)添加相应的方法。 如下面的这个例子,定义了一个新类型Integer,它和int一样,只是为它内置的int类型增加了个新方法Less() type Integer int func (a Integer) Less(b Integer) bool { return a < b } func main() { var a Integer = 1 if a.Less(2) { fmt.Println("less then 2") } } 可以看出,Go语言在自定义类型的对象中没有C++/Java那种...阅读全文

博文 2015-05-13 03:00:05 chenny7

Go语言中怎样判断数据类型_不懂的木匠_新浪博客

要判断数据类型,可以用Go的空接口: 建一个函数t 设置参数i 的类型为空接口,空接口可以接受任何数据类型 func t(i interface{}) { //函数t有一个参数i switch i.(type) { //多选语句switch case string: //是字符时做的事情 case int: //是整数时做的事情 } return } i.(type)只能在switch中使用 这函数没有返回值,你可以自己加入 ---------------------------------------------------------------------------- 还可以用反射: package main import ( "fmt" "reflect" ) func main(...阅读全文

博文 2015-09-22 03:00:01 ftm-datablogs

Golang 中"泛型"的支持

Golang不支持一般的类似java中的标记式泛型。很多人因此而十分不满,认为没有泛型增加了很多工作量。而目前由于泛型支持的复杂性,Golang的设计和实现者并没有把这个泛型支持作为紧急需要增加的特性。但是,如果真的没有泛型,就一定不行了么?答案当然是否定的。没有泛型也可以,而且我觉得代码更简单,直接,有趣(个人观点,勿喷)。 我们这里打算以一些例子来讲解Golang中如何处理这个问题。 首先,我们看一个冒泡排序的问题。针对整型数组切片的排序。 package main import ( "fmt" ) func bubbleSort(array []int) { for i := 0; i < len(array); i++ { for j := 0; j < len(array)-i-1...阅读全文

博文 2016-08-13 02:00:08 black_OX

golang: 类型转换和类型断言

类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说通常需要手动转换,是因为interface类型作为一个特例,会有不同的处理方式。 golang中的所有类型都有自己的默认值,对此我做了个测试。 $GOPATH/src ----typeassert_test --------main.go main.go的代码如下: package main import ( "fmt" ) type myStruct struct { name bool userid int64 } var structZero myStruct v...阅读全文

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

golang调用dll

//调用方式 func WindowVersion1() { h, err := syscall.LoadLibrary("kernel32.dll") if err != nil { fmt.Printf("Error: %s\n", err) return } defer syscall.FreeLibrary(h) proc, err := syscall.GetProcAddress(h, "GetVersion") if err != nil { fmt.Printf("Error: %s\n", err) return } r, _, _ := syscall.Syscall(uintptr(proc), 0, 0, 0, 0) major := byte(r) minor :=...阅读全文

博文 2014-10-04 19:27:11 陈好

golang的类型转换的坑和分析

首先,我们来看一个例子 type Stringer interface { String() string } type String struct { data string } func (s *String) String() string { return data } 上面是类型,然后 func GetString() *String { return nil } func CheckString(s Stringer) bool { return s == nil } func main() { println(CheckString(GetString())) } 你们猜答案是什么? 当然,这么诡异的提问方式一看答案就是不合常理的false。 在CheckString里面,s是...阅读全文

博文 2016-04-09 21:00:01 cangdu

golang 中的 类型判断

golang 中的 类型判断 类似于javascript中typeof 和 java中 instanceof 比如 var a interface{} newA,ok:=a.(string) 如果ok 是 true 则说明 变量a 是字符串类型,而newA就是string类型的变量,a的实际值 a.(type) 返回的是 a的 类型, 注意他返回的不是一个 字符串表示 string int 这样表示a的类型 a.(type)是和switch 搭配使用的 switch vtype:=v.(type){ case string: xxxxxxxxxxxxxxxxxx case int: xxxxxxxxxxxxxxxx case xxxxxx: xxxxxxxxxxxxx case []inte...阅读全文

博文 2014-10-04 19:26:13 suncaishen

GOLANG 基本数据类型 浮点型

浮点型 主要为了表示小数 也可细分float32和float64两种 float64提供比float32更高的精度 取值范围 类型 最大值 最小非负数 float32 3.402823466385288598117041834516925440e+38 1.401298464324817070923729583289916131280e-45 float64 1.797693134862315708145274237317043567981e+308 4.940656458412465441765687928682213723651e-324 运算结果不正确解决方式 原代码 package main inport "fmt" func main(){ var a,b,c float64 a=...阅读全文

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

GoLang 强制类型转换:unsafe.Pointer

注意此种转换只适合简单类型,对于有对象描述的类型是完全不适用的,鸡肋啊 ps:补充另外一种用法,这次就不鸡肋了 Go语言是个强类型语言。也就是说Go对类型要求严格,不同类型不能进行赋值操作。指针也是具有明确类型的对象,进行严格类型检查。下面的代码会产生编译错误 01 package main 02 03 import ( 04 "fmt" 05 ) 06 07 func main() { 08 u := uint32(32) 09 i := int32(1) 10 fmt.Println(&u, &i) // 打印出地址 11 p := &i // p 的类型是 *int32 12 p = &u // &u的类型是 *uint32,于 p 的类型不同,不能赋值 13 p = (*int32)...阅读全文

博文 2015-10-19 13:00:01 Creak_Phone

golang 函数作为类型

golang 函数作为类型 package main import "fmt" type A func(int, int) func (f A)Serve() { fmt.Println("serve2") } func serve(int,int) { fmt.Println("serve1") } func main() { a := A(serve) a(1,2) a.Serve() } type functinTyoe func(int) bool // 声明了一个函数类型 func isOdd(integer int) bool { if integer%2 == 0 { return false } return true } func isEven(integer int) b...阅读全文

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

golang reflect

golang reflect go语言中reflect反射机制。详细原文:地址 接口值到反射对象 package main import ( "fmt" "reflect" ) func main() { var x int = 1 fmt.Println("type: ", reflect.TypeOf(x)) } type: int TypeOf函数的定义如下,参数为接口类型,返回值为类型 func TypeOf(i interface {}) Type ValueOf函数的定义如下,参数为接口类型,返回值为Value var x int = 1 fmt.Println("value: ", reflect.ValueOf(x)) value: 可以通过Kind函...阅读全文

go语言 类型:布尔类型

Go语言中的布尔类型与其他语言基本一致,关键字也为bool,可赋值为预定义的true和false示例代码如下: var v1 bool v1 = true v2 := (1 == 2) // v2也会被推导为bool类型 //from http://www.cnblogs.com/osfipin/ 布尔类型不能接受其他类型的赋值,不支持自动或强制的类型转换。以下的示例是一些错误的用法,会导致编译错误: var b bool b = 1 // 编译错误 b = bool(1) // 编译错误 以下的用法才是正确的: var b bool b = (1!=0) // 编译正确 fmt.Println("Result:", b) // 打印结果为Result: true 布尔可以做3种逻辑运算,&...阅读全文

博文 2015-10-09 11:00:11 osfipin

golang sort 包使用,及三个简单排序算法冒泡,插入,选择 练习

sort 包的核心类型是 sort.Interface: type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements with indexes i and j. Swap(i, j int) } 接口 是golang 的很cool 的特性,rob pike 说接口有点类似uinx pipe,把...阅读全文

博文 2015-01-22 17:00:11 yujian0231

Golang二进制转换十进制代码

Golang二进制转换十进制代码,使用 container/list 实现出入栈操作,完成转换。 二进制转十进制的方法是:‍‍从右到左的取数值乘以2的N次幂,依次相加,N为数值在二进制中的位数。‍‍ package main /** 二进制转换成十进制 核心: 入栈、出栈、类型转换 sum += int(v-48) * int(math.Pow(2, N)) **/ import ( "container/list" "fmt" "math" ) func main() { stack := list.New() var input string var sum int var stnum, conum float64 = 0, 2 fmt.Printf("请输入一段二进制数字:") fmt...阅读全文

博文 2015-06-05 14:00:01 一曲

javaer to go之byte类型转换

在Socket的Server和Client通信的过程中,传输的都是字节。而我们需要展示和使用的是字符串、整形等。这个时候,我们需要对字节进行处理,把byte类型的数据转成我们需要的类型。 1、[]byte与16进制字符串 []byte转16进制字符串 import ( "bytes" "strconv" ) //byte转16进制字符串 func ByteToHex(data []byte) string { buffer := new(bytes.Buffer) for _, b := range data { s := strconv.FormatInt(int64(b&0xff), 16) if len(s) == 1 { buffer.WriteString("0") } buffe...阅读全文

博文 2016-04-23 14:00:01 p_3er

Go 系列教程 —— 19. 接口(二)

欢迎来到 Golang 系列教程的第 19 个教程。接口共有两个教程,这是我们第二个教程。如果你还没有阅读前面的教程,请你阅读[接口(一)](https://studygolang.com/articles/12266)。 ### 实现接口:指针接受者与值接受者 在[接口(一)](https://studygolang.com/articles/12266)上的所有示例中,我们都是使用值接受者(Value Receiver)来实现接口的。我们同样可以使用指针接受者(Pointer Receiver)来实现接口。只不过在用指针接受者实现接口时,还有一些细节需要注意。我们通过下面的代码来理解吧。 ```go package main import "fmt" type Describer int...阅读全文

博文 2018-02-01 15:44:37 heyulong

Go语言内幕(1):主要概念与项目结构

本文由 伯乐在线 - yhx 翻译,唐尤华 校稿。未经许可,禁止转载!英文出处:Sergey Matyukevich。欢迎加入翻译组。这个系列博客主要为那些对 Go 基本知识已经有一定了解,又希望对其内部细节进行更深一步地探索的人准备的。今天这一篇主要分析 Go 源代码的基本结构以及 Go 编译器的某些内部细节。读完这篇博客后,你会得到下面三个问题的答案: 1. Go 源代码结构是什么样子的? 2. Go 编译器是如何工作的? 3. Go 语言中的结点树的基本结构是什么样的? 让我们开始吧 每当开始学习一门新编程语言的时候,你总是可以找到大量的 “hello world” 教程、新手指南或者关于语言的主要概念、语法甚至标准库的文档。然而,当你想找一些介绍得更加深入的资料,比如语言运行时分配的...阅读全文

博文 2016-05-31 19:49:01 伯乐在线

更优雅的 Golang 错误处理

Golang 中的错误处理是一个被大家经常拿出来讨论的话题(另外一个是泛型)。其中泛型这个问题,rsc 在最近的计划中也提出了纳入他今年的考虑计划中,同时,泛型的提案在2016年也进行了一些更新,相信未来会有一些更好的方案提出。这个文章我们讨论一下如何在现行的 Golang 框架下提供更友好和优雅的错误处理。 从现状谈起 Golang 中的错误处理原则,开发者曾经之前专门发布了几篇文章( Error handling and Go 和 Defer, Panic, and Recover、Errors are values )介绍。分别介绍了 Golang 中处理一般预知到的错误与遇到崩溃时的错误处理机制。 一般情况下,我们还是以官方博客中的错误处理例子为例: func main() { f,...阅读全文

博文 2017-02-10 07:42:04 kevin