Go 面向对象,多态,基本数据类型

news2024/11/26 11:27:54

程序功能解读

第一行为可执行程序的包名,所有的Go源文件头部必须有一个包生命语句,Go通过包名来管理命名空间。
第三行import是引用外部包的说明
func关键字声明定义一个函数,如果是main则代表是Go程序入口函数

Go源码特征解读

源程序以.go结尾
源程序默认为UF8编码
标识符区分大小写
语句结尾的分号可以省略
包内方法调用使用.调用
main函数所在的包名必须是main

Go词法单元

标识符开头必须是_或者字母
内置数据标识符也就是基本数据类型其中包括:
整形 byte int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr (u开头的是无符号,也就是正整数)
浮点型 float32 float64
复数型 complex64 complex128
字符string (字节为单位)
字符串 rune (字符为单位)
接口类型 error
布尔型 bool
常量值标识符
true false // 布尔值常量
iota // 连续枚举类型自增值
nil // 指针/引用型的变量默认值

Go源程序基本构成

  • 关键字引导程序的基本结构
  • 内置类型标识符辅助声明变量和常量
  • 字面量辅助变量和常量的初始化
  • 分隔符帮助Go语言识别
  • 操作符和变量关键字一起构成丰富的语法单元

变量

var varName dataType [= value]

  • 关键字var用于变量声明
  • varName是变量名标识符
  • dataType是基本数据类型
  • value是变量的初始值,可以是值也可以是其他变量名,还可以是一个表达式,如果不指定初始值泽默认赋值该类型的零值
  • 声明变量后立刻分配空间

varName := value

  • 短类型声明只能出现在函数内
  • 自动进行数据类型判断

常量

常量分为布尔型、字符串型和数值类型,常量存储在程序的只读段里。
预声明标识符iota用在常量声明中初始值为0,一组多个常量同时声明则会自增,变成枚举。

复合数据类型

指针 * pointerType // 指针类型使用* 然后紧跟其指向的类型名
数组 [n] elementType // 数组类型使用[n],n代表数组长度,后边跟的是元素类型
切片 [] elementType // 和数组差不多只不过不需要指定长度
字典(map) map[keyType]valueType // map类型使用map[键类型]值类型表示
chan valueType // 通道chan和后边的通道元素类型

面向对象

工程结构
在这里插入图片描述

新建一个oop.go

package _oop // Package _oop 引用名称

import (
	"fmt"
	"strconv"
)

// GIRL 常量
const (
	// GIRL 自增
	GIRL Gender = iota
	FIRST
	SECOND
	THIRD
)

type Gender uint8 // 无符号的8位整数类型

// User 结构体
type User struct {
	Name   string
	Age    uint8
	Gender Gender
}

/**
方法参数中带*意思是传递的是结构体的指针,如果修改会影响外部的值,如果不带星则是传入了一个复制出来的值
*/

// AddAge 方法
func (u *User) AddAge() {
	u.Age++
}

// Run 方法
func (*User) Run() {
	fmt.Println("user run")
}

// Sleep 方法
func (*User) Sleep() {
	fmt.Println("user sleep")
}

func UserCase() {
	u := new(User) // &为取地址符号
	u.Run()
	u.Sleep()
	fmt.Println(GIRL)
	fmt.Println(THIRD)
	fmt.Println("修改前的Age" + strconv.FormatInt(int64(u.Age), 10)) // strconv.FormatInt(int64(u.Age), 10) 这里是将十进制的数字转为了string类型
	u.AddAge()
	fmt.Println("修改前的Age" + strconv.FormatInt(int64(u.Age), 10))
}

再写一个main主程序掉用

package main

import _study "study/oop" // 引入另一个go文件 _study为package名称 后边是他的存在路径以根目录为开始

func main() {
	_study.UserCase()
}

多态

工程结构在这里插入图片描述
编写一个新的go文件,在go中只要是实现了接口的方法就算是实现

package polymorphism

import (
	"fmt"
)

type Person interface {
	Run()
	Sleep()
}


// Teacher 结构体
type Teacher struct {
}

// Student 结构体
type Student struct {
}

