安装 由于篇幅有限, 请参考网络上的教程
代码仓库 gitee 
如何运行 以打印hello world为例
1 2 3 4 5 6 7 8 package  main import  "fmt" func  main ()   {    fmt.Println("Hello, World!" ) } 
 
1 2 3 4 5 #  直接运行 go run main.go #  或者编译后运行 go build main.go ./main.exe 
 
变量定义和数据类型 变量是一个指向内存中某个地址的标识符, 一般用来存放数据. 数据类型就是表示某个变量的类型, 类型决定这个变量在内存中所占的空间大小. 赋值就是将数据(值)存放到变量所指向的地址中, 后续就可以用这个变量来获取该数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 package  mainimport  "fmt" func  main ()   {	 	var  age int  = 25  	fmt.Println("Age:" , age) 	 	var  height float64  = 1.75  	fmt.Println("Height:" , height) 	 	var  name string  	name = "Alice"  	fmt.Println("Name:" , name) 	 	isStudent := true   	fmt.Println("Is student:" , isStudent) } 
 
流程控制 流程控制就是定义我们程序的执行顺序
顺序 顺序执行就从上到下依次执行, 这个是我们程序的正常执行流程
1 2 3 4 5 6 7 8 9 package  mainimport  "fmt" func  main ()   {    fmt.Println("Step 1" )     fmt.Println("Step 2" )     fmt.Println("Step 3" ) } 
 
选择 选择就是根据满足不同的条件来执行不同的代码 选择的流程分为单分支和多分支
单分支 单分支指的是只有一个分支节点, 只有一次条件判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package  mainimport  "fmt" func  main ()   {    var  score int  = 85      if  score >= 60  {         fmt.Println("Pass" )     } else  {         fmt.Println("Fail" )     } } 
 
多分支 多分支则是有多个分支节点, 多个条件判断
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package  mainimport  "fmt" func  main ()   {    var  score int  = 85      if  score >= 90  {         fmt.Println("A" )     } else  if  score >= 80  {         fmt.Println("B" )     } else  if  score >= 70  {         fmt.Println("C" )     } else  {         fmt.Println("D" )     } } 
 
循环 循环表示一个重复执行的过程
1 2 3 4 5 6 7 8 9 10 11 package  mainimport  "fmt" func  main ()   {         for  i := 1 ; i <= 5 ; i++ {         fmt.Println(i)     } } 
 
函数 函数的本质是一个闭包, 有自己的作用域 我们可以用函数定义一段代码, 接收0或多个输入, 执行函数体内的代码, 在结束时返回0或多个输出 使用函数可以提取公共逻辑, 简化我们的代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 package  mainimport  "fmt" func  add (a int , b int )   int  {    return  a + b } func  main ()   {    result := add(5 , 3 )     fmt.Println("Result:" , result)  } 
 
类/结构体 类/结构体 类是一个包含了数据和方法(函数)的抽象结构, 我们可以定义它, 要使用类, 需要将类实例化, 其实就是在内存中开辟指定大小的空间来保存它 类的大小取决于内部定义什么数据(比如int), 编译器会自动根据数据大小来决定分配多少空间 一个类可以有多个实例化对象, 也就是有多个不同变量, 但是这些变量都和这个类的结构一致
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 package  mainimport  "fmt" type  Person struct  {    Name string      Age  int  } func  (p Person)   SayHello() {    fmt.Printf("Hello, my name is %s and I am %d years old.\n" , p.Name, p.Age) } func  main ()   {         person := Person{Name: "Alice" , Age: 25 }               person.SayHello()       } 
 
接口 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 package  mainimport  "fmt" type  Animal interface  {    Speak() string   } type  Dog struct  {    Name string  } func  (d Dog)   Speak() string  {    return  "Woof! My name is "  + d.Name } type  Cat struct  {    Name string  } func  (c Cat)   Speak() string  {    return  "Meow! My name is "  + c.Name } func  main ()   {         var  a Animal          dog := Dog{Name: "Buddy" }     a = dog      fmt.Println(a.Speak())           cat := Cat{Name: "Whiskers" }     a = cat      fmt.Println(a.Speak())           animals := []Animal{dog, cat}     for  _, animal := range  animals {         fmt.Println(animal.Speak())     } } 
 
框架 为了简化开发, 程序员会提取公共逻辑, 封装成函数, 或者封装成类和方法, 简化开发, 在这个不断简化的过程中就诞生了框架 不过以我的理解, 库(library)是提取公共方法和类的工具集合, 用户可以以自己的喜好添加很多不同的库来使用; 而框架(framework) 更像是定义了一套项目规范和模板,然后用户在框架的基础上遵守框架约定的标准或结构进行开发; 不过很多时候这个界限不是很清晰, 两个词经常混用
web 我们目前写的程序都是在本地运行的, 为了让世界各地的用户也能使用, 就需要开放到网络, 而web框架, 就是封装了语言本身提供的网络库, 然后提供了开放网络服务的各种方法 go语言常用的web框架为gin
1 go get "github.com/gin-gonic/gin" 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 package  mainimport  (    "github.com/gin-gonic/gin"  ) func  main ()   {         r := gin.Default()          r.GET("/hello" , func (c *gin.Context)   {         c.JSON(200 , gin.H{             "message" : "Hello from Gin!" ,         })     })          r.Run(":8080" ) } 
 
访问localhost:8080/hello查看
db 我们目前都是使用变量来存储数据, 但是变量的数据是放在内存中的, 一旦程序停止, 内存中的数据就会被回收, 下一次启动程序, 操作系统分配的也可能是另一个内存空间, 所以我们需要持久化存储我们的数据, 这就需要用到数据库系统
go语言常用的数据库框架为gorm
1 go get "gorm.io/driver/sqlite" "gorm.io/gorm" "github.com/glebarez/sqlite" 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 package  mainimport  (	"github.com/glebarez/sqlite"  	 	 	 	"gorm.io/gorm"  ) type  User struct  {	gorm.Model 	Name  string  	Email string  `gorm:"unique"`  } func  main ()   {	 	db, err := gorm.Open(sqlite.Open("./dev.db" ), &gorm.Config{}) 	if  err != nil  { 		panic ("failed to connect database" ) 	} 	 	db.AutoMigrate(&User{}) 	 	db.Create(&User{Name: "Alice" , Email: "alice@example.com" }) 	 	var  user User 	db.Where("name = ?" , "Alice" ).First(&user) 	println ("Found user:" , user.Name) 	 	db.Model(&user).Update("Name" , "Bob" ) 	 	db.Delete(&user) } 
 
扩展 ○ 多线程/微服务/反射-动态代理/文件操作/网络编程/ ○ 框架的原理/手写 ○ wasm/grpc
社群 你可以在这些平台联系我: