一、前言
近来的团队的省立大创项目 电子病历,属于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、包
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服务端 方面的