/**
方法参数中带*意思是传递的是结构体的指针,如果修改会影响外部的值,如果不带星则是传入了一个复制出来的值
*/

// Run Teacher方法
func (*Teacher) Run() {
	fmt.Println("Teacher run")
}

// Sleep Teacher方法
func (*Teacher) Sleep() {
	fmt.Println("Teacher sleep")
}

// Run Student方法
func (*Student) Run() {
	fmt.Println("Student run")
}

// Sleep Student方法
func (*Student) Sleep() {
	fmt.Println("Student sleep")
}

func Process(person Person) {
	person.Run()
	person.Sleep()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1186371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL数据库】 五

本文主要介绍了如果根据表之间的关系设计表,以及mysql的聚合/分组/联合查询. 一.表的设计 实体和关系的四种关系 1.一对一 一个账号只能对应一个学生; 一个学生只能有一个账号; 比如:账号表和学生是一对一的关系 * 可以在账号表中引入学生id * 也可以在学生表中引入账号id…

能链智电,“重”症在身

文 | 智能相对论 作者 | 陈选滨 在过去的1-9月,充电基础设施增量为243.2万台,新能源汽车销量627.8万辆,充电桩与新能源汽车的增量比为1:2.6,距离工信部此前提出“2025年实现车桩比2:1,2030年实现车桩比1:…

自主SSL品牌—JoySSL

JoySSL是一家为数不多的中国自主品牌SSL证书服务厂商,是自研推出的新一代https数字证书。 它不仅有着自己品牌JoySSL,还拥有着国内外绝大数主流证书品牌,遍寻诚意伙伴,单域名证书都是不限年限、不限证书张数不限量提供。 目前了…

C语言——计算n的阶乘

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i;int n 0;int s1;scanf("%d",&n);for(i1; i<n; i){s*i;}printf("s%d\n",s);return 0; }

HP电脑主机清除BIOS密码

HP电脑主机清除BIOS密码 重装系统肯定不能清除BIOS密码的。 拔掉电池一般也只能是将BIOS设定恢复出厂。 台式机需要清除BIOS密码&#xff0c;一般是主机板上会有对应的跳线&#xff0c; 关机&#xff0c;记住跳线的预设位置&#xff0c;拔掉跳线&#xff0c;重新开机&#x…

于道 - 前端项目启动步骤参考

1. 安装 启动过程有9个步骤&#xff1a; 1.1 安装 Node JS , V18版本的 &#xff08;安装步骤省略&#xff09; 1.2 安装 npm install -g yarn &#xff0c;node JS里边好像自带npm &#xff0c;通过npm的命令安装 yarn 1.3 切换到项目中去安装&#xff0c;npm install &a…

C++初阶 | [二] 类和对象(上)

摘要&#xff1a;class&#xff0c;成员函数&#xff0c;成员变量&#xff0c;类的大小&#xff0c;this 指针 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 C是基于面向对象的&#xff0c;关注的是对象…

吃啥大转盘

经常跟朋友出去吃饭&#xff0c;选择太困难了所以写了个简单的转盘&#xff0c;直接copy到txt文本然后把文件后缀改成html即可。 需要换食物直接在文件中找到 list 值按照格式替换一下即可。 效果&#xff1a; 代码块&#xff1a; <html><head><meta http-…

软件测试简历原来是写了这些才让面试官已读不回

前言&#xff1a; 马上就到了面试跳槽涨薪好时候了&#xff0c;最近看很多的小伙伴已经开始投简历了&#xff0c;一天投了几十次几百次&#xff0c;面试官已读不会&#xff0c;面试的机会都没有更别说后面的事情的&#xff0c;这是为什么呢&#xff1f; 很大一部分的原因是的…

内网穿透工具之花生壳(二)

目录 开始教程 第一步&#xff1a;进入管理官网&#xff0c;注册并登录账号 第二步&#xff1a;进入 管理页面 第三步&#xff1a;添加映射表&#xff0c;然后填写一下基本内容 总结&#xff1a;emmm,反正都很快上手&#xff0c;但是这个就免费1G流量,这个免费的还是https…

