之前一直都在忙着学业上的事情,开始学的时间有点晚了,今天开始才写第一篇伴学笔记。
第一课是王克纯老师讲的《走进Go语言基础语法》和《Go语言的实战案例》,主要学了关于Go语言的一些基础运用以及三个实际案例。我就记录一下课程中的知识点,我的理解以及豆包AI的使用。
流水的编程语言,铁打的“hello world”。第一个程序总得是它。
这几行代码就包含了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可以很快活的每个操作的用法)
strings.Contains(a, "ll"):检查字符串a是否包含子串"ll"。strings.Count(a, "l"):统计字符串a中"l"出现的次数。strings.HasPrefix(a, "he"):检查字符串a是否以"he"为前缀。strings.HasSuffix(a, "llo"):检查字符串a是否以"llo"为后缀。strings.Index(a, "ll"):返回字符串a中"ll"第一次出现的位置。strings.Join([]string{"he", "llo"}, "-"):使用指定的分隔符-连接字符串切片中的元素。strings.Repeat(a, 2):重复字符串a指定的次数(这里是 2 次)。strings.Replace(a, "e", "E", -1):将字符串a中的所有"e"替换为"E",-1表示替换所有匹配项。strings.Split("a-b-c", "-"):使用指定的分隔符-将字符串分割成字符串切片。strings.ToLower(a):将字符串a转换为小写形式。strings.ToUpper(a):将字符串a转换为大写形式。len(a):返回字符串a的长度。
接着是输出相关的fmt、json序列化、时间处理、数字解析、进程信息。这里的fmt、时间处理和数字解析和c、c++、java区别不大。json和进程信息处理了解的不多,虽然靠MarsCode AI的解释有一定了解,但还需要进一步的深入学习。
明天接着学!!