网站用oracle做数据库,织梦源码官网,wordpress二维码手工,北京最新新闻1、指针 Go语言指针与C差不多#xff0c;取地址符是 #xff0c;放到一个变量前使用就会返回相应变量的内存地址。 变量是一种使用方便的占位符#xff0c;用于引用计算机内存地址。一个指针变量可以指向任何一个值的内存地址#xff0c;它所指向的值的内存地址在 32 …1、指针 Go语言指针与C差不多取地址符是 放到一个变量前使用就会返回相应变量的内存地址。 变量是一种使用方便的占位符用于引用计算机内存地址。一个指针变量可以指向任何一个值的内存地址它所指向的值的内存地址在 32 和 64 位机器上分别占用 4 或 8 个字节占用字节的大小与所指向的值的大小无关。当一个指针被定义后没有分配到任何变量时它的默认值为 nil。 每个变量在运行时都拥有一个地址这个地址代表变量在内存中的位置。
func ptr_test() {var a int 20 /* 声明实际变量 */var ip *int /* 声明指针变量 */ip a /* 指针变量的存储地址 */fmt.Printf(a 变量的地址是: %x\n, a)/* 指针变量的存储地址 */fmt.Printf(ip 变量储存的指针地址: %x\n, ip)/* 使用指针访问值 */fmt.Printf(*ip 变量的值: %d\n, *ip)
}指针也可为空当一个指针被定义后没有分配到任何变量时它的值为 nil。
var ptr *int
fmt.Printf(ptr 的值为 : %x\n, ptr )输出0指向值指针的指针类似链表 如果一个指针变量存放的又是另一个指针变量的地址则称这个指针变量为指向指针的指针变量。 当定义一个指向指针的指针变量时第一个指针存放第二个指针的地址第二个指针存放变量的地址
func main() {var a intvar ptr *intvar pptr **inta 3000/* 指针 ptr 地址 */ptr a/* 指向指针 ptr 地址 */pptr ptr/* 获取 pptr 的值 */fmt.Printf(变量 a %d\n, a )fmt.Printf(指针变量 *ptr %d\n, *ptr )fmt.Printf(指向指针的指针变量 **pptr %d\n, **pptr)
}Go语言里很多调用都是通过指针
2、结构体 数组可以存储同一类型的数据但在结构体中可以为不同项定义不同的数据类型。与C语言类似结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。
package mainimport fmttype Books struct {title stringauthor stringsubject stringbook_id int
}func main() {var book BooksCrateStruct()NewStruct(book)
}func CrateStruct() {// 创建一个新的结构体fmt.Println(Books{Go,www.aaa.com,Go 基础,6495407})// 也可以使用 key value 格式fmt.Println(Books{title: Go,author: www.aaa.com,subject: Go 基础,book_id: 6495407})// 忽略的字段为 0 或 空fmt.Println(Books{title: Go, author: www.aaa.com})}func NewStruct(b *Books) {b.title Gob.author www.aaa.comb.subject Go基础b.book_id 123456fmt.Println(b.title) // Gofmt.Println(*b) // {Go www.aaa.com Go基础 123456}
}
Go语言里面还可将结构体与json进行映射
package mainimport (encoding/jsonfmtlog
)
// 定义结构体字段 映射到json时的字段
type Bookss struct {Title string json:titleAuthor string json:authorSubject string json:subjectBookID int json:book_id
}func main() {book : Bookss{Title: Go,Author: www.aaa.com,Subject: Go 基础,BookID: 123456,}jsonData, err : json.Marshal(book) // 将结构体转换为json返回值为byte类型if err ! nil {log.Fatal(err)}fmt.Println((string(jsonData)))
}// 输出{title:Go,author:www.aaa.com,subject:Go 基础,book_id:123456}3、错误处理
在结构体中使用过err变量处理内置函数的错误返回值内置函数一般都会有错误返回值Go语言通过内置的错误接口提供了非常简单的错误处理机制。 error 类型是一个接口类型
type error interface {Error() string
}编写函数时可常在最后的返回值中返回错误信息使用 errors.New 可返回一个错误信息
func Heelo(f float64) (float64, error) {if f 0 {return 0, errors.New(HelloNo Money!) // 实际为字符串}
}
result, err: Heelo(-1)
if err ! nil {fmt.Println(err)
}