【Golang 基础】Go 语言 面向对象

一篇文章带你入门Golang 条件判断语句条件分支语句循环语句与其它编程语言不同的是,Go 语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while 结构。关键字 for 的基本使用方法与其他语言类似,只是循环条件不含括号循环控制语句goto 可以打破原有代码执行顺序,直接跳转到某一行执行代码。math包提供了基本的数学常数和数学函数,使用时需要import "math"类型名:标识结构体的名称,在同一个包内不能重复。结构体中属性,也叫字段,必须唯一。同类型的成员属性可以写在一行。 阅读详情

Go 语言的面向对象

  Go 语言的面向对象非常简单,仅支持封装,不支持继承和多态。继承和多态是在接口中实现的。

  因此 Go 语言中没有 class,而是通过 struct(结构体)对相同类型或不同类型的数据进行封装。

  • 通过 type <structName> struct {}格式定义结构体;
type User struct {
	Name     string
	Age      int
	IsActive bool
}
  • 定义后的结构体就可以作为类型使用;
hvkcoder := User{Name: "hvkcoder", Age: 18, IsActive: true}
fmt.Println(hvkcoder) // {hvkcoder 18 true}

或

hvkcoder := User{"hvkcoder", 18, true}
fmt.Println(hvkcoder) // {hvkcoder 18 true}
  • 通过 结构体.成员名称访问结构体中的对象;
fmt.Println(hvkcoder.Name) // hvkcoder
  • 结构体是值类型,因此支持比较运算符的使用;
hvkcoder := User{Name: "hvkcoder", Age: 18, IsActive: true}
jason := User{Name: "jason", Age: 20, IsActive: true}
    
fmt.Println(hvkcoder == jason) // false
  • 由于结构体是值类型,因此需要向函数传递 结构体指针,才能去改变结构体中的值;
package main

import "fmt"

type User struct {
	Name     string
	Age      int
	IsActive bool
}

func setName(user *User,name string){
	user.Name = name
}

func main(){
	test := User{Name: "jason", Age: 18, IsActive: true}
	fmt.Println(test.Name) // jason
	setName(&test, "hvkcoder")
	fmt.Println(test.Name) // hvkcoder
}
  • 结构体也可以嵌套
package main

import "fmt"

type Address struct {
	city, town string
}

type User struct {
	Name     string
	Age      int
	IsActive bool
	UAddress Address
}

func main() {
	user := User{
		Name:     "hvkcoder",
		Age:      18,
		IsActive: false,
		UAddress: Address{"北京", "海淀"},
	}

	fmt.Println(user) // {hvkcoder 18 false {北京 海淀}}
}

Go 语言中的方法

  Go 语言中的方法从某种意义上来说就是函数的语法糖,receiver作为方法的第一个强制类型参数传入,这也就是 Method Value与 Method Expression的区别。

package main

import "fmt"

type Student struct {
	Name string
}

// receiver 定义结构方法
func (student Student) SayHi(){
	fmt.Println("Hello! My name's", student.Name)
}

func main(){

	student := Student{"hvkcoder"}

	// 使用 Method Value 方式调用方法
	student.SayHi() // Hello! My name's hvkcoder
	
	// 使用 Method Expression 方法调用方法
	(Student).SayHi(student) // Hello! My name's hvkcoder
}
  • 既然说了 Go 语言中的方法实际上就是函数的语法糖,因此想通过方法去改变结构体的值,仍然需要传递指针;
package main

import "fmt"

type User struct {
	Name     string
	Age      int
	IsActive bool
}

func (user *User) setName(name string){
	user.Name = name
}

func main(){
	test := User{Name: "jason", Age: 18, IsActive: true}
	fmt.Println(test.Name) // jason
	
	test.setName("hvkcoder")
	fmt.Println(test.Name) // hvkcoder
}
  • Go 中不存在方法重载;
  • 如果外部结构和内嵌结构存在同名方法,则优先调用外部结构的方法;

使用 Go 实现一个二叉排序树

package algorithm

import "fmt"

// 二叉树节点结构
type Node struct {
	Value       int
	Left, Right *Node
}

