初识go语言|青训营笔记

366 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

今天主要学习了go的基础语言和工程实践。对go的内容做一下总结吧!!!

什么是go语言

1.高性能,高并发
2.语法简单,学习曲线平缓
3.丰富的标准库
4.完善的工具链
5.静态链接
6.快速编译
7.跨平台
8.垃圾回收

go 语言近几年热度不断上升,go语言在性能上很快,类似于c++与java,go语言的创新是goroutines 和通道。Goroutines 是 Go 面向线程的轻量级方法,而通道是 goroutines 之间通信的优先方式。

go语言

go语言的语法与其他语言类似,如果有其他多种语言的基础的话,以下几个简单的例子便可以轻松入门

一、变量

var a = "initial"  字符串
var b, c int = 1, 2  整型
var d = true  布尔型
var e float64  浮点型
f := float32(e)  
g := a + "foo"
const s string = "constant"
const h = 500000000
const i = 3e20 / h

二、语法

 1. if-else    比c++少了条件的括号
     if 判断式 {
         fmt.Println()  
     }else{
         fmt.Println()  
     }
 2. for 循环   依旧是少括号
     for n :=0; n < 5;n++{
         fmt.Println()  
     }
 3. switch     还是少括号
     a := 2
     switch a{
     case 1:
         fmt.Println()
     case 2:
         fmt.Println()
     default:
         fmt.Println()
     }
  4. 数组  类型写在了后面
      var a [5]int
      b := [5]int{1,2,3,4,5}
  5. 切片  和python的切片类似
      s := make([]string, 3)
      s[0] = 'a'
      s[1] = 'b'
      s[2] = 'c'
      s = append(s, "d") [a b c d]
      s = append(s, "e", "f")  [a b c d e f]

      c := make([]string, len(s))
      copy(c, s)   [a b c d e f]

      fmt.Println(s[2:5]) // [c d e]
      fmt.Println(s[:5])  // [a b c d e]
      fmt.Println(s[2:])  // [c d e f]
  6. map    像是python中的字典
      m := make(map[string]int)
      m["one"] = 1
      m["two"] = 2
      fmt.Println(m)           // map[one:1 two:2]
      fmt.Println(len(m))      // 2
      fmt.Println(m["one"])    // 1
  7.range   和python类似
      nums := []int{2, 3, 4}
      sum := 0
      for i, num := range nums {
            sum += num
            if num == 2 {
                    fmt.Println("index:", i, "num:", num) // index: 0 num: 2
            }
      }
      fmt.Println(sum) // 9

      m := map[string]string{"a": "A", "b": "B"}
      for k, v := range m {
	fmt.Println(k, v) // b 8; a A
      }
      for k := range m {
	fmt.Println("key", k) // key a; key b
      }
  8. 函数   
      func add(a int, b int) int {
            return a + b
      }
  9. 指针
      func add2ptr(n *int) {
            *n += 2
      }
  10.结构体
      type user struct {
      name     string
      password string 
      }

三、一些用法

1. 错误处理 err
    go语言的错误处理相较于java的异常,可以准确的定位到具体的函数,使用时只需要在返回值后方加入一个error
2. 字符串操作
    go语言的字符串操作存放于strings库中,相较于其他语言功能大同小异
3. 字符串格式化
    go语言的printf类似于c,但go可以用%v轻松打印出任意类型的变量,%+v打印详细结果,%#v打印详细结果
4. JSON处理
    存放于encoding/json中,可以使用JSON.marshaler去直接序列化一个结构体,变成JSON字符串,也可以使用JSON.unmarshaler去反序列化
5. 时间处理
    存放于time库中 time.now()获取当前时间,time.data()构造时间 .UNIX获取时间戳
6. 数字解析
    字符串和数字类型之间的转换都在strconv下 常用ParseFloat,ParseInt解析字符串 Atoi把10进制字符串转换为数字,itoA把数字转换为字符串。
7. 进程信息
    os库中存放了一些方法,可用来读取相关信息

Go语言的特性缺失问题(自学)

 1.go语言不支持函数重载和操作符的重载,也没有类和类的继承
 2.不支持静态变量
 3.没有主要的框架