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

go语言reflect理解

不少文章在讲解GoLang的反射机制的时候都讲的比较复杂,这里简单总结下,做一个浅显的入门教程: 1、TypeOf方法跟ValueOf方法 TypeOf用来返回变量的类型,ValueOf用来返回变量的方法。 我们在初始化一个结构体的时候,有两种方式,var a Struct跟a :=new(Struct),其中,前者的类型是struct,后者的类型是指针。 package main import ( "fmt" "reflect" ) type MyStruct struct { name string } func (this *MyStruct) GetName() string { return this.name } func main() { a := new(MyStruct) ...阅读全文

博文 2016-10-17 10:00:10 tree2013

golang reflect

这个程序看到几点: 1 TypeOf和ValueOf是获取Type和Value的方法 2 ValueOf返回的是为了说明这里的value是float64 3 第三个b的定义实现了php中的string->method的方法,为什么返回的是reflect.Value[]数组呢?当然是因为Go的函数可以返回多个值的原因了。 package main import( "fmt" "reflect" ) type MyStruct struct{ name string } func (this *MyStruct)GetName() string { return this.name } func (this *MyStruct)Getva() string { re...阅读全文

博文 2014-10-04 19:27:23 千山万水

golang 指针

在Go语言中,有几种东西可以代表“指针”。  1. uintptr类型:该类型实际上是一个数值类型,也是Go语言内建的数据类型之一。根据当前计算机架构的不同,它可以存储32位或64位的无符号整数,可以代表任何指针的位(bit)模式,也就是原始的内存地址。  2.unsafe.Pointer:可以代表任何指向可寻址的值的指针,同时它也是前面提到的指针值和uintptr值之间的桥梁。也就是说,通过它,我们可以在这两种值之上进行双向的转换。 问:Go语言中哪些值是不可寻址的? 答: 1.常量的值 const num = 123 //_ = &num // 常量不可寻址。 2.基本类型值的字面量 //_ = &(123) // 基本类型值的字面量不可寻址。 3.算术操作的结果值 //_ = &(12...阅读全文

博文 2018-10-03 09:34:40 one_zheng

golang的package

golang的packagegolang的package和其他语言的组织方式完全不同,刚开始接触时,很不适应。我觉得go的package有两个很大的特点:1、go的package超越了文件的概念;2、go的package是以绝对路径GOPATH来寻址的,不要用相对路径来import在同一个package里,多个文件被go编译器看作是一个文件一样,因此,这多个文件中不能出现相同的全局变量和函数,一个例外是init函数;而同一个package的不同文件可以直接引用相互之间的数据...阅读全文

博文 2014-12-31 01:00:04 stephen830

了解 Go 的不可寻址值和切片

Dave Cheney 最近在 Twitter 上发布了一个 Go 的小测验,和往常一样,我从中学到了一些有趣的东西。让我们从他的推文开始: `#golang` 小测验:该程序打印什么? ```go package main import ( "crypto/sha1" "fmt" ) func main() { input := []byte("Hello, playground") hash := sha1.Sum(input)[:5] fmt.Println(hash) } ``` 令我惊讶的是,答案是: ```bash ./test.go:10:28: invalid operation sha1.Sum(input)[:5] (slice of unaddressable valu...阅读全文

博文 2020-01-27 12:09:29 polaris

go addressable 详解

Go语言规范中规定了可寻址(addressable)对象的定义, For an operand x of type T, the address operation &x generates a pointer of type *T to x. The operand must be addressable, that is, either a variable, pointer indirection, or slice indexing operation; or a field selector of an addressable struct operand; or an array indexing operation of an addressable array. As an ...阅读全文

博文 2018-02-28 10:58:26 smallnest

Go 挖坑指南: cannot take the address & cannot call pointer method

先看代码 package main type B struct { Id int } func New() B { return B{} } func New2() *B { return &B{} } func (b *B) Hello() { return } func (b B) World() { return } func main() { // 方法的接收器为 *T 类型 New().Hello() // 编译不通过 b1 := New() b1.Hello() // 编译通过 b2 := B{} b2.Hello() // 编译通过 (B{}).Hello() // 编译不通过 B{}.Hello() // 编译不通过 New2().Hello() // 编译通过 b3 := ...阅读全文

博文 2019-12-06 11:32:38 Jioby

Go36-15-指针

指针 之前已经用到过很多次指针了,不过大多数时候是指指针类型及其对应的指针值。这里要讲更为深入的内容。 其他指针 从传统意义上说,指针是一个指向某个确切的内存地址的值。这个内存地址可以是任何数据或代码的起始地址,比如,某个变量、某个字段或某个函数。 uintptr 在Go语言中还有其他几样东西可以代表“指针”。其中最贴近传统意义的当属uintptr类型了。该类型实际上是一个数值类型,也是Go语言内建的数据类型之一。根据当前计算机的计算架构的不同,它可以存储32位或64位的无符号整数,可以代表任何指针的位(bit)模式,也就是原始的内存地址。 unsafe.Pointer 在Go语言标准库中的unsafe包。unsafe包中有一个类型叫做Pointer,也代表了“指针”。unsafe.Poin...阅读全文

博文 2019-01-11 11:35:22 骑士救兵

go value receiver, pointer receiver 方法集

go 语言规范里定义的 method sets 规则 Values 可调用的方法(methods receivers) 备注 T (t T) funcXXX 为什么不能调用 (t *T) funcXXX,因为无法保证所有的Value 都可以获取到指针地址(addressable value) *T (t T) funcXXX and (t *T) funcXXX go 自动转化(dereferenced) *T --> T, 所以可以调用 为什么有些值无法获取地址? go spec: https://golang.org/ref/spec#Address_operators 说明了不能寻址的情况。 常见的不能寻址的情况: &m["key"] &afunc() &t.method() var ...阅读全文

博文 2020-03-04 10:32:44 cdz620