《学习 Go 语言》学习心得

时间:2022-07-03 16:22:11

一、前言

近来的团队的省立大创项目 电子病历,属于AI+大数据+区块链,而终极阶段是要引入区块链技术的,而目前区块链方面的首选语言是 Golang,因其天生自带并发处理功能,于是乎花了一两天看完了一本网上很火的入门书《学习 Go 语言》,读完感觉还可以

参考文献:
1、《学习 Go 语言》
2、Go 语言中文网

二、demo

前人云:不动笔墨不读书
作为程序员:“不敲代码不读书”

1、变量常量

package main

import "fmt"

func main() {

    // 1.先声明,再赋值
    var a int
    a = 1
    fmt.Println(a) // 1

    // 2.声明 + 赋值
    b := 2
    var score int = 148
    fmt.Println(b, score) // 2 148

    // 3.同时声明多个变量
    var (
        x int
        y int
    )
    x = 192
    y = 168
    fmt.Println(x, y) // 192 168

    // 4.声明 + 位数:8/16/32/64(默认根据本机硬件)
    var num int32
    fmt.Println(num) // 0

    // 5.bool
    var status bool
    status = true
    fmt.Println(status) // true

    // 6.string
    var s string
    s = "ITAEM"
    fmt.Println(s) // ITAEM

    // 7.const,常量,不可变值
    const max int = 5
    fmt.Println(max) // 5

    // 8.声明赋值多个常量
    const (
        userName = "root"
        password = "123"
    )
    fmt.Println(userName, password) // root 123

    // 9、Printf
    var mimu int = 6
    var word string = "骁龙835"
    fmt.Printf("小米%d 处理器:%s", mimu, word) // 小米6 处理器:骁龙835

}

/** 注意点: ① 声明变量,但未使用,程序会报错 ② 不同位数的变量运算将报错 ③ 常量不可变值 */

2、流程控制

package main

import "fmt"

func main() {

    // 1 if-else 条件判断
    var flag bool = true
    if flag {
        fmt.Println("ok")
    } else {
        fmt.Println("fail")
    }

    // 2 for 循环
    var total int = 0
    for i := 1; i <= 100; i++ {
        total += i
    }
    fmt.Println(total)

    // 3 break
    for i := 1; i < 10; i++ {
        if i == 5 {
            break
        }
        fmt.Print(i)
    }
    fmt.Println()

    // 4 continue
    for i := 1; i < 10; i++ {
        if i%2 == 0 {
            continue
        }
        fmt.Print(i)
    }
    fmt.Println()

    // 5 range
    list := [] string{"I", "T","A","E","M"}
    for k,v:= range list {
        fmt.Println(k,v)
    }

    // 6 switch
    choice := 2
    switch choice {
    case 1:
        fmt.Println(1)
    case 2:
        fmt.Println(2)
    case 3:
        fmt.Println(3)
    default:
        fmt.Println("others")
    }

    // 7 输入
    var input int
    fmt.Scanln(&input)
    fmt.Println(input)

    // 8 延时加载:类似栈
    for i:=0;i<5;i++ {
        defer fmt.Print(i) // 4 3 2 1 0
    }

}

3、数组

package main

import "fmt"

func main() {

    // 1.一维 array
    var arr [100] int
    arr[0]=520
    fmt.Println(arr[0])

    // 2.二维 array
    arr2 := [3][2] int { [2]int{1,2},[2]int{3,4},[2]int{5,6}}
    fmt.Println(arr2[0][0])

    // 3.1 array CRUD
    s0 := []int{0,1}
    // 3.2 增
    s1 :=append(s0,2)
    fmt.Println(len(s1))
    // 3.3 取 array
    s2 :=s0[0:2]
    fmt.Println(len(s2)) // 0,1

    // 4.1 map CRUD
    team := map[string]string{
        "ITAEM":"04008",
        "wTeam":"04009",  // 逗号必须的
    }
    // 4.2 显
    fmt.Println(team["ITAEM"])
    // 4.3 删
    delete(team,"ITAEM")
    // 4.4 查
    var room string
    var exist bool
    room,exist=team["ITAEM"]
    fmt.Println(room,exist)
    // 4.5 增、改
    team["ITAEM"]="钟海楼04008"
    fmt.Println(team["ITAEM"])

}

4、函数

package main

import (
    "fmt"
)

func main() {

    var a=5
    show(a)

    add(&a)
    show(a)

    fmt.Println(getTeamName())
    fmt.Println(getTeam())

    fmt.Println(getSum(1,2,3,4,5))

}

func show(a int)  {   // 打印输出
    fmt.Println(a)
}

func add(a *int)  {  // 传引用,修改值
    *a=*a+1
}

func getTeamName() string {  // 单返回值
    return "ITAEM"
}

func getTeam()(string,string)  {  // 多返回值
    return "ITAEM","04008"
}

func getSum(arg ...int) int  {  // 变参
    var total =0
    for i := 0; i<len(arg);i++  {
        total +=arg[i]
    }
    return total
}

5、包

《学习 Go 语言》学习心得

package cun

import "fmt"

func Show()  {  // 大写字母开头,可以导出
    fmt.Println(666)  // 666
}
package main

import "awesomeProject/cun"

func main() {
    cun.Show()
}

6、指针

package main

import "fmt"

func main() {
    var p *int
    fmt.Println(p) // <nil>

    var a int
    p = &a
    fmt.Println(p) // 0xc04204e088

    fmt.Println(*p) // 0

    *p=666
    fmt.Println(a) // 666,成功修改了 a
    fmt.Println(*p) // 666

}

7、结构体

package main

import "fmt"

// 1.1 struct
type Student struct {
    name string
    age int
}

func main() {

    // 1.2 struct
    a := new(Student)
    a.age=18
    a.name="rxy"
    fmt.Println(a)  // &{rxy 18}

}

8、接口

package main

import (
    "fmt"
)
// 1.接口
type Phone interface {
    call()
}

// 2.类型
type NokiaPhone struct {
}
type IPhone struct {
}

// 3.实现
func (nokiaPhone NokiaPhone) call() {
    fmt.Println("I am Nokia, I can call you!")
}
func (iPhone IPhone) call() {
    fmt.Println("I am iPhone, I can call you!")
}

func main() {
    var phone Phone

    phone = new(NokiaPhone)
    phone.call()

    phone = new(IPhone)
    phone.call()

}

9、并发

package main

import (
    "time"
    "fmt"
)

func ready(w string,sec  int) {
    time.Sleep(time.Duration(sec)*time.Second)
    fmt.Println(w,"is ready!")
}
func main() {
    go ready("Tea",2)
    go ready("Coffee",1)
    fmt.Println("I am waiting...")
    time.Sleep(5*time.Second) // 没有这一句,程序立刻结束,将看不到预期的效果
}

10、通讯

package main

import (
    "net"
    "fmt"
    "net/http"
    "io/ioutil"
)

func main() {

    // 1 net:tcp、udp
    conn1,e :=net.Dial("tcp","120.79.197.130:8080")
    fmt.Println(conn1)
    fmt.Println(e )

    // 2 http
    r,err := http.Get("https://blog.csdn.net/larger5")
    fmt.Println(ioutil.ReadAll(r.Body))
    fmt.Println(err)

}

三、其他

有空再更新 web服务端 方面的