[Review]GoLang Learn Data Day 3

ReviewGoLang Learn Data Day 3

原贴地址:https://www.cnblogs.com/Reisentyan/p/20206814

最近一直很忙,于是理所当然的在企业训练营的技术面中落败了。

现在正在准备秋招,目标是全栈吧,不过为了以防万一,全栈要是没进去就倒闭的情况,还是各种东西都先学一点。首当其冲就是学go语言了,现代应该挺流行这个。不过因为太久没看,语法全忘记了,这里重新学一遍。

金八银九,我来了。

一、 概述

本文档基于现有的 main.go 源码,提炼并归档了 Go 语言的核心基础语法、复合数据结构及面向对象特性的应用规范。源码完整展示了从变量声明到复杂结构体操作的执行链路。

二、 核心模块解析

1. 变量与控制流

  • 变量声明 :代码中混合使用了标准声明(var a int)、类型推导(var b = "string")及简短声明(n := 1),并定义了常量(const P)。
  • 条件与循环
    • 使用无括号的 if 语句进行逻辑分支判断。
    • 通过 for 关键字实现了两种遍历模式:标准步进循环(for i:=1; i<=10; i++)以及替代传统 while 语法的条件循环(for n <= 10)。

2. 函数设计 (Functions)

  • 标准与多返回值 :实现了基础函数 add 以及支持多返回值的函数 devide,演示了 Go 语言在应对复合计算结果输出时的标准范式。
  • 占位符与格式化 :通过 fmt.Printffmt.Println 的对比调用,明确了定制化排版输出与标准换行输出的设计隔离。

3. 复合数据结构 (Data Structures)

  • 切片 (Slice) :构建了动态数组 qiepian,演示了索引访问、定点修改,并使用 append 函数实现了切片的内存动态扩容。
  • 映射 (Map) :初始化了 scores 键值对字典,并结合 len() 函数演示了全局通用长度获取机制。
  • Range 迭代 :在 getall 函数中,通过 for _, va := range 语法,展示了忽略索引(使用空白标识符 _)并安全遍历切片元素的标准解法。

4. 面向对象特性 (Structs & Methods)

  • 结构体定义 :声明了 PersonDog 结构体,用于封装多维属性(如姓名、年龄、健康值),替代了传统面向对象语言中的 class 概念。
  • 指针接收者方法
    • 为结构体绑定了特定行为(如 Bark, Play, GetHealthy)。
    • 严格规范了指针接收者 (\*Dog) 的使用场景:在 Play() 方法中成功通过指针直接修改了实例对象的内部状态(Healthy -= 10),并确保了 GetHealthy() 具备明确的返回值类型。

三、 结论

该代码完整跑通了 Go 语言的新手核心链路,印证了 Go 语言"极简、正交、注重实用"的设计哲学。代码逻辑闭环良好,无冗余报错,具备向下继续扩展高级特性(如接口、并发)的坚实基础。

注意到,代码要写成这样:

go 复制代码
package main

import "fmt"

func add(a int, b int) int {
	return a + b
}

func devide(a, b int) (int, int) {
	return a / b, a % b
}

func getall(qiepian []int) int {
	var res int = 0
	for _, va := range qiepian {
		res += va
	}
	return res
}

type Person struct {
	Name string
	Age  int
}

func (p *Person) show() {
	fmt.Println("我是:", p.Name, "。我", p.Age, "岁")
}

type Dog struct {
	Name    string
	Healthy int
}

func (dog *Dog) Bark() {
	fmt.Println("wof")
}
func (dog *Dog) Play() {
	dog.Healthy -= 10
}
func (dog *Dog) GetHealthy() int {
	return dog.Healthy
}

func main() {
	var a int = 10
	var b = "string"
	var c int = 100
	const P = 3.1415926

	if a >= 10 {
		a -= 10
	}

	for i := 1; i <= 10; i++ {
		a += i
	}

	n := 1
	for n <= 10 {
		c += n
		n += 1
	}

	fmt.Println(a)
	fmt.Println(b)
	fmt.Println(c)
	fmt.Println(c + a)
	fmt.Println(P)

	fmt.Println(add(a, c))

	q, r := devide(a, c)
	//Printf 定制格式化输出,强制第一个参数是字符串
	//Println 标准换行输出,每个参数中间插入空格,最后加上换行
	fmt.Printf("%d,%d", q, r)
	fmt.Println()
	for i := 1; i <= 20; i++ {
		if i%2 == 0 {
			fmt.Printf("%d ", i)
		}
	}

	qiepian := []int{10, 20, 30}
	fmt.Println()
	fmt.Println(qiepian)
	fmt.Println(qiepian[0])
	qiepian[1] = 200
	qiepian = append(qiepian, 100, 200)
	fmt.Println(qiepian)

	fmt.Println("qiepian", getall(qiepian))

	scores := map[int]string{1: "a", 2: "b", 3: "c"}

	var len int = len(scores)
	for i := 1; i <= len; i++ {
		fmt.Println(scores[i])
	}
	fmt.Println("len:", len)

	per := Person{Name: "小王", Age: 18}
	fmt.Println(per.Name, per.Age)
	fmt.Println(per)
	per.show()

	dog := Dog{"王", 100}

	dog.Bark()
	dog.Play()
	fmt.Println(dog.GetHealthy())

}
相关推荐
H_老邪13 小时前
Java基础-Java 核心语法与面向对象(底层原理级)篇
java·开发语言
承渊政道13 小时前
我的创作纪念日写在创作第256天:从第一篇C语言博客,到一路向前的自己!
c语言·开发语言·笔记·学习·学习方法
暗冰ཏོ13 小时前
Java 后端开发完整学习指南:从基础语法到 Spring Boot 项目实战
java·spring boot·后端·spring·java-ee
牵着毛驴唱着歌13 小时前
JaVers 版本历史功能完整实现指南
java·javers·变更记录
山有木兮啊14 小时前
Windows C++ 跨 CRT 内存管理与安全释放
开发语言·c++·windows
lly20240614 小时前
Linux Memcached 安装指南
开发语言
止语Lab14 小时前
从文件到配置中心:Go 配置管理的三个升级拐点
开发语言·后端·golang
better_liang14 小时前
每日Java面试场景题知识点之-JUC并发编程核心原理与实战
java·线程池·并发编程·juc·aqs·reentrantlock·concurrenthashmap
小张小张爱学习14 小时前
Java-io流
java·开发语言