Go语言入门 | 豆包MarsCode AI刷题

45 阅读5分钟

本篇文章为go语言基础语法与常用特性解析的青训营笔记

一,下载与安装go

  1. 选择中文网的包安装,Windows用户下载的是msi安装包。

  2. GOROOT:自定义安装目录,例如我的是:C:\Program Files\Go,这个目录是我安装Go语言的目录。

  3. GOPATH:准备一个工作区域,以后写代码用,例如我的是:D:\go

    • 在这个工作目录中,新建三个目录:binpkgsrc
  4. 环境变量配置:

    • 在Windows中的系统变量中分别添加GOROOTGOPATH
  5. 测试:

    • 打开命令控制工具 输入go version

22926fb2967366ca16ee8fa3dc7c4f63.png

解释:

在进行Go语言开发的时候,我们的代码总是会保存在$GOPATH/src目录下(也就是我们指定的工作目录)。在工程经过go buildgo installgo get等指令后,会将下载的第三方包源代码文件放在$GOPATH/src目录下,产生的二进制可执行文件放在 $GOPATH/bin目录下,生成的中间缓存文件会被保存在 $GOPATH/pkg 下

87e78039c4841203c8179eaa7334efbe.png

二,使用与常用基础语法

1.go mod init test01 初始化模块名为test01

2.go mod tidy 添加缺失模块与删除多余模块

3.go run . 编译并运行当前go文件

For example

hello world.

    package main    --包名
    
    import "fmt"    --模块名
    
    func main() {
    
        fmt.Printf("hello world!")   //打印出hello world!
        
     } 
     //go run [path] 直接运行程序 
     //go build [path] 将程序编译成二进制,会变成一个exe文件,通过.[path]执行该程序 

类型

package main

func main() {
   // 变量声明的方式,以整型为例子
   var intNum1 int = 0
   var intNum2, intNum3 int = 1, 2
   var intNum4 = 3
   // 类型自动推断
   intNum5 := 5

   println(intNum1)
   println(intNum2, intNum3)
   println(intNum4)
   println(intNum5)

   // 常量
   const PI float32 = 3.1415926
   println(PI)

   // 布尔
   flag := false
   println(flag)

   // 浮点型64
   var float64Num float64
   println(float64Num)

   // 浮点型32
   float32Num := float32(float64Num)
   println(float32Num)

   // 字符串
   str := "123"
   str += "654"
   println(str)
}

/**

Go是一门强类型的语言
*/

if -- else

package main

func main() {
   // if - else
   if 7%2 == 0 {
      // 偶数
      println("7 is even")
   } else {
      // 奇数
      println("7 is odd")
   }

   // if - else if - else
   // num给其一个初始条件 9
   if num := 9; num < 0 { // 如果 num < 0
      println(num, "is negative") // 输出它是一个负数
   } else if num == 0 {
      println(num, "is zero") // 输出它是一个0
   } else {
      println(num, "is positive") // 输出它是一个正数
   }
}

循环

package main

func main() {
   // 死循环=while(true)
   for {
      println(1)
      break
   }

   // 打印0-9
   for i := 0; i < 10; i++ {
      println(i)
   }
}

/**
go没有while,没有do while,只有for循环
*/

switch

package main

import "time"

func main() {
   a := 2
   switch a {
   case 1:
      println("one")
   case 2:
      println("two")
   default:
      println("不知道")
   }

   t := time.Now()
   println(t)
   // 特殊用法,可以取代if - else
   switch {
   case t.Hour() < 12:
      println("早于中午")
   default:
      println("晚于中午")
   }
}

/**
switch自带一个break
*/

slice (go 特有的)

package main

import "fmt"

func main() {
   // 用make创建切片,需要指定初始长度
   s := make([]string , 3)
   s[0] = "a"
   s[1] = "b"
   s[2] = "c"
   fmt.Println("the s[1] is :",s[1])
   // 新增,需要用一个切片变量接收,容量不够会扩容,返回一个新的slice
   sNew := append(s,"d")
   fmt.Println("the length of sNew is :",len(sNew))
   // copy
   a := make([]string, len(sNew))
   copy(a, sNew)
   fmt.Println(a)

   // 切片操作
   fmt.Println(sNew[:])
   fmt.Println(sNew)
   fmt.Println(sNew[0:4])

   // 简易定义
   good := []string{"g", "o", "o", "d"}
      
   fmt.Println(good)
   good = append(good, "!")
   fmt.Println(good)
   // 区别数组:   b := [5]int{1, 2, 3, 4, 5},是需要指定长度的
}

