Go语言基础语法——学习总结
Go语言的特性
Go语言是一种现代编程语言,它的设计理念使其在性能、高并发、跨平台等方面表现出色。以下是Go语言的一些重要特性:
- 高性能高并发:Go语言自带的并发模型(goroutines)使得高并发编程变得简单且高效,能够充分利用多核CPU的优势。
- 仅有for循环:Go语言的循环结构非常简洁,只有一种for循环形式,极大减轻了语言学习的复杂性。
- 语法简单:Go语言的语法结构清晰,易于理解,尤其适合快速上手。
- 稳定的标准库:Go的标准库非常强大,能够满足大部分开发需求,并在高并发情况下表现稳定。
- 工具链:Go语言提供了强大的工具链,包括构建、测试和格式化等,让开发变得更加高效。
- 静态编译:Go编写的程序会在编译时生成独立的二进制文件,部署过程简便快捷,无需依赖外部环境。
- 跨平台:Go的程序可以在不同操作系统间无缝运行,且内存管理由语言自身处理,减轻了开发者的负担。感觉很类似java,虽说原理不一样。
使用公司:
学习体会
在学习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语言的朋友们提供帮助!学习编程的道路上,每一步都是积累,相信大家都能掌握这一门优秀的语言。