Go语言学习笔记 | 豆包MarsCode AI刷题

125 阅读4分钟

之前一直都在忙着学业上的事情,开始学的时间有点晚了,今天开始才写第一篇伴学笔记。

第一课是王克纯老师讲的《走进Go语言基础语法》和《Go语言的实战案例》,主要学了关于Go语言的一些基础运用以及三个实际案例。我就记录一下课程中的知识点,我的理解以及豆包AI的使用。

流水的编程语言,铁打的“hello world”。第一个程序总得是它。

image.png

这几行代码就包含了Go语言的一些不同之处。第一句是package main,我的第一感觉是java里面的包,之前学java的时候就是package com.juejin.marscode_ai这样的形式,而这里是main包,肯定是和java的不同。 在课程中,老师解释了这是程序的入口处,但我也是第一次接触Go语言,想知道更多的信息,这个时候就可以去问MarsCode AI了(^-^)。

问:package main的意义是什么?

答:在Go语言中,package main 是一个特殊的包,它定义了一个可执行的程序。当你使用 go run 命令运行Go程序时,它会查找名为 main 的包,并从该包的 main 函数开始执行。

package main 的主要意义如下…………(详情见MarsCode AI的回答)

当然,可以看一遍还是没看明白,我又继续问这和java中的package有什么区别或者关系吗?如果package dog,那么入口处是不是dog函数?等挺多看着挺傻的问题。

现在我的理解就是和public static void main(String args[]){}类似的程序入口的指引。

第二句也是熟悉的import语句,python和java都是import,c++是#include(与众不同)。Go里面多个import可以放一个括号里面。

main函数里的内容就是print语句了,和java差不多,这里是fmt,java是System.out(短了一点)

第二个代码是变量,定义的方法略有不同,double变成了float64,试了一下int aaa = 3,报错了,改成aaa := 3,发现aaa的下面还是红色波浪线,我还以为是写错了,后来发现是多余了,没用到aaa变量。

后面是if语句和for循环,去掉了括号,可以少打一点代码,没什么太大的变化。在if语句的代码中,if num := 9; num < 0 { fmt.Println(num, "is negative") },在if的条件语句里面声明了一个变量,挺新奇的。问MarsCode AI,别的语言能不能再if判断语句中声明变量,它回答c、c++和java要在if语句前声明,这是Go语言的一个独特特性。

之后介绍了swtich语句和数组,略有变化。后面介绍了slice和map,类似c++里的vector和map,不过map的排序是随机排序的。紧接着的range是对于数组、slice或者map的遍历,类似python。

然后,就介绍了函数func、指针、结构体以及结构体方法。func形式类似python,指针和结构体类似c++。

接下来,介绍了错误处理的相关代码,在函数中返回error。可以借助MarsCode AI对代码的每一行进行注释,从而更好理解,在这个代码中,是一种显式的错误处理方式,不同于java中的异常处理,需要自己发现会出现的错误,进行处理。

后面就是字符串string的操作了,这里是strings。字符串的操作还是挺常见的,这里记录一下(不是水字数,字数已经足够了)(用MarsCode AI可以很快活的每个操作的用法)

  1. strings.Contains(a, "ll"):检查字符串 a 是否包含子串 "ll"
  2. strings.Count(a, "l"):统计字符串 a 中 "l" 出现的次数。
  3. strings.HasPrefix(a, "he"):检查字符串 a 是否以 "he" 为前缀。
  4. strings.HasSuffix(a, "llo"):检查字符串 a 是否以 "llo" 为后缀。
  5. strings.Index(a, "ll"):返回字符串 a 中 "ll" 第一次出现的位置。
  6. strings.Join([]string{"he", "llo"}, "-"):使用指定的分隔符 - 连接字符串切片中的元素。
  7. strings.Repeat(a, 2):重复字符串 a 指定的次数(这里是 2 次)。
  8. strings.Replace(a, "e", "E", -1):将字符串 a 中的所有 "e" 替换为 "E"-1 表示替换所有匹配项。
  9. strings.Split("a-b-c", "-"):使用指定的分隔符 - 将字符串分割成字符串切片。
  10. strings.ToLower(a):将字符串 a 转换为小写形式。
  11. strings.ToUpper(a):将字符串 a 转换为大写形式。
  12. len(a):返回字符串 a 的长度。

接着是输出相关的fmt、json序列化、时间处理、数字解析、进程信息。这里的fmt、时间处理和数字解析和c、c++、java区别不大。json和进程信息处理了解的不多,虽然靠MarsCode AI的解释有一定了解,但还需要进一步的深入学习。

明天接着学!!