Go语言基础语法一 | 青训营

94 阅读3分钟

一、初识Go语言

  1. 高性能、高并发,通过goroutine和channel实现。
  2. 语法简单、学习曲线平缓,可读性强。
  3. 丰富的标准库,特别是对于与网络协议和API开发相关。
  4. 完整的工具链
  5. 静态链接
  6. 快速编译
  7. 跨平台
  8. 垃圾回收
jspackage main

import "fmt"

func main() {
    fmt.Println("Hello World go!")
}

二、Go语言基础语法

1.声明变量

var a int = 1//初始化一个变量并赋值
var b,c int = 1,2//初始化多个变量并赋值
var d = 3//自动推导变量类型
e := 4//等同于var e = 4
const f = "hello"//const用来声明常量

2.条件语句

  • 条件语句不需要使用括号将条件包含起来()
  • 无论语句体内有几条语句,花括号{}都是必须存在
if a < 5 { 
   return 0 
} else if > 1{ 
   return 1 
} else { 
   return -1
}

3.循环语句

  • 在Go语言中,只能使用for循环,不支持while和do-while 结构
  • 在循环中可使用break和continue跳出或者继续循环
i := 1
for{
    fmt.Println("hello")
    break
}
for j := 1; j < 3; j++{
    fmt.Println(j)
}
for n := 0; n < 5; n++{
    if n%2 == 0{
        continue
    }
    fmt.Println(n)
}

4.选择语句

  • 条件表达式不限制为常量或者整数
  • 单个case中,可以出现多个结果选项
  • switch后面可不加任何变量,在case里写条件分支
a := 1
switch a {
case 1:
    fmt.Println("one")
case 2,3:
    fmt.Println("two or three")
default:
    fmt.Println("other")
}

t := time.Now()
switch {
case t.Hour() , 12:
    fmt.Println("It's before noon")
default:
    fmt.Println("It's after noon")
}

5.数组

  • 是一个具有编号且长度固定的元素序列
//初始化长度为5的int数组,默认值为0
var a [5]int
//初始化直接赋值
b := [5]int{1,2,3,4,5}

6.slice切片

  • 可以任意更改长度
  • 用append来追加元素必须要将append的结果赋值为原数组
  • 可任意取出元素
s := make([]String,2)
s[0] = "a"
s[1] = "b"
fmt.Println("get:", s[1]} //b
fmt.Println("len:", len(S)) //2
//append 结果赋值给原数组s
s = append(s,"c")
s = append(s,"d","e")
fmt.Println(s) //[a b c d e]
fmt.println(s[2:4]) //[c d]
fmt.println(s[:4]) //[a b c d]
fmt.println(s[2:]) //[c d e]

7.map数据结构

  • golang的map是无序的,遍历时随机输出
  • 使用make来创建空map,需要key类型和value类型<key:value><key:value>
  • 可以存储、取出、删除键值对
m := make(map[string]int)
m["one"] = 1
fmt.Println(m) //map[one:1]
//添加
m["two"] = 2
fmt.Println(m) //map[one:1 two:2]
//删除
delete(m,"one")
fmt.Println(m) //map[two:2]
//更改
m["two"] = 3
fmt.Println(m) //map[two:3]

8.函数

  • 函数变量类型后置
  • 支持多个返回值
  • 在实际业务逻辑中几乎所有函数返回俩个值,第一个是结果,第二个是错误信息
func add(a int, b int) int {
     return a + b

9.指针

  • 主要用来对传入参数进行修改
func add(n int) {
    n +=2
}

fun addptr(n *int){
   *n +=2
}

func main(){
    n :=5
    add(n)
    fmt.Println(n) //5 将n拷贝进入add函数中加2,但本身的n的值没有发生变化
    addptr(&n)
    fmt.Println(n) //7  将n的地址带入addptr中进行运算,实际的n发生变化

10.结构体

  • 结构体是带类型的字段集合
  • 实现结构体带指针:可以对结构体修改
  • 实现结构体不带指针:不可以修改,实际为一个拷贝
type user struct {
    name string
    password string
}   

三、个人总结

Go语言语法也比较简单和之前学过的C和Java差不多,但在一些细节方面要注意区别。我最常用的是Java,唯一麻烦一点就是指针,在指针这块的应用还是很别扭,之后勤加练习。