[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())

}
相关推荐
用户35218024547518 小时前
当 Prompt 学会"热更新":Spring Boot × Nacos3 AI 实战
java·spring boot·ai编程
东坡白菜21 小时前
破局全栈:一个前端开发的Java入门实战记录(1)
java·全栈
唐青枫21 小时前
Java Tomcat 实战指南:从 Servlet 容器到 Spring Boot 部署
java
wsaaaqqq1 天前
roudan:自由选择实体、灵活操作数据、快速写入数据库的 Java 框架
java
plainGeekDev1 天前
null 判断 → Kotlin 可空类型
android·java·kotlin
糖拌西瓜皮1 天前
Java开发者视角:深入理解Node.js异步编程模型
java·后端·node.js
plainGeekDev1 天前
getter/setter → Kotlin 属性
android·java·kotlin
一线大码1 天前
Smart-Doc 的简单使用
java·后端·restful
MacroZheng1 天前
Claude Code官方桌面端正式发布,夯爆了!
java·人工智能·后端