Go工程師體系課 001【學習筆記】

轉型

  1. 想在短時間內系統轉到 Go 工程的理由
  2. 提高 CRUD,無自研框架經驗
  3. 提升技術深度,專精於需求的同學
  4. 進階工程化,擁有良好開發規範和管理能力的

工程化的重要性

高階開發的期望

  1. 良好的程式碼規範
  2. 深入底層原理
  3. 熟悉架構
  4. 熟悉 k8s 的基礎架構

擴展知識廣度,知識的深度,規範的開發體系

四個主要階段

  1. Go 語言基礎
  2. 微服務開發(電商專案實戰)
  3. 自研微服務
  4. 自研然後重構

領域

  1. Web 開發 - gin、beego 等
  2. 容器虛擬化 - docker、k8s、istio
  3. 中介軟體 - etcd、tidb、influxdb、nsq 等
  4. 區塊鏈 以太坊、fabric
  5. 1xAR5 - go-zero, dapr, rpcx, kratos. dubbo-go,

相關環境的開發

  1. Go 安裝 官網
  2. goland、vscdoe
# go build hello.go
# ./hello
go run hello.go

golang新版本中同一個套件下有多個 main 執行時,執行工具中選擇執行類型file,Go 中不推薦一個目錄中有兩個 main 檔案,如果需要有多個 main 放到不同的資料夾中

變數

package main

import "fmt"

// 全局變量 定義可以不使用
var name = "bobby"
var age = 19
var ok bool

func main() {
 // go是靜態語言 靜態語言和動態語言相比變量差異很大
 // 1. 變更定義 先定義後使用 類型聲明瞭不能改變
 // 定義變量
 var name string = "hello world"
 age := 1
 // go 語言中變量定義的不使用是不行的,強制性的
 fmt.Println(name, age)

 // 多變量定義
 var user1, user2, user3 = "booby1", "bobby2", 22
 fmt.Println(user1, user2, user3)

 // 注意變量先定義才能使用
 // 是靜態語言類型和賦值要一致
 // 要求和規範性會更好
 // 變量名不能衝突 同一個代碼塊中不能同名的
 // 簡潔定義 名:=值 不能用於全局定義
 // 變量是有0值的

}

變數

package main

import "fmt"

func main() {
 // 常量 定義的時候就要指定值,不能修改
 const PI float32 = 3.14159265358979323846 // 顯式定義
 const PI2 = 3.14159265358979323846        // 常量 大寫多單詞 用下划線
 const (
  UNKNOW = 1
  FEMALE = 2
  MALE   = 3
 )
 //沒有設置類型和值它會沿用前面的值
 const (
  x int = 16
  y
  s = "abc"
  z
 )
 fmt.Println(x, y, z)
 /**
 常量類型只要以是bool 數值(整數、浮點)
 不曾使用的常量,沒有強制使用的
 顯示指定類型的時候,必須確保左右類型一致
 */
}

iota

特殊常數

package main

import "fmt"

func main() {
 // 匿名變量 定義一個變更不使用它
 var _ int // 接收返回值進,點位符只接收哪個值
 // iota 特殊常量,可以認為是一種可以被編譯器修改的常量
 const (
  ERR1 = iota + 1
  ERR2
  ERR25 = "ha" // iota內部仍然增加計數
  ERR3
  ERR4 = iota
 )
 const (
  ERRORNEW1 = iota // 從0開始計數
 )
 /*
   如果中斷了iota那麼要顯示的恢復,後續會自動遞增 自增類型默認是int類型的
   iota能簡化const類型的定義
 */
 fmt.Println(ERR1, ERR2, ERR3, ERR4)
}

變數的作用域

個人感覺要注意程式碼區塊的範圍還有就是變數名稱:=值這種方式的宣告

Go 的基本資料型別

  • 基本資料型別
  • bool true false
  • 數值型別
    • 整數 int8~64 uint8~64 (無符號數)
    • 浮點數 float32 float64
    • 複數
    • byte 位元組 uint8
    • rune 型別 int32
  • 字元和 string
package main

import "fmt"

func main() {
 var a int8
 var b int16
 var c int32
 var d int64

 var ua uint8
 var ub uint16
 var uc uint32

 var ch3 byte
 c = 'a'         // 字符類型
 var int_32 rune // 也是字符

 int_32 = '中' // 即有中文也有英文
 fmt.Println(int_32)

 fmt.Print("c=%c", ch3)

 var str string
 str = "i am bobby"
 fmt.Println(str)


} 

各種型別之間的轉換

 var str string
 str = "i am bobby"
 fmt.Println(str)
 // 字符串轉數字
 var istr = "12"
 myint, err := strconv.Atoi(istr)
 if err != nil {
  fmt.Println("convert error")
 }
 fmt.Println(myint)

 var myi = 32
 mstr := strconv.Itoa(myi)
 fmt.Println(mstr)

 // 字符串轉float32 轉換bool
 mFloat, error := strconv.ParseFloat("3.1415", 64)
 if error != nil {
  fmt.Println("convert error")
 }
 fmt.Println(mFloat)
 parseBol, err := strconv.ParseBool("true")
 if err != nil {
  fmt.Println("convert error")
 }
 fmt.Println(parseBol)
 // 基本類型轉字符串
 boolStr := strconv.FormatBool(true)
 fmt.Println(boolStr)

 floatStr := strconv.FormatFloat(3.1415, 'E', -1, 64)
 fmt.Println(floatStr)

主題測試文章,只做測試使用。發佈者:Walker,轉轉請注明出處:https://walker-learn.xyz/archives/4768

(0)
Walker的頭像Walker
上一篇 2025年11月25日 01:00
下一篇 2025年11月24日 02:00

相關推薦

簡體中文 繁體中文 English
歡迎🌹 Coding never stops, keep learning! 💡💻 光臨🌹