Go语言入门指南|青训营

Go语言入门指南|青训营

1 特性介绍

  • 语言简洁、学习曲线平缓:一名学习过c++的程序员从上手Go语言,到熟练使用,只需要一周左右时间
  • 开发效率高:Go语言内置垃圾回收机制,大大提高其开发效率
  • 代码风格统一:Go语言提供了一套格式化工具------fmt,可以保证不同开发者提交的代码都是统一的格式。
  • 支持并发
  • 有丰富的标准库
  • 跨平台

2 基础语法

2.1 从Hello world走进Go语言

如果说有什么是一个程序员上手一门新语言的重要一环,那一定是用新语言输出Hello,world无疑了。那么,今天就让我们从这个新语言入门标志出发,开始我们Go语言的学习之旅。

打印Hello,world的Go语言代码如下:

go 复制代码
package main
import {
    "fmt"
}
func main(){
    fmt.Println("Hello,world")
}

这是Go语言中较为简单的一类代码。但麻雀虽小,五脏俱全。先看第一行package,顾名而思义,肯定指的就是一种包,具体而言,当然就是我们这里的main包了。实际上在Go语言中,package就是其源代码的一个集合,像os、io,以及后面的fmt都是这样的一个包。那么它在使用时有哪些注意事项呢?

  • 使用main包时,即为使用应用程序的入口包,编译后会得到一个可执行文件,至于其他的包则没有这个效果
  • 可以自定义包,看作是一个存放.go文件的文件夹,该文件夹下所有go文件都要在第一行添加
go 复制代码
package 包名

再看第二行,我们用到了import,这就又牵涉到包的另一种操作,包的导入。这是为了在文件中引用其他包的内容,这里就有点像我们c语言中的include添加头文件的用法。

最后就是我们代码的主题部分:在main函数中调用fmt包中的输出函数Println,实现对Hello,world的打印。

简单总结下:为了使程序可执行,我们在一开始声明了main包,然后为了使用标准输出函数,我们又导入了fmt包,最后调用fmt中的Println,实现打印Hello,world。顺带提一句,如果要实现程序的运行,只需要在命令行里输入go run 文件地址,即可。

2.2 变量

go 复制代码
//两种声明变量的方式
var a ="Hello,world"//或者var a string ="Hello,world"
a:="Hello,world"

从以上两种方式可以看出,Go语言作为一门高级语言,具有自动推导类型的功能,因此,也就不必写出具体变量类型,但如果要写,应注意类型名在变量名后。另外一个细节,在前面没有var时,赋值所用为":=",而非"="

2.3 语句

if-else语句:后面的条件不需要加括号,而且括号后紧跟大括号,不可像c语言中将大括号中的内容写在同一行。

循环:只有for循环,其他类似c语言中的循环,则用for进行等价表示。

switch语句:一个重要区别是,在Go语言中如果有匹配项,不需要break,就会自动跳出。由此我们得到了一个不同于c语言中switch的用法,用来代替if-else语句。

go 复制代码
switch{
    case a<10 :
        fmt.Println("It's too small.")
    default:
        fmt.Println("It's too big.")
}

2.4 数组与切片

数组和c语言中的类似,只需要记住它在Go语言中的类型是[n]+元素类型

而切片是一类可变长度的数组,常见操作如下:

go 复制代码
//声明和赋值
s := make([]string,5)
s[0] = "a"
//追加
s = append(s,"g")

2.5 map

就是其他语言中的字典,重点在于key和value的对应,以下是它的常见操作:

go 复制代码
m := make(map[int]string)
m[1] = "one"
fmt.Println(r,ok)//r是一个value,此处用于表示判断r是否在m中
delete(m,1)

2.6 错误处理

go 复制代码
//一个运用到error的函数
func findUser(users []user,name string)(v *user,err error){//返回值加上error
    for _,u:= range users{
        if u.name == name{
            return &u,nil//代表没有出错
        }
    }
    return nil,errors.New("not found")//代表有问题
}

这里相当于在函数中就考虑到了出错的可能,这样在后面调用函数时,只需要根据返回值来判断是否出错,从而达到错误处理的目的。

2.7 时间处理

go 复制代码
now := time.Now()//用于获取现在的时间
t.Format("2006-01-02 15:04:05")//用于格式化当前时间,应注意的是,后面的这串时间是固定的,不能随便写
diff := t2.Sub(t)//对两段时间做减法
相关推荐
千慌百风定乾坤15 小时前
Go 语言入门指南:基础语法和常用特性解析(下) | 豆包MarsCode AI刷题
青训营笔记
FOFO15 小时前
青训营笔记 | HTML语义化的案例分析: 粗略地手绘分析juejin.cn首页 | 豆包MarsCode AI 刷题
青训营笔记
滑滑滑2 天前
后端实践-优化一个已有的 Go 程序提高其性能 | 豆包MarsCode AI刷题
青训营笔记
柠檬柠檬3 天前
Go 语言入门指南:基础语法和常用特性解析 | 豆包MarsCode AI刷题
青训营笔记
用户967136399653 天前
计算最小步长丨豆包MarsCodeAI刷题
青训营笔记
用户52975799354723 天前
字节跳动青训营刷题笔记2| 豆包MarsCode AI刷题
青训营笔记
clearcold4 天前
浅谈对LangChain中Model I/O的见解 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵4 天前
【字节青训营】 Go 进阶语言:并发概述、Goroutine、Channel、协程池 | 豆包MarsCode AI刷题
青训营笔记
用户336901104444 天前
数字分组求和题解 | 豆包MarsCode AI刷题
青训营笔记
dnxb1234 天前
GO语言工程实践课后作业:实现思路、代码以及路径记录 | 豆包MarsCode AI刷题
青训营笔记