// 添加二叉排序树节点
func (node *Node) Insert(newNode *Node) {

	// 根据二叉排序树的特点,左子树的所有节点均小于根节点,右子树的所有节点均大于根节点
	if node.Value > newNode.Value {
		// 判断左子树是否有值
		if node.Left == nil {
			node.Left = newNode
		} else {
			node.Left.Insert(newNode)
		}
	} else {
		// 判断右子树是否有值
		if node.Right == nil {
			node.Right = newNode
		} else {
			node.Right.Insert(newNode)
		}
	}
}

// 前序遍历二叉排序树节点
func (node *Node) PreorderTraversal(){
	if node != nil{
		fmt.Printf("%d ", node.Value)
		node.Left.PreorderTraversal()
		node.Right.PreorderTraversal()
	}
}

// 中序遍历二叉排序树节点
func (node *Node) InorderTraversal(){
	if node != nil{
		node.Left.InorderTraversal()
		fmt.Printf("%d ", node.Value)
		node.Right.InorderTraversal()
	}
}

// 后序遍历二叉排序树节点
func (node *Node) PostorderTraversal(){
	if node != nil{
		node.Left.PostorderTraversal()
		node.Right.PostorderTraversal()
		fmt.Printf("%d ", node.Value)
	}
}


// 创建二叉排序树
func NewBinarySortTree(treeNode []int) *Node{
	var root *Node
	if len(treeNode) > 0 {
		for _,value := range treeNode {
			node := Node{Value:value}
			if root == nil {
				root = &node
			}else {
				root.Insert(&node)
			}
		}
	}
	return root
}
package main

import (
	"./algorithm"
	"fmt"
)

func main() {
	// 声明一个二叉树节点 Slice
	treeNode := []int{8, 3, 10, 1, 4, 13, 16, 14}
	// 创建二叉排序树
	binarySortTree := algorithm.NewBinarySortTree(treeNode)
	// 使用 前序方式遍历 二叉树
	binarySortTree.PreorderTraversal() // 8 3 1 4 10 13 16 14
	fmt.Println()

	// 使用 中序方式遍历 二叉树
	binarySortTree.InorderTraversal() // 1 3 4 8 10 13 14 16
	fmt.Println()

	// 使用 后序方式遍历 二叉树
	binarySortTree.PostorderTraversal() // 1 4 3 14 16 13 10 8
}
《Golang入门系列》Golang的面向对象编程 Go语言面向对象编程 引言 Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说 Golang支持面向对象编程特性是比较准确的。 Golang没有类(class),Go语言的结构体( struct)和其它编程语言的类class有同等的地位,你可以理解 Golang是基于 struct来实现OOP特性的。 Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等 Golang仍然有面向对象 阅读详情

相关推荐

rk3568 android 11.0 userdata 改为ext4格式

功能:解决设备在恢复出厂设置进行擦除数据的时候卡住问题。 1.修改userdata分区为ext4格式 diff --git a/device/rockchip/common/scripts/fstab_tools/fstab.in b/device/rockchip/common/scripts/fstab_tools/fstab.in index 583e75579d..036336835d 100755 --- a/device/rockchip/common/scripts/fstab_tools/

chgh1306的专栏 2576

Go语言中的函数类型参数:深入理解`func()`

Go语言中的func()是一种特殊的函数类型,表示不接受参数且不返回值的函数。它在并发编程、回调机制和接口设计中具有重要作用。本文详细解析了func()的本质、核心应用场景(如回调机制、并发控制和中间件模式)、进阶用法(如带参数的函数类型和函数组合)、性能考量、最佳实践、设计模式应用(如命令模式和策略模式)、常见陷阱以及与其他语言的对比。func()作为Go语言函数式编程的基础构建块,简洁且功能强大,适用于事件驱动编程、并发控制和代码解耦。掌握其使用能显著提升代码的表达力和模块化程度。

言之。 1万+

台达B3伺服电机485通讯的调试过程

