GO-结构体(类似python中的类)
一.结构体有名属性
package main
import "fmt"
func main(){
type Sb struct {
name string //属性名,数据类型
age int //如果两个属性数据类型一样可以name,age int
}
//他有两个属性不一定要两个属性都进行赋值
//位置进行传参{"you",11}
//但是位置传参必须所有属性都传进去
sb1 :=Sb{name:"you",age:11} //属性名:属性值
fmt.Println(sb1) //{you 11}
fmt.Println(sb1.name) //you
}
二.结构体匿名属性
package main
import "fmt"
func main(){
type Sb struct {
string //数据类型
int
}
sb1 :=Sb{string:"you"}
fmt.Println(sb1) //{you 0}
fmt.Println(sb1.string) //you
}
三.结构体方法
package main
import "fmt"
type Sb struct {
}
//注意点不定义在main函数内
func (sb Sb) Speak() { //func (结构体对象 结构体类型) 方法名(){}
fmt.Println("嗯")
}
func main(){
wq :=Sb{}
wq.Speak()
}
四.结构体嵌套
type Hobby struct {
name string
id int
}
type Person struct {
name string
Hobby //结构体名称
}
func main(){
a := Person{name: "p1",Hobby:Hobby{name:"LOL",id:1}}
fmt.Println(a.Hobby.name) //如果名字有重名需要.结构体.属性
fmt.Println(a.id)//如果没有重名属性名会提升
//fmt.Println(a.Hobby.id)你同样也可以这样获取
}
/*
个人理解可以把它理解成python中的类的继承,比如A继承B
type B struct {int}
type A struct {B}
但是也有不同之处,他两个类中的名字一样可以共存,而python中不行
*/
五.结构体为方法的参数且修改结构体的属性
package main
import "fmt"
type Person struct {
name string
}
func ChangeName(p *Person,NewName string){ //如果不是改变原来的类只传值可以穿结构体对象
(*p.name) = NewName //也可以写成p.name=NewName
}
func main(){
a := Person{name: "p1"}
ChangeName(&a,"ywy")
fmt.Println(a.name)
}
六.结构体为方法的参数不修改结构体的属性
package main
import "fmt"
type Person struct {
name string
}
func ChangeName(p Person,NewName string){
p.name = NewName
}
func main(){
a := Person{name: "p1"}
ChangeName(a,"ywy")
fmt.Println(a.name)
}
七.结构体类型断言
写法一:
package main
import "fmt"
type Person struct {
name string
}
func Test(a interface{}){
_,err :=a.(*Person)
if !err{
fmt.Println("是Person")
}
}
func main(){
a := Person{name: "p1"}
Test(a)
}
写法二:
package main
import (
"fmt"
)
type Person struct {
name string
}
func Test(a interface{}) {
switch a.(type) { //如果要获取a的对象就AStruct :=a.(type)
case Person:
fmt.Println("是Person")
default:
fmt.Println("不是Person")
}
}
func main() {
a := Person{name: "p1"}
Test(a)
}
GO-结构体(类似python中的类)的更多相关文章
- 4、Python中的类详解(0601)
<大话数据结构>的作者程杰在博客园也有博客,网址是:http://cj723.cnblogs.com/ 面向对象编程(OOP) 1.程序 = 指令 + 数据 代码可以选择以指令为核心或以数 ...
- Python基础之:Python中的类
目录 简介 作用域和命名空间 class 类对象 类的实例 实例对象的属性 方法对象 类变量和实例变量 继承 私有变量 迭代器 生成器 简介 class是面向对象编程的一个非常重要的概念,python ...
- Python学习-11.Python中的类定义
Python是一门面向对象语言,那么作为面向对象的特征——类也是有的.值得注意的是Python中一切皆对象,并不像C#中为了性能考虑,int这些在Python中也是对象.(C#中int是结构体) 如何 ...
- Python中的类、对象、继承
类 Python中,类的命名使用帕斯卡命名方式,即首字母大写. Python中定义类的方式如下: class 类名([父类名[,父类名[,...]]]): pass 省略父类名表示该类直接继承自obj ...
- 逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式
逆向知识第十四讲,(C语言完结)结构体在汇编中的表现形式 一丶了解什么是结构体,以及计算结构体成员的对其值以及总大小(类也是这样算) 结构体的特性 1.结构体(struct)是由一系列具有相同类型或不 ...
- python中的类与继承
Class 类的定义以及实例的建立 Python中,类通过 class 关键字定义. 例如最简单的一个类定义可以为: class Person(object): pass Python 的编程习惯,类 ...
- python中元类(metaclass)的理解
原文地址:http://www.cnblogs.com/tkqasn/p/6524879.html 一:类也是对象 类就是一组用来描述如何生成一个对象的代码. 类也是一个对象,只要你使用关键字clas ...
- python中的类和实例
今天花了两个多小时后搜索相关博客看了看python中有关类和实例的介绍,差不多大概明白了. python中的类和c++中的类是一样的,不同之处就是c++的类,如果含有成员变量,并且成员变量发生变化后, ...
- C语言结构体在内存中的存储情况探究------内存对齐
条件(先看一下各个基本类型都占几个字节): void size_(){ printf("char类型:%d\n", sizeof(char)); printf("int类 ...
随机推荐
- 织女星开发板使用RISC-V核驱动GPIO
前言 织女星开发板是OPEN-ISA社区为中国大陆地区定制的一款体积小.功耗超低和功能丰富的 RISC-V评估开发板,基于NXP半导体四核异构RV32M1主控芯片. 两个RISC-V核:RI5CY + ...
- Cortex-A7 MPCore 简介与处理器运行模型
Cortex-A7 MPcore 处理器支持 1~4 核,通常是和 Cortex-A15 组成 big.LITTLE 架构的,Cortex-A15 作为大核负责高性能运算,比如玩游戏啥的,Cortex ...
- 如何使用 RxJS 更优雅地进行定时请求
在用 Angular 做项目的时候,遇到了一个有点麻烦的问题.具体问题如下: 轮循请求某个接口,如何保证接口返回的数据与请求的顺序相同? 实际的业务场景是这样的:前端需要轮循请求后端接口获取文件处理进 ...
- 使用PIL将图片转成字符
注意:转化成txt后,txt的字体使用“宋体”,不能使用“微软雅黑”,否则图像会变形 import numpy as npfrom PIL import Image if __name__ == '_ ...
- unity3D开发环境搭建
前言 本文记录unity3D开发环境的搭建 unity安装 unity有中文官网(https://unity.cn/),很贴心,ide工具我们选择下载安装中国区增强版,下载地址:https://uni ...
- 极客时间-vue开发实战学习(ant-design vue作者)
vue基础 属性 事件 插槽 指令(Directives) 生命周期 底层原理 vue生态 路由管理器vue Router 状态管理器vuex 同构Nuxt vue实战 实战项目-ant-desing ...
- 初识NLP 自然语言处理
接下来的一段时间,要深入研究下自然语言处理这一个学科,以期能够带来工作上的提升. 学习如何实用python实现各种有关自然语言处理有关的事物,并了解一些有关自然语言处理的当下和新进的研究主题. NLP ...
- Mybatis的PageHelper分页插件的PageInfo的属性参数,成员变量的解释,以及页面模板
作者:个人微信公众号:程序猿的月光宝盒 //当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 private int si ...
- 下拉框移动 jquery
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html& ...
- Chrome是老大,Firefox 是老二,Edge 不是老三
NetMarketShare 是全球最大的电子消费市场调研机构,根据 NetMarketShare 提供的统计数据显示,来自七月份的报告,谷歌的 Chrome 在全球台式浏览器排名上仍居榜首,该公司保 ...