当前位置: 首页 > news >正文

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

程序功能解读

第一行为可执行程序的包名,所有的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 = iotaFIRSTSECONDTHIRD
)type Gender uint8 // 无符号的8位整数类型// User 结构体
type User struct {Name   stringAge    uint8Gender 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 mainimport _study "study/oop" // 引入另一个go文件 _study为package名称 后边是他的存在路径以根目录为开始func main() {_study.UserCase()
}

多态

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

package polymorphismimport ("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.lryc.cn/news/224128.html

相关文章:

  • 使用 Python修改JSON 文件中对应键值
  • 【Rust日报】2023-11-08 RustyVault -- 基于 rust 的现代秘密管理系统
  • 07【保姆级】-GO语言的程序流程控制【if switch for while 】
  • 求2个字符串的最短编辑距离 java 实现
  • 单例模式 rust和java的实现
  • tqdm学习
  • Zigbee—网络层地址分配机制
  • [Matlab]基于LSTM+NSGA2的风光火力发电策略优化
  • 智安网络|探索人机交互的未来:自然语言处理的前沿技术
  • Could not load library libcudnn_cnn_train.so.8, 解决类似问题的思路与方法
  • 孙子兵法_00000
  • 代挂单页网址发布页+加盟代理+APP下载页源码
  • 计算机视觉驾驶行为识别应用简述
  • asp.net core configuration配置读取
  • windows上 Nexus 批量上传 maven依赖npm依赖
  • 已解决:Python Error: IndentationError: expected an indented block 问题
  • 汽车标定技术(六)--基于模型开发如何生成完整的A2L文件(2)
  • 普华永道于进博会发布全新升级的DSAI投资管理数字化平台
  • ssm+vue的高校学生课堂考勤系统设计与实现(有报告)。Javaee项目,ssm vue前后端分离项目。
  • 常用hivesql记录
  • C# OpenCvSharp 去除文字中的线条
  • 【树的存储结构,孩子链表】
  • 到蒙古包了,这边天气-9度 很冷
  • 淘宝天猫京东苏宁1688等平台关键词监控价格API接口(店铺商品价格监控API接口调用展示)
  • 案例:用户管理
  • AIGC:使用生成对抗网络GAN实现MINST手写数字图像生成
  • excel中超级表和普通表的相互转换
  • element中el-switch用法汇总(拓展:el-switch开关点击弹出确认框时,状态先改变,点击确认/取消失效,怎么解决?)
  • mysql之高阶语句
  • 视频编软件会声会影2024中文版功能介绍