青训营学习day2go基础语法 | 豆包MarsCode AI刷题

86 阅读5分钟

Go语言基础语法——学习总结

Go语言的特性

Go语言是一种现代编程语言,它的设计理念使其在性能、高并发、跨平台等方面表现出色。以下是Go语言的一些重要特性:

  1. 高性能高并发:Go语言自带的并发模型(goroutines)使得高并发编程变得简单且高效,能够充分利用多核CPU的优势。
  2. 仅有for循环:Go语言的循环结构非常简洁,只有一种for循环形式,极大减轻了语言学习的复杂性。
  3. 语法简单:Go语言的语法结构清晰,易于理解,尤其适合快速上手。
  4. 稳定的标准库:Go的标准库非常强大,能够满足大部分开发需求,并在高并发情况下表现稳定。
  5. 工具链:Go语言提供了强大的工具链,包括构建、测试和格式化等,让开发变得更加高效。
  6. 静态编译:Go编写的程序会在编译时生成独立的二进制文件,部署过程简便快捷,无需依赖外部环境。
  7. 跨平台:Go的程序可以在不同操作系统间无缝运行,且内存管理由语言自身处理,减轻了开发者的负担。感觉很类似java,虽说原理不一样。

使用公司:

image.png

学习体会

在学习Go语言的过程中,我有一些深刻的体会。Go语言的简洁性和功能性让我想起了C++和Java的结合体。对于已经掌握了多种编程语言的程序员来说,学习Go相对轻松,特别是对Java和C++有一定了解的前提下。

以下是各个板块的代码的简介:

代码解析

以下是一些Go语言的基础语法和常用功能的简介:

package main
import (
    "fmt"//功能:输入输出字符串
)
//函数 都是后置的函数类型,而且可以返回多个类型的值
func gcd(int a,int b) int{
    return b==0?a:gcd(b,a%b)
}
func exist(m map[string]string, k string) (v string,ok bool){
    v,ok=m[k]
    return v,ok
}
func add2ptr(n *int){
    *n+=2
}
func main(){
	//声明变量
    var a int =0
    var s="hello"
    var b=true 
    var e float64
    f:=float32(e)
    g:=s+"world"
	//ifelse和for
    if a==0{
        fmt.Println("a is zero")
    }else{
        fmt.Println("a is not zero")
    }
    for i:=0;i<5;i++{
        fmt.Println(i)
    }
	//switch自动break
    switch a {
    case 1:
        fmt.Println("a=1")
    case 2:
        fmt.Println("a=2")
    case 3:
        fmt.Println("a=3")
    default:
        fmt.Println("a=0")
    }
	//不需要写,直接写分支,相对ifelse更清晰
    switch {
        case a>0:
            fmt.Println("a is positive")
        default:
            fmt.Println("a is zero or negative")
    }
	//数组
    var arr [5]int 
    count := 5
    for i := 0; i < count; i++ {
        arr[i]=i
    }
    for i:= 0; i<count; i++ {
        fmt.Println(arr[i])
    }
	//切片:任意可变长度的数组
    str:=make([]string,3)
    str[0]="a"
    str[1]="b"
    str[2]="c"
    fmt.Println(str)
    str=append(str,"d")
    str=append(str,"e","f")
    fmt.Println(str)
    //copy
    c:=make([]string,len(str))
    copy(c,str)
    fmt.Println(ctr[2:4])//py切片操作
    //map 完全无序
    m := make(map[string]int)//map[keyType]valueType{}
    m["one"] = 1
    m["two"] = 2
    fmt.Println(m)
    fmt.Println(len(m))
    fmt.Println(m["unknown"])
    r,ok := m["unknown"]//r:value,ok:true or false
    fmt.Println(r,ok)
    if ok{
        fmt.Println("key is exist")
    }else{
        fmt.Println("key is not exist")
    }
    delete(m,"one")
    fmt.Println(m)
	//range循环
    num:=[]int{1,2,3,4,5}
    sum:=0
    for i,n:=range num {
        sum+=n
        fmt.Println(i,n)
    }
    fmt.Println("sum:",sum)
    m1:=map[string]string{"a":"apple","b":"banana","c":"cat"}
    for k,v:=range m1{
        fmt.Println(k,v)
    }
    //指针
    n:=10
    add2ptr(&n)
    fmt.Println(n)

    fmt.Println(g)//go run 相对路径运行 -- 终端运行
}

Go语言中变量声明非常灵活,支持多种方式,了解函数和控制结构(如if、switch、for等)是学习的基础。切片和数组的使用则让数据操作变得灵活便捷。在数据结构方面,Go的map字典提供了高效的查找机制,尤其适合需要频繁查询的场景。

通过示例代码,可以看到切片的动态扩展以及map的使用。

错误处理

package main
import (
 "fmt"
 "errors"
)
type user struct{
 name string
 password string
}
// 查找用户函数,返回用户指针和错误
func findUser(users []user,name string) (v *user,err error){
 for _,u:=range users{
  if u.name==name{
   return &u,nil
  }
 }
 return nil,errors.New("user not found")
 //nil表示没有错误,errors.New("user not found")表示有错误
}
func main(){
 // 查找用户并处理结果
  u,err :=findUser([]user{{"wang","1024"}}, "wang")
  if err!=nil{
   fmt.Println(err)
   return
  }
  fmt.Println(u.name)//wang
  // 尝试查找不存在的用户并处理错误
  if u,err :=findUser([]user{{"wang","1024"}}, "li");err!=nil{
   fmt.Println(err)
   return 
  } else {
   fmt.Println(u.name)
  }
}

Go语言采用一套不同于传统异常处理的错误处理机制。它通过返回错误值的方式来进行错误检测,使得代码逻辑更加清晰明确。这种方式虽然需要手动处理错误,但增强了代码的可读性和可维护性。不同于Java的

字符串处理

package main
import (
 "fmt"
 "errors"
 "strings"
)
func main(){
//字符串操作
    a:= "hello"
    fmt.Println(strings.Contains(a,"l")) //是否包含
    fmt.Println(strings.Count(a,"l")) //出现次数
    fmt.Println(strings.HasPrefix(a,"he")) //是否以某个字符串开头
    fmt.Println(strings.HasSuffix(a,"lo")) //是否以某个字符串结尾
    fmt.Println(strings.Index(a,"ll")) //出现位置
    fmt.Println(strings.Repeat(a,2)) //重复
    fmt.Println(strings.ReplaceAll(a,"l","*")) //全部替换
    fmt.Println(strings.Split(a,"l")) //分割
    fmt.Println(strings.EqualFold(a,"HELLO")) //忽略大小写比较
    fmt.Println(strings.ToLower(a)) //小写
    fmt.Println(strings.ToUpper(a)) //大写
    fmt.Println(strings.Title(a)) //首字母大写
    fmt.Println(strings.TrimSpace(a)) //去除空
    b:="你好"
    fmt.Println(len(b))//一个中文对应多个字符

    err:=errors.New("error")
    if err!=nil{
        fmt.Println(err.Error())
    }
}

Go语言的字符串处理功能丰富,通过标准库中的strings包,可以完成一系列常见的字符串操作。无论是查找、替换还是分割,都可以方便地实现。

总结

总体来说,Go语言的设计理念和特性使其成为一种优秀的编程语言,适合各种规模的项目开发。通过这段时间的学习,我对Go语言有了更深的认识,其简洁性和强大功能为我的编码带来了新的视角。

希望这篇Go语言基础语法笔记的总结能为正在学习Go语言的朋友们提供帮助!学习编程的道路上,每一步都是积累,相信大家都能掌握这一门优秀的语言。