go语言语法基础

以下是 Go 语言主要语法要点的汇总,并附上代码示例:

 一、包与导入

 每个 Go 程序都是由包组成的。

 - 使用  package  关键字声明包名。

package main

- 通过  import  语句导入其他包以使用其中的功能。

import "fmt"

 二、变量与常量

 1. 变量声明: var name type = value 。可使用简短变量声明  name := value (需在函数内部且能推断出类型)。

var age int = 30

name := "John"

 2. 常量声明: const name type = value 。

const pi float64 = 3.14159

 三、数据类型

 1. 基本数据类型:

- 整数类型(如  int 、 uint 、 int8  等)。

var num int = 100

var smallInt int8 = 5

 - 浮点数类型(如  float32 、 float64 )。

var f1 float32 = 3.14

var f2 float64 = 6.28

 - 布尔类型( bool ),值为  true  或  false 。

var isTrue bool = true

 - 字符串类型( string )。

var str string = "Hello"

 2. 复合数据类型:

- 数组: var arr [n]type ,具有固定长度。

var arr [5]int

 - 切片:动态数组,可使用  make  创建或通过字面量初始化,如  s := []int{1, 2, 3} 。

s := make([]int, 0)

s2 := []int{4, 5, 6}

 - 映射(字典): m := make(map[keyType]valueType) 。

m := make(map[string]int)

 - 结构体:自定义数据类型,使用  type structName struct { field1 type1; field2 type2 }  定义。

type Person struct {

   Name string

   Age int

}

 四、控制结构

 1. 条件语句:

-  if 、 else if 、 else 。

num := 10

if num > 5 {

   fmt.Println("Number is greater than 5")

} else if num < 5 {

   fmt.Println("Number is less than 5")

} else {

   fmt.Println("Number is 5")

}

 - 可以在  if  语句中进行简短变量声明。

if n := 20; n%2 == 0 {

   fmt.Println("Number is even")

}

 2. 循环语句:

-  for  循环,有多种形式,如基本的  for init; condition; post {} 、 for condition {} 、 for {} (无限循环)。

for i := 0; i < 5; i++ {

   fmt.Println(i)

}

j := 0

for j < 3 {

   fmt.Println(j)

   j++

}

for {

   fmt.Println("Infinite loop")

   break

}

 -  range  关键字可用于遍历数组、切片、映射等。

arr := []int{1, 2, 3}

for index, value := range arr {

   fmt.Println(index, value)

}

m := map[string]int{"apple": 5, "banana": 3}

for key, value := range m {

   fmt.Println(key, value)

}

 3. 选择语句:

-  switch 、 case ,可以对多种条件进行判断。

day := "Monday"

switch day {

case "Monday":

   fmt.Println("It's Monday")

case "Tuesday":

   fmt.Println("It's Tuesday")

default:

   fmt.Println("Other day")

}

 五、函数

 - 使用  func  关键字定义函数,如  func functionName(parameters) returnTypes {} 。

go 复制

func add(a, b int) int {

   return a + b

}

 - 支持多返回值。

func divide(a, b int) (int, bool) {

   if b == 0 {

      return 0, false

   }

   return a / b, true

}

 - 函数可以作为参数传递给其他函数,也可以从函数中返回函数。

func apply(f func(int) int, n int) int {

   return f(n)

}

func double(n int) int {

   return n * 2

}

func main() {

   fmt.Println(apply(double, 5))

}

 六、指针

 - 可以使用  &  取变量的地址,使用  *  解引用指针。

num := 10

ptr := &num

fmt.Println(*ptr) // Output: 10

 - 通过指针可以修改指向的值。

func changeValue(ptr *int) {

   *ptr = 20

}

num := 10

changeValue(&num)

fmt.Println(num) // Output: 20

 七、结构体与方法

 - 定义结构体来组织数据。

type Person struct {

   Name string

   Age int

}

 - 可以为结构体定义方法,使用  func (receiverName structName) methodName(parameters) returnTypes {} 。

func (p Person) sayHello() {

   fmt.Println("Hello, I am", p.Name)

}

func main() {

   p := Person{"John", 30}

   p.sayHello()

}

 八、接口

 - 接口定义了一组方法签名。

type Shape interface {

   Area() float64

}

 - 任何实现了接口中所有方法的类型都被称为实现了该接口。

type Circle struct {

   Radius float64

}

func (c Circle) Area() float64 {

   return 3.14 * c.Radius * c.Radius

}

 - 接口实现是隐式的。

 九、并发编程

 1. 协程(goroutine):

- 使用  go  关键字启动一个协程,如  go functionName() 。

func printNumbers() {

   for i := 0; i < 5; i++ {

      fmt.Println(i)

   }

}

func main() {

   go printNumbers()

   for i := 5; i < 10; i++ {

      fmt.Println(i)

   }

}

 2. 通道(channel):

- 可以使用  make  创建通道,如  ch := make(chan type) 。

ch := make(chan int)

 - 支持发送  ch <- value  和接收  value := <-ch  操作。

func send(ch chan<- int) {

   ch <- 42

}

func receive(ch <-chan int) {

   value := <-ch

   fmt.Println(value)

}

func main() {

   ch := make(chan int)

   go send(ch)

   receive(ch)

}

 十、错误处理

 - 函数可以返回一个结果值和一个错误类型的值。

func divide(a, b int) (int, error) {

   if b == 0 {

      return 0, fmt.Errorf("division by zero")

   }

   return a / b, nil

}

 - 调用者需要显式地检查错误并进行处理。

func main() {

   result, err := divide(10, 0)

   if err!= nil {

      fmt.Println(err)

   } else {

      fmt.Println(result)

   }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值