Go基础语法 | 青训营

106 阅读3分钟

1.为什么用go:

  • 高性能,高并发
  • 语法简单,学习曲线平缓
  • 丰富的标准库
  • 完善的工具链
  • 静态链接(静态编译)
  • 快速编译;跨平台
  • 垃圾回收(无需考虑内存的分布和释放)

2.开发环境

  • 安装go,进行环境配置
  • 开发环境: 可以选择vscode(需要装配相关插件)或安装Golang

3.基础语法

3.0 Hello,World!

package main    //程序的入口

import (
   "fmt"         //格式化输入输出,导入fmt包
)

func main() {
   fmt.Println("hello world")        //主函数
}
  • Println输出时,会自动换行

3.1 变量和常量

  • c语言基础类型都有,字符串是内置变量
  • 变量赋值,用:=,如a := 7
  • 变量声明用var,可以无需说明变量类型,如有需要加在变量名后,如var a int

字符串定义

  • var a := "initial"
  • 这里注意字符串是Go的内置类型,可以直接用+进行拼接
  • g := a + "hello"

整型数据

Go语言支持一次定义多个变量,并同时赋值

var a,b int = 1,2

布尔型定义

Go支持布尔类型定义 var d = true

浮点数定义

   var e float64

go语言支持科学计数法

   f := float32(e)

常量无需声明类型,

  • GO中的常量并没有确定类型,类型会在上下文自行判断
  • 常量只需把var改成const即可
    const s string = "constant"
    const h = 500000000
    const i = 3e20 / h
    

格式化输入输出

  • Printf输出时,只需要用%v进行,不需要区分%d,%s
  • 打印结构体时,用%+v,打印结构体字段和值;
  • 用%#v,打印整个结构体包括名字
  • 打印浮点数和c语言一样,用%f

3.2 if...else条件语句

  • 规则和c语言不同的地方:
    • go中,if的判断条件无需加括号
    • if语句必须用{},与c语言不同的是条件语句不能和大括号里的语句在同一排
if num := 9; num < 0 {
   fmt.Println(num, "is negative")
} else if num < 10 {
   fmt.Println(num, "has 1 digit")
} else {
   fmt.Println(num, "has multiple digits")
}

3.3 循环

  • go语言中只有for循环,且循环条件无需加括号,其余同c语言相同
  • continue和break用法和c语言相同
for j := 7; j < 9; j++ {
   fmt.Println(j)
}

3.4 switch分支语句

和c语言的不同点:

  • case语句中无需break,便可自动跳出
  • 条件可以在case后加
  • switch后加条件不用加括号
switch {
case t.Hour() < 12:
   fmt.Println("It's before noon")
default:
   fmt.Println("It's after noon")
}

3.5 go语言数组

  • 切片与python类似,但要注意需要用len找到数组大小
  • append:对数组扩容并赋值
  • map(python里的数组)
  • map映射:一般用make进行自变量映射,同时随机输出
  • range:快速遍历,返回数组的内容及其下标

3.6 go函数

  • 规则与c语言大同小异,要注意的是传入参数的类型应放在参数名之后
  • 函数里对变量本身进行运算,需传入指针变量
func add2ptr(n *int) {
   *n += 2
}

3.7 指针

  • 指针的定义:和c语言相同(*)
  • 和c语言不同,Go中指针的唯一用途就是对传入参数进行修改

3.8 错误处理

在函数的返回类型里加上error,用if...else进行判断,若error存在便需要进行异常处理,否则可能会出现空指针等错误。

3.9 时间处理

  • 常用的有time.Now,time.Data
  • 用.Year .month .day等输出均可

3.10 数字解析

  • ParseInt,ParesFloat(解析的字符串,进制,输出位数);
  • 可以灵活运用atoi和itoa:字符串和数组替换

4 引用参考

  • 字节青训营Go语法基础课