最近上了一项目,没办法直接把B3伺服接到PLC上去,怎么办?偶说试下直接电脑通过100多米的485线控制好了,定型前的测试就这样展开了。 1、焊CN1口 如果不安装CN1,是开不了机的,要报很多错误,比如SERV EMG ALERT, 上限报警,下限报警什么的,怎么办?直接焊好CN1头子吧,烦了点,但是必要的。 主要接的是11,9,10,32,31,30几个脚,按照图上连接好就是了。 2、 接线路 按照上面的图,接上伺服电机线,编码器线,电源线,包括限位常闭开关、485连线等,就完..

shidong01的博客 1万+

golang中函数和方法区别

整体类似,区别是 函数属于包,通过包调用,方法属于结构体,通过结构体变量调用 方法定义 : func (变量名 结构体类型) methodName(参数列表)(返回值列表){} 函数定义 : func methodName(参数列表)(返回值列表){} 调用方法时就把调用者赋值给接收者.(方法中的变量名) 方法实例: type A struct { Name ...

guan3515的专栏 378

基于ADS\HFSS\Matlab的平面带通发夹滤波器设计

写在最前面,前段时间完成了一个小项目,实现13.5~14GHz的带通滤波器,算是第一个微波项目,在老师、学长、各种大神的指点下,最终完成了指标,想来这段时间收获良多,想到老师教导的,有能力的话要尽可能帮助别人,以及网络上很少面向于小白的教程,于是决定把自己做这个小项目的经过,一些关键步骤,还有软件操作和公式讲解都发出来,供大家指正借鉴。由于我目前大三,刚学习电磁场、微波工程等等,技术实在有限,同时这样是我第一次发帖子,只能尽可能的将自己确认过正确的内容,步骤以及一些经验写出来,供大家借鉴。

likaifeng12138的博客 5215

保姆级教程:用ROS2 Humble和激光雷达,5分钟搞定机器人避障(附Python代码)

本文提供了一份详细的ROS2 Humble激光雷达避障实战指南,帮助开发者快速实现机器人避障功能。通过环境配置、硬件连接和Python代码实现,5分钟内即可让机器人自主避开障碍物。文章还涵盖了参数调优、常见问题排查及进阶优化技巧,适合机器人开发初学者和进阶用户。

weixin_42528902的博客 342

go学习-结构体

student := Student{Class: class, Name: "张三", Age: 12, Pwd: "123456"}Pwd string `json:"pwd"` //`json:"p-"`忽略。fmt.Printf("%s在%s学习\n", s.Name, s.Class.ClassName)class := Class{ClassName: "一班"}fmt.Println(s.Name, "在学习")student.setName("李四")

weixin_39460121的博客 245

用 ABAP 的 AMDP 把计算推到数据库:概念、场景、以及可运行示例

摘要:AMDP(ABAP Managed Database Procedures)是SAP HANA环境下优化ABAP性能的关键技术,通过将数据计算逻辑推送到数据库端执行,减少数据传输和应用层处理开销。其核心价值在于利用HANA的集合运算能力,适用于大数据量聚合、窗口函数等复杂计算场景。AMDP不是通用解决方案,而是针对CDS无法高效处理的特定性能瓶颈的优化手段。典型应用包括财务统计、零售分析等需要高性能数据处理的业务场景。本文通过概念解析、性能逻辑推导和实际代码示例(包括直接调用的AMDP Procedu

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 259

go -func

package main import "fmt" func add(a, b int) int { return a + b } func test() { return } func main() { c := add sum := c(200, 300) fmt.Println(sum) str := "hello, world,中国" for index, val := range str { fmt.Printf("index[%d] val[%c] len[%d]

alpha_love的博客 145

基于C#开发ABB机器人上位机系统:从操作控制到数据交互的全方位实现

ABB工业机器人是世界领先的自动化设备之一,广泛应用于焊接、装配、搬运、喷涂、包装等多个行业。机器人控制器:用于控制机器人运动、路径规划、状态监控等。上位机系统:提供人机交互界面,允许操作员与机器人进行交互,实现实时控制、参数调整和数据分析。上位机系统通过与机器人控制器通信,采集机器人状态数据,发送控制指令,实现远程监控和控制操作。通过高效的操作界面和数据交互,可以大大提高机器人的工作效率和系统的可维护性。基于C#开发ABB机器人上位机系统,能够实现高效的机器人控制与实时数据交互。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1178

龙虾机器人(OpenClaw)本地部署完全技术指南

在开始部署之前,我们需要明确部署的对象。通常所说的“龙虾机器人”指的是开源项目 OpenClaw(曾用名:Clawdbot、Moltbot)。它由程序员彼得·斯坦伯格开发,是一个开源的、可本地部署的通用型AI代理系统。与ChatGPT等对话式AI不同,OpenClaw被赋予了操作系统的权限:它可以执行终端命令、读写文件、操控浏览器、安装软件,甚至通过MCP协议调用外部工具。

huanghm88的专栏 2万+

go语言 func函数

一、函数定义 函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你的代码。 编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务(那就是函数)来解决。在实际编程中,我们把重复性的任务抽象成一个函数。 和所有的编程语言一样,Go语言支持各种风格的函数。在Go语言中,当函数执行到代码块最后一行 } 之前或者 return 语句的时候会退出,其中 return 语句可以带有零个或多个

weixin_43452467的博客 8972

高比例风电电力系统储能运行及配置研究(python&Matlab实现)

目录1 概述2 案例3 Matlab实现 3.1 题目及分析3.2 Matlab代码 4 七个题全部代码(值得学习) 下面我们先以第二题为例,然后给出Matlab代码:先考虑风电装机300MW直接替代机组3的发电功率曲线,观察系统功率平衡发生的变化情况。然后在此场景下,以最小发电成本为目标函数,将负荷分配给两台火电机组1、2和风电机组,绘制机组日发电计划图。再将风电装机容量作为一个决策变量,以最小发电成本为目标函数,求取最小发电成本对应的风电装机容量,绘制机组日发电计划图。1. 风电装机300MW、直接

weixin_46039719的博客 1738

Golang基础(go语言的面向对象:封装、继承、接口、多态、断言)

一.面向对象和面向过程 面向过程编程代码只适用于当前情况,而面向对象编程更注重重用,同一套代码可以使用多样的情况 面向过程编程(OPP)就是详细的按照顺序的把整个过程实现 例如:学生从家里去上学需要出门-->找到OFO-->扫描开锁-->上车-->直行-->左拐-->找到”粥饼面”-->停车-->上锁-->开门--> 找到座位-->点山东煎饼和四川火锅-->上菜-->吃饭-->现金付钱-->出

qq_31387691的博客 840

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

【Golang 快速入门】基础语法 + 面向对象

Golang 语言特性 Golang 的优势 Golang 的应用场景 Golang 的不足 基础语法 main 变量 常量与 iota string 字符串遍历 strings 包 bytes 包 strconv 包 unicode 包 循环语句 range 函数 多返回值 init 函数 闭包 import 导包 匿名函数 指针 defer 切片 slice 数组 slice slice 操作 ... map map 的声明 map 的使用 error 面向对象编程 type 方法 struct 封装

萌宅鹿的技术小屋 9256

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

100天精通Golang(基础入门篇)——第21天:Go语言面向对象(OOP)核心概念解析

Go 面向对象编程 Go 结构体与类 Go 构造函数 New() Go 组合与继承 Go 接口实现多态 Go OOP 特性 Go 类型断言 Go 接口嵌套 Go 私有与公有可见性 Go 多态性实例 Go 结构体嵌套 Go OOP 教程 Go 语言面向对象入门 Go 类型与接口设计 Go 方法重写与接口 Go 语言 OOP 实践 Go 组合模式实现 Go 接口与多态性 Go 封装实现方法 Go OOP 最佳实践

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 5万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

MyGo(速通Golang基础)

简单过一下基础()

PureStr的博客 1208

Golang 基础学习文档

Golang 基础学习文档 去发现同类优质开源项目:https://gitcode.com/ 欢迎阅读《Golang 基础学习文档》,本资源旨在为零基础的学习者或有其他编程语言基础想转型学习Go语言的人士提供一份全面、易懂的学习资料。 本学习文档详细介绍了Go语言的基本语法、特性、最佳实践等,无论您是编程新手还是希望提升Go语言技能的开发者,都可以通过这份文档找到适合的学习内容。 文档涵盖了Go语...

gitblog_06796的博客 333

Go语言基础

目录: Go语言介绍 Go HelloWorld Go 变量定义 Go 变量类型 Go的常量 Go语言介绍 Go 即为Golang,是Google公司2009年对外公开的一门编程语言。 Go 是静态类型语言,是编译型语言。 编译型语言:源代码编译生成机器语言,然后由机器直接执行机器码即可执行。 Go语言特性 跨平台的编译型语言 语法接近C语言 管道(channel),切片(slic...

番茄炒蛋君的博客 367

Golang基础入门

本篇教程适用于对Golang感兴趣的初学者,也适用于对Golang基础知识点不太熟练的初学者,也适用于对于Golang基础知识点查缺补漏的初学者,此文档知识内容丰富,收录了较为详细的Golang常用知识点,通过本篇文档,希望对大家Golang的基础学习有所帮助(如果有重要的知识点,博主未列出,请在下方评论处指出,谢谢!)

m0_73094011的博客 2669

GO语言核心编程(上 + 下)

330.海量用户通讯系统-显示在线用户列表(1)331.海量用户通讯系统-显示在线用户列表(2)332.海量用户通讯系统-显示在线用户列表(3)333.海量用户通讯系统-显示在线用户列表(4)334.海量用户通讯系统-显示在线用户列表(5)335.海量用户通讯系统-显示在线用户列表(6)336.海量用户通讯系统-显示在线用户列表(7)371.数据结构和算法-栈的计算表达式(1)372.数据结构和算法-栈的计算表达式(2)373.数据结构和算法-栈的计算表达式(3)

niwoxiangyu的博客 955

GO语言入门

直接在当前文件下定义init函数,在执行这个文件的其他函数之前会先执行init函数。defer语句的运行顺序为栈顺序,先进的后出,后进的先出。对C的降级处理,并发无缝,没有C降级到asm那么完美。defer关键字主要表示语句在程序运行结束之前运行。所有Exception都用Error来处理。包管理,大部分包都在GitHub上。slice(动态数组)

yuanyajieh的博客 804

Golang速成

Golang语言速成

潆勖的博客 2391

Go最全Golang 并发编程_go 语言取消并行(2),2024年最新一个月成功收割腾讯、阿里、字节offer

c := make(chan string) // 创建一个通道 channel, 无缓冲区, 使用时要同时具备输入和输出, 即该管道要同时可写入和读取。go foo() // 新建新的 goroutine 去执行函数 foo。foo() // 执行函数 foo, 程序等待函数 foo 返回。bar() // 不用等待函数 foo 返回, 两个函数并发执行。// Foo 定义结构体, 相当于类。// Foo 定义结构体, 相当于类。// 接收者, 方法。// 接收者, 方法。

2401_84904706的博客 779

Go语言快速入门(基础语法与面向对象OOP)

本文介绍了Go语言的基础环境搭建和核心特性。首先说明了学习Go语言的前置条件,包括后端开发经验和Linux基础。详细讲解了Go环境安装步骤和GOPATH配置方法。重点分析了Go语言的五大优势:简单部署、静态类型检查、语言级并发支持、强大标准库和易学性,以及其在云计算、微服务等领域的应用场景。通过代码示例演示了变量声明、常量使用、多返回值函数等基础语法,并讲解了指针操作和defer关键字的使用。最后介绍了Go的模块化开发方式,包括常规导入、别名导入和匿名导入三种方式。本文为Go语言初学者提供了全面的入门指导。

Huathy的博客 819

Go学习笔记

Golang 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录Golang前言一、Golang环境1.目录结构2.代码结构二、Golang基础1.Go执行过程分析2.语法注意事项3.代码风格4.API(源码查找)5.变量A.四种使用形式6.基本数据类型A.整数类型Ⅰ.有符号整数类型Ⅱ.无符号整数类型Ⅲ.其他整数类型B.浮点数类型C.字符类型D.Boolean类型![在这里插入图片描述](https://img-blog.csdnimg.cn/871fac466eb14c47a184

weixin_43953343的博客 283
上一篇: 【开发中遇到的问题】npm 安装 sass-loader 出现 gyp verb which failed Error:not found: python2 错误
下一篇: 【Docker】容器自启动
hvkcoder
博客等级 码龄11年 28粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值