《學習 Go 語言》學習心得
阿新 • • 發佈:2018-12-22
一、前言
近來的團隊的省立大創專案 電子病歷,屬於AI+大資料+區塊鏈
,而終極階段是要引入區塊鏈技術的,而目前區塊鏈方面的首選語言是 Golang,因其天生自帶併發處理功能,於是乎花了一兩天看完了一本網上很火的入門書《學習 Go 語言》,讀完感覺還可以
參考文獻:
1、《學習 Go 語言》
2、Go 語言中文網
對於Goland,會發現有很多和 C 語言
相似的地方,畢竟其開發組一個核心人物 肯·湯普森
,是 C 語言的核心重要開發者之一。
二、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(time.Now(),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服務端 方面的
Go 併發:
Do not communicate by sharing memory; instead, share memory by communicating.
“不要以共享記憶體的方式來通訊,相反,要通過通訊來共享記憶體。”