开发知识点-NodeJs-npm/Pnpm/Vite/Yarn包管理器

包管理器 vue-cli-service 不是内部或外部命令&#xff0c;也不是可运行的程序npm 全局变量pnpmPnpm介绍ViteYarn ‘vue-cli-service’ 不是内部或外部命令&#xff0c;也不是可运行的程序 yarn yarn add vue-amap yarn add vue-amap ant-design-vue npm 全局变量 换主机 新…

掌动智能:云可观测性的主要特点及应用场景

云全景可观测性安全平台是一个跨架构、跨平台的可观测性方案&#xff0c;实现对云环境下的细粒度数据可视化&#xff0c;满足安全部门对云内部安全领域的多场景诉求&#xff0c;包括敏感数据动态监管、云网攻击回溯分析、攻击横移风险监控、云异常流量分析。本文将介绍掌动智能…

vue:如何实现通过判断数组中每个对象的其中一个属性,从而更改另一个属性的值

1、假设一个box为一个包含多个对象的数组&#xff0c;这个box数组可以在方法中定义也可以在data域中定义 let box [{ id: 1, status: 审批中 },{ id: 2, status: 已通过 },{ id: 3, status: 未通过 } ];2、在methods域中写一个方法遍历这个box数组判断每个对象中的status属性是…

【原创】java+swing+mysql校园零食商城设计与实现

摘要&#xff1a; 本文探讨了一个校园零食商城的设计与实现&#xff0c;校园零食商城的设计与实现旨在为学生提供一个方便、快捷的在线购买零食的环境&#xff0c;同时提高商家的销售效率和客户满意度。通过不断优化和完善系统&#xff0c;相信可以为校园内的学生和商家带来更…

接口自动化面试题

1.http请求都包含哪些内容&#xff0c;请求头和请求体有哪些内容 请求行/请求头/请求体/空行 请求行&#xff1a;请求方法字段、URL字段、http协议版本 例如&#xff1a;GET /index.html HTTP/1.1 请求方法&#xff1a;GET、POST、PUT、DELETE、OPTIONS、TRACE、CO…

【PG】PostgreSQL13主从流复制部署(详细可用)

目录 版本 部署主从注意点 1 主库上创建复制用户 2 主库上修改pg_hba.conf文件 3 修改文件后重新加载配置使其生效 4 主库上修改配置文件 5 重启主库pg使参数生效 6 部署从库 7 备份主库数据至从库 停止从库 备份从库的数据库目录 新建数据库数据目录data 创建和…

干货 | 接口自动化测试分层设计与实践总结

接口测试三要素&#xff1a; 参数构造 发起请求&#xff0c;获取响应 校验结果 一、原始状态 当我们的用例没有进行分层设计的时候&#xff0c;只能算是一个“苗条式”的脚本。以一个后台创建商品活动的场景为例&#xff0c;大概流程是这样的(默认已经是登录状态下)&#…

Python--快速入门三

Python--快速入门三 1.Python列表 列表是Python用于储存一系列数据的容器(特点是可以存放不同类型的数据) python_list ["键盘",True,66,88.8] 列表是可变数据类型&#xff0c;可以直接对列表中的元素进行更改而不需要赋值给本身 列表方法&#xff1a; 1.appen…

纯干货:赝势的选择 | VASP计算入门教程,真的超级有用

VASP软件是基于贋势和平面波基组的第一性原理密度泛函计算程序。VASP使用的是平面波基组&#xff0c;电子与原子核之间的相互作用使用投影缀加波贋势&#xff08;Projector Augmented Wave&#xff0c;PAW&#xff09;方法描述&#xff0c;从而进行量子力学计算。VASP采用PAW贋…

成绩公布方式,这样操作更方便

老师们&#xff01;又到了期中&#xff0c;是不是又在为如何安全、高效的公布学生成绩而烦恼呢&#xff1f;别担心&#xff0c;今天我就给大家分享几种超实用的成绩公布方式&#xff0c;不仅减轻了你的工作负担&#xff0c;还能让学生和家长们也方便&#xff01; 1 Excel表格&a…