1. 程式人生 > >《學習 Go 語言》學習心得

《學習 Go 語言》學習心得

一、前言

近來的團隊的省立大創專案 電子病歷,屬於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.
“不要以共享記憶體的方式來通訊,相反,要通過通訊來共享記憶體。”