【建站服务】迪庆公众号代运营公司-域名申请
作者: 风兰 . 阅读量: 6 . 发表时间:2022-09-21 05:49:24
上往建站提供服务器空间服务商,百度快照排名,网站托管,百度推广运营,致力于设计外包服务与源代码定制开发,360推广,搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。
迪庆公众号代运营公司

Book1.Subject = "Go 语言教程"
// 如果进行了如下调用,则会报错
// Book1.book_id = 6495407
/* 打印 Book1 信息 */
printBook(Book1)
}
func printBook( book Books ) {
fmt.Printf( "Book title : %s ", book.Title)
fmt.Printf( "Book author : %s ", book.Author)
fmt.Printf( "Book subject : %s ", book.Subject)
// 无法调用
// fmt.Printf( "Book book_id : %d ", book.book_id)
}
森林里的小动物
森林里的小动物
wuk***67@gmail.com
12个月前 (09-11)
张三
461***35@qq.com
参考地址
9
结构体指针
你可以定义指向结构体的指针类似于其他指针变量,格式如下:
var struct_pointer *Books
以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:
struct_pointer = &Book1;
使用结构体指针访问结构体成员,使用 . 操作符:
struct_pointer.title;
定义结构体:
type Books struct {
title string
author string
subject string
book_id int
}
var book1 = Books {"Go 入门到放弃","yuantiankai","go系列教程",012231}
例子:
var b *Books
b = &Book1
fmt.Println(b) //&{Go 语言 www.runoob.com Go 语言教程 6495407}
fmt.Println(*b) //{Go 语言 www.runoob.com Go 语言教程 6495407}
fmt.Println(&b) //0xc000082018
fmt.Println(Book1) //{Go 语言 www.runoob.com Go 语言教程 6495407}
解释:
其实跟普通的指针是一样的,只不过这次是指定的结构体的指针,在上面的例子中:
var b *Books //就是说b这个指针是Books类型的。
b = &Book1 //Book1是Books的一个实例化的结构,&Book1就是把这个结构体的内存地址赋给了b,
*b //那么在使用的时候,只要在b的前面加个*号,就可以把b这个内存地址对应的值给取出来了
&b // 就是取了b这个指针的内存地址,也就是b这个指针是放在内存空间的什么地方的。
Book1 // 就是Book1这个结构体,打印出来就是它自己。也就是指针b前面带了*号的效果。
只有一个特殊的地方,尽管 b 所表示的是 Book1 对象的内存地址,但是,在从 b 对应的内存地址取属性值的时候,就不是 *b.title 了。而是直接使用b.title,这点很特殊,它的效果就相当于 Book1.title:
fmt.Println(b.title) //Go 入门到放弃
fmt.Println(Book1.title) //Go 入门到放弃
fmt.Println(b.author) //yuantiankai
fmt.Println(Book1.author) //yuantiankai
具体区别:
比如我们要写一个函数修改结构体里的一个值,那么我们需要将修改过后的值返回出来,然后再重新赋值,比如这样:
package main
import "fmt"
type Books struct {
title string
author string
subject string
book_id int
}
func changeBook(book Books) string { //把book对象传进来,返回的值是string类型的,也就是将被修改的值返回出来。
book.title = "book1_change"
return book.title
}
func main() {
var book1 Books;
book1.title = "book1"
book1.author = "zuozhe"
book1.book_id = 1
var res = changeBook(book1) //然后在外面拿到被修改的值
book1.title = res // 再重新赋值
fmt.Println(book1)
}
结果为:
{book1_change zuozhe 1}
如果我们这样做,是行不通的,看如下代码:
package main
import "fmt"
type Books struct {
title string
author string
subject string
book_id int
}
func changeBook(book Books) { //这个函数没有返回值
book.title = "book1_change" //仅仅是修改了一下
}
func main() {
var book1 Books;
book1.title = "book1"
book1.author = "zuozhe"
book1.book_id = 1
changeBook(book1) //将book1传进去,本意是想修改book1里面的值
fmt.Println(book1)
}
结果为:
{book1 zuozhe 1} // 但是结果现实并没有任何修改。
但是有了结构体指针,就不是值传递了,而是引用传递(传递的是地址)了。就可以这么写了:
package main
上往建站提供搭建网站,域名注册,官网备案服务,网店详情页设计,企业网店,专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管,网页美工排版,致力于域名申请,竞价托管,软文推广,全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机,网站推广,百度竞价托管,网站建设,上网建站推广服务,网络公司有哪些等业务,专业团队服务,效果好。
服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)
关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站



,划重点
当要将结构体对象转换为 JSON 时,对象中的属性首字母必须是大写,才能正常转换为 JSON。
示例一:
type Person struct { Name string //Name字段首字母大写 age int //age字段首字母小写}func main() { person:=Person{"小明",18} if result,err:=json.Marshal(&person);err==nil{ //json.Marshal 将对象转换为json字符串 fmt.Println(string(result)) }}控制台输出:
{"Name":"小明"} //只有Name,没有age示例二:
type Person struct{ Name string //都是大写 Age int }控制台输出:
{"Name":"小明","Age":18} //两个字段都有那这样 JSON 字符串以后就只能是大写了么? 当然不是,可以使用 tag 标记要返回的字段名。
示例三:
type Person struct{ Name string `json:"name"` //标记json名字为name Age int `json:"age"` Time int64 `json:"-"` // 标记忽略该字段}func main(){ person:=Person{"小明",18, time.Now().Unix()} if result,err:=json.Marshal(&person);err==nil{ fmt.Println(string(result)) }}控制台输出:
{"name":"小明","age":18}灭霸
143***7200@qq.com
森林里的小动物
wuk***67@gmail.com
使用结构体的时候需要注意的点:定义的结构体如果只在当前包内使用,结构体的属性不用区分大小写。如果想要被其他的包引用,那么结构体的属性的首字母需要大写。例如
package mode//结构体小写开头的属性只能包内调用type Books struct { Title string Author string Subject string book_id int}当该结构体被引用时:
import ( "fmt" "src/mode")func main() { var Book1 mode.Books /* 声明 Book1 为 Books 类型 */ /* book 1 描述 */ Book1.Title = "Go 语言" Book1.Author = "www.runoob.com" Book1.Subject = "Go 语言教程" // 如果进行了如下调用,则会报错 // Book1.book_id = 6495407 /* 打印 Book1 信息 *