Go语言学习笔记(8)——包和结构体
包 —— 每个可执行的应用程序必须包含一个主函数,它是执行的入口点。主函数应该存在main包中。
结构体: 通过 . 操作符访问结构体的各个成员!
1. 定义结构体类型person:
type person struct{
name string
age int
}
使用结构体类型定义结构体变量:
P := person{ "星星", 22 } //按顺序初始化
P := person{ age:22, name:"星星" } //使用键值对方式,顺序可以任意
P := new(person); P.age = 22; P.name = "星星" //new方式,未设置初始值时采用默认初始值
2. 结构体指针: 存储结构体变量的地址,也可以通过 . 操作符访问结构体变量的各个成员
var pointer_name *person
3. 匿名字段(类似继承): 不仅仅可以是结构体类型哦,所有的内置类型和自定义类型都可以作为匿名字段。
type Human struct {
name string
age int
weight float32
}
type Student struct {
Human // 匿名字段,代表Student包含Human的所有字段/成员
special string
}
此时对Student实例化: mark := Student{Human{"Mark", 22, 100.0}, "Computer Science"}
注意:可以使用.调用所有属性值(包括匿名字段中的属性),
也可以mark.Human = Huamn{"Mark", 22, 100}; mark.Human.age = 0
4. 结构体嵌套
type Address struct {
city, state string
}
type Person struct {
name string
age int
address Address //结构体类型变量作另一个结构体的成员
}
func main() {
var p Person
p.name = "Naveen"
p.age = 50
p.address = Address {
city: "Chicago",
state: "Illinois",
}
fmt.Println("Name: ", p.name)
fmt.Println("City: ", p.address.city)
}
5. 导出结构体和导出字段:
如果结构体类型以大写字母开头,那么它就是一个导出类型,可以从其它包中对它进行访问;类似,如果结构体中的字段以大写字母开头,也可以在其它包中访问它们。
在computer目录下,创建文件spec.go
package computer
type Spec struct { //exported struct
Maker string //exported field
model string //unexported field
Price int
}
创建main.go 文件
import "../structs/computer" //或 import "./computer"或者 import "根目录"
import "fmt"
func main() {
var spec computer.Spec
spec.Maker = "apple"
spec.Price = 50000
fmt.Println("Spec:", spec)
}
目录结构如下:
src
structs
computer
spec.go
main.go
6. 结构体的比较:
结构体是值类型,如果每个字段都具有可比性,则结构体就是可比较的。
如果两个结构体变量对应字段的值都是相等的,则它们就是相等的!
Go语言学习笔记(8)——包和结构体的更多相关文章
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- Go语言学习笔记(四)结构体struct & 接口Interface & 反射reflect
加 Golang学习 QQ群共同学习进步成家立业工作 ^-^ 群号:96933959 结构体struct struct 用来自定义复杂数据结构,可以包含多个字段(属性),可以嵌套: go中的struc ...
- c语言学习笔记(10)——结构体
------------------------------------------------------------------ # include <stdio.h> struct ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- Bash脚本编程学习笔记07:循环结构体
本篇中涉及到算术运算,使用了$[]这种我未在官方手册中见到的用法,但是确实可用的,在此前的博文<Bash脚本编程学习笔记03:算术运算>中我有说明不要使用,不过自己忘记了.大家还是尽量使用 ...
- C语言学习总结(1)——结构体
一,什么是结构体 我们知道数组(Array),它是一组具有相同类型的数据的集合.但在实际的编程过程中,我们往往还需要一组类型不同的数据,例如对于学生信息登记表,姓名为字符串,学号为整数,年龄 ...
- Bash脚本编程学习笔记06:条件结构体
简介 在bash脚本编程中,条件结构体使用if语句和case语句两种句式. if语句 单分支if语句 if TEST; then CMD fi TEST:条件判断,多数情况下可使用test命令来实现, ...
- C学习笔记(1)-结构体、预处理与多文件结构程序设计
一.结构体的定义与使用 #include <stdio.h> //定义结构体(类似模板) typedef struct { char name[50]; int age; char add ...
- 【Swift】学习笔记(八)——类和结构体
1.类和结构体的定义 <pre name="code" class="html">struct Resolution { var width = 0 ...
随机推荐
- JavaScript初探系列目录
一 系列导航 结合各方面的参考资料,整理出来以下主要目录,供方便浏览查看 (一)初探系列 JavaScript初探系列(1)——基本概念 JavaScript初探系列(2)——数 ...
- Vue-CLI 标准开发工具-快速准备环境和创建项目
https://cli.vuejs.org/zh/ 淘宝镜像安装: npm install -g cnpm --registry=https://registry.npm.taobao.org 2.x ...
- 清除input的历史记录
原始代码: <input class="" type="text"></input> 加上“autocomplete”属性,禁止历史的显 ...
- ThreadPoolExecutor 定制线程池参数
在 java 开发中经常需要执行一些“规格化”的任务,此时可以使用 java 线程池.节省创建线程时间,任务来时即可执行,高效. java 包是 java.util.concurrent .创建线程池 ...
- 在shell中判断hive查询记录数大小
用途: 根据查询到结果数量来判断,是否需要再执行下个脚本. 1. 查询语句script.q脚本如下: ) as count from test; 2. shell脚本如下: 这里注意hive语句需要 ...
- mysql中int长度的意义 int(0)
问题: mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同.如果不同,分别是多大?int(0) 能存多少位数字? 不同,int(3)最多显 ...
- flutter Card卡片列表组件
一个 Material Design 卡片.拥有一个圆角和阴影 import 'package:flutter/material.dart'; import './model/post.dart'; ...
- 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习
论文http://202.119.32.195/cache/10/03/cs.nju.edu.cn/da2d9bef3c4fd7d2d8c33947231d9708/tkdd11.pdf 1. INT ...
- pytorch怎么使用定义好的模型的一部分
Encoder代码为: .输入图片的通道nc=.ndf=. def __init__(self,isize,nz,nc,ndf,ngpu,n_exter_layers=,add_final_conv= ...
- Python - Django - ORM 不常用字段
BigAutoField(AutoField): bigint 自增列,必须填入参数 primary_key=True 如果没有写自增列,则会自动创建一个列名为 id 的列 SmallIntegerF ...