go语言基础 | 豆包MarsCode AI刷题

94 阅读5分钟

Go语言中共有25个关键字

break      default       func     interface   select
case       defer         go       map         struct
chan       else          goto     package     switch
const      fallthrough   if       range       type
continue   for           import   return      var

预定义名称列表

// 内建常量 
true false iota nil

// 内建类型 
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error

// 内建函数
make len cap new append copy close delete
complex real imag
panic recover

示例Demo

在以下Go语言示例代码中,主要由三部分包含组成:

image.png 第一部分导入包名,默认为 main ;

第二部分导入标准库;

第三部分 main函数定义,在go语言中,代码如果需要跑起来,代码必须要有main函数作为入口。

习惯上,Go语言程序员推荐使用 驼峰式 命名,当名字由几个单词组成时优先使用大小写分隔,而不是优先用下划线分隔。

import

导入标准库或第三方库

(
import "fmt" 

)

声明、赋值

Go语言主要有四种类型的声明语句:var、const、type 和 func,分别对应变量、常量、类型和函数实体对象的声明。

var

var声明语句可以创建一个特定类型的变量,然后给变量附加一个名字,并且设置变量的初始值。

变量声明的一般语法:

// var 变量名字 类型 = 表达式
var name string = "aaa"

数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil

也可以在一个声明语句中同时声明一组变量,或用一组初始化表达式声明并初始化一组变量。

var i, j, k int                 // int, int, int
var b, f, s = true, 2.3, "four" // bool, float64, string

一组变量也可以通过调用一个函数,由函数返回的多个返回值初始化

var f, err = os.Open(name) 

定义字符串数组语法

var strArrar1 []string // 声明类型为string数组
var strArrar2 []string{"a", "b"} // 并初始化值

const

常量表达式的值在编译期计算,而不是在运行期。每种常量的潜在类型都是基础类型:boolean、string或数字。 常量的值不可修改,这样可以防止在运行期被意外或恶意的修改。

// 声明
const num = 10

type

新命名的类型,用来分割不同概念的类型,这样即使它们底层类型相同也不是兼容的

// type 类型名字 底层类型
type Num float64

类型声明语句一般出现在包一级,因此如果新创建的类型名字的首字符大写,则在包外部也可以使用。

func

函数声明包括函数名、形式参数列表、返回值列表(可省略)以及函数体。

func name(param) (result) { 
    // body 
}

函数传参,返回值 float64类型

func hypot(x, y float64) float64 {
  return math.Sqrt(x*x + y*y)
}

引用类型

map

介绍

哈希表是一种巧妙并且实用的数据结构。 它是一个无序的key/value键值对的集合,其中所有的key都是不同的,然后通过给定的key可以在常数时间复杂度内检索、更新或删除对应的value。

在Go语言中,一个map就是一个哈希表的引用,map类型可以写为map[K]V,其中K和V分别对应key和value。map中所有的key都有相同的类型,所有的value也有着相同的类型,但是key和value之间可以是不同的数据类型。其中K对应的key必须是支持==比较运算符的数据类型,所以map可以通过测试key是否相等来判断是否已经存在。

map类型的零值是nil, 也就是没有引用任何哈希表。

使用

使用内建make函数创建一个map

ages := make(map[string]int)    

可以用map字面值的语法创建map,同时还赋值key/value

ages := map[string]int{"age1": 18, "age2": 19}

另一种创建空的Map表达式

ages := map[string]int{}

Map中元素通过key下标语法访问

ages["age1"] = 18
fmt.Println(ages["age1"])

使用内建delete函数可以删除元素

delete(ages, "age1")  // 即使某些元素不在map中也没有关系,失败时将返回0。

遍历map中全部的key/value对的话,可以使用range风格的for循环实现

for name, age := range ages {
    fmt.Printf("%s\t%d\n", name, age)
}

Go语言的语法简洁明了。它的变量声明方式简洁,不像其他一些语言有复杂的类型修饰。在运行效率上也表现出色。执行速度快。在处理大规模数据或者高并发场景时,能够高效地利用系统资源。 学习Go语言基础后,对并发编程模型印象深刻。Go语言中的协程(goroutine)和通道(channel)是处理并发的有力工具。可以轻松创建成千上万个协程而不会给系统带来过大的负担。通道则为协程之间的通信提供了安全可靠的方式,避免了共享内存带来的并发安全问题。