/**
切片是一个可变长数组,不用指定其长度。[]类型
*/

map

package main

import "fmt"

func main() {
   // key string, value int
   m := make(map[string]int)
   m["one"] = 1
   m["two"] = 2
   fmt.Println(m)
   fmt.Println(len(m))     //2
   fmt.Println(m["one"])   //1
   fmt.Println(m["two"])   //2
   fmt.Println(m["three"]) //0

   // ok 获取map中是否有这个key存在
   r, ok := m["three"]
   //fmt.Println(r)
   //fmt.Println(ok)
   fmt.Println(r, ok)

   // 删除key为one
   delete (m,"one")

   // 简易定义
   good :=map[string]int{"one":1,"two":2,"three":3}
	for g,v := range good{
		fmt.Println(g,v)
	}
   // 遍历map,同理可以遍历数组
//    for key, value := range m {
//       println(key, value) // key,value
//    }
}

/**
map 是无序的
*/

func

package main

func main() {
	c :=map[string]int{"one":1,"two":2}
   println(add(1, 2))
   println(exists(c, "two"))
}

// 函数名add,参数a,b均为int,返回值为int
func add(a int, b int) int {
	return a + b
}
// 支持多值返回
func exists(m map[string]int,key string) (int,bool) {
	val ,ok := m[key]
	return val,ok
}

exception

package main

import (
   "errors"
   "fmt"
)

func main() {
   fmt.Println(isequals("hello","hello"))
   value,err := isequals("hello","world")
   if err != nil {
	   fmt.Println(err)
   }else {
	fmt.Println("isequals:",value)
   }

}
func isequals(name ,input string) (bool,error) {
	if name == input {
		return true ,nil
	}else {
		return false ,errors.New("not equals")
	}
}


json处理

package main

import (
   "encoding/json"
   "fmt"
)

func main() {
   user := User{Name: "Mengcheng", Age: 20}
   fmt.Println(user) //{Mengcheng 20}
   // 转json
   res, err := json.Marshal(user)
   fmt.Println(res)         //
   fmt.Println(string(res)) //
   fmt.Println(err)
   // 反序列化
   user2 := User{}
   json.Unmarshal(res, &user2)// 传指针 传引用 传地址
   fmt.Println(user2) //{Mengcheng 20}

}

// 1 要求结构体的变量首字母为大写
type User struct {
   Name string `json:"name"` // 当转json时指定key的名称
   Age  int    `json:"age"`
}

总结

文章的详细总结:

一、Go的安装与配置

  • 下载与安装:Windows用户下载msi安装包进行安装。
  • GOROOT:自定义安装目录,如C:\Program Files\Go
  • GOPATH:工作区域,如D:\go,包含binpkgsrc三个目录。
  • 环境变量配置:在Windows系统中添加GOROOTGOPATH变量。
  • 测试:通过命令go version验证安装是否成功。

二、Go的使用与常用基础语法

  • 模块初始化:使用go mod init [module-name]初始化模块。
  • 模块整理:使用go mod tidy添加缺失模块和删除多余模块。
  • 运行Go文件:使用go run .编译并运行当前目录下的Go文件。

基础语法

  • Hello World:展示了如何编写和运行一个简单的Go程序。
  • 类型:介绍了变量声明、类型自动推断、常量、布尔值、浮点型和字符串。
  • 条件语句:展示了ifif-else语句的使用。
  • 循环:介绍了for循环的使用,Go语言中没有whiledo-while循环。
  • Switch语句:展示了switch语句的使用,它自带break
  • Slice(切片) :介绍了切片的创建、追加、复制和操作。
  • Map:介绍了Map的创建、访问、删除和遍历。
  • 函数:展示了如何定义和使用函数,包括多值返回。
  • 异常处理:介绍了如何使用errors包进行错误处理。
  • JSON处理:介绍了如何使用encoding/json包进行JSON的序列化和反序列化。

结尾

这篇青训营笔记为初学者提供了Go语言的基础知识和一些实用的编程技巧。通过学习这些内容,读者可以掌握Go语言的基本语法和一些高级特性,为进一步深入学习Go语言打下坚实的基础。希望这篇教程能够帮助你快速上手Go语言,并在实际项目中应用这些知识。