走进Go语言基础语法
1.什么是Go语言?
Go语言是谷歌出品的一门通用计算机编程语言。
特点:1.高性能、高并发。 2.语法简单、学习曲线平缓。 3.丰富的标准库。 4.完善的工具链。 5.静态链接。 6.快速编译。 7.跨平台。 8.垃圾回收。
2.配置Go的开发环境
第一步,在go.dev/ 中安装Golang。
第二步,配置集成开发环境VS CODE,左侧添加Go插件。
3.Go的基础语法
3.1Hello word
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
其中,main表示入口文件,fmt属于标准库:包括输入输出字符串,以及格式化字符串。
3.2变量
值得注意的是,Go的字符串属于内置类型,可以直接使用加号拼接,如:g := a + "foc",也能够使用等于号比较两个字符串。
Go中对于变量申明的方式有2种。
(1)var a = " initial" 这种方式可以直接申明变量类型,有需要时也可以自行申明,如 var b,c int = 1,2。
(2)f := float32(e),使用变量名加冒号等于值来申明。
对于常量CONST,在GO中,常量没有确定的类型,会根据使用的上下文来自动确定类型。
3.3if else
Go中的if else 与C++类似,值得注意的是,if后没有括号,如if 7%2 == 0。另外,if语句后必须直接加“{”,如if 7%2 == 0 {。
3.4循环
Go语言中只有for循环,for之后的大括号中若是没有语句,则表示死循环。另外,在循环内可用continue来继续,也可用break来跳出循环。
3.5switch
几点注意:(1)switch后变量名不加括号,如 switch a。(2)与C++不同,Go语言中,switch在运行时,内部不需要加break,只默认运行一个case。(3)可以在switch后不加任何变量,在括号中加条件分支,更易懂。
3.6数组
主要了解数组的创建与读写操作即可,如
var a[5] int
a[4] = 100
fmt.Println(a[4],len(a))
在正式应用代码时,更多使用切片。
3.7切片
切片是指可变长度的数组,可用make来创建,如 S := make ([]string , 3) //3指切片长度,也可直接使用变量创建。另外,切片可以使用append来添加元素,也可执行如copy,打印其中几个元素之类的操作。
3.8map
Golang中,map中的值完全无序。在创建一个map后,使用方括号语法写入KV对,如 m["one"] = 1,同时也支持读取与删除KV对操作。在读取KV对时,可以在变量后加一个OK,来确认是否有这个值,如
r, ok = m ["unknow"]
fmt. Println(r,ok)
3.9range
range编译时对于数组会返回两个值,一是索引,二是对应位置的值,不需要索引时可用下划线忽略。对于map来说则第一个是K,第二个是V。
3.10函数
函数中,变量类型后置,返回多个值。
func add (a int b int) int {
return a+b
}
func exists (m map[string]string , k string) (v string , ok bool) {
v, ok = m[k]
return v, ok
} //返回两个值,一个是返回结果,一个是返回错误信息。
3.11指针
指针的主要用途是对常用参数进行修改。
3.12结构体
结构体是带类型字段的集合,
type user struct {
name string
password string
}
可以用结构体名称来初始化结构体变量,也可以只指定一部分的值,如
func main() {
a := user{name:"wang", password:"1024"}
b := user{"wang","1024"}
c := user{name:"wang"}
没有写入初始化字段的部分,都会初始化为空值。 另外,使用点,名字来读值或者写入结构体中的内容,
var d user
d .name = “wang"
d .password =“1024"
结构体也可以作为函数的参数,作为参数有指针和非指针两种用法,使用指针可以实现对结构体的修改,可以避免某些情况下一些大结构体拷贝的开销。
3.13结构体方法
类似其他语言的类成员函数,更改方法是将USER提前 func (u user) checkPassword( password string) bool {return u.password == password} 结构体中的对应语句是: func checkPassword(u user, password string) bool {return u.password == password}
之后,用户可用a.方式来调用结构体方法 a.resetPassword("2048") fmt.Println(a.checkPassword("2048")) // true 另外,这部分也包含指针与非指针写法。
3.14错误处理
使用一个单独的返回值来传递错误信息,能够很清晰知道哪个函数返回了错误,并且能用简单的IF ELSE 来处理错误。 在函数的返回值类型里加一个ERROR,代表这个函数可能会返回错误,出现错误时,返回两个值,一个是nil,另一个是错误信息。return nil, errors.New("not found")其中,error.new用来创建error。若没有错误,则返回原本的值和一个nil。 需要注意的是,调用函数时,要先判断ERROR是否存在,存在的话要进行一些处理,没有ERROR才能取真正的返回值,否则可能会出现空指针错误。
func main(){ u, error :=
finderUser([]user{{"wang","1024"}},"wang")
if err !=nil {
fmt.Println(err)
return
}
3.15字符串操作
Go语言中可以完成其他语言中具有的对字符串的基本操作。但是其字符串的格式化有需要注意的地方。Go中可以用"%v"来打印任何类型的变量,可以用"%+v"来得到更加详细的结果,"%#v"则更更详细。
fmt.Printf("s=%v\n",s) //s=hello
fmt.Printf("n=%v\n", n) //n=123
fmt.Printf("p=%v\n", p) //p={1 2}
fmt.Printf("p=%+v\n",p) //p={x:1 y:2}
fmt.Printf("p=%#v\n",p) //p=main.point{x:1,y:2}
可以用"%.2f"的形式来打印出一个保留两位小数的浮点数。
fmt.Println(f) //3.1415926
fmt.Printf("%.2f\n",f) // 3.14
3.16JSON处理
保证结构体每个字段的首字母大写及进行了处理。
type userInfo struct {
Name string
Age int "json: "age""
Hobby []string
}
另外Go使用“json.Marshal”来进行数列化,数列化后会得到BUF数组,
fmt.Println(buf) //{123 34 78 97 ...}
fmt.Printin(string(buf)) //{"Name":"wang","age":"18",“Hobby":"Golang","TypeScript")}
加STRING才是字符串,否则会生成编码。 数列化后的字符串,可用“json.Unmarshal”来反数列化到一个空变量中。数列化出来的字符串是大写字母开头,若要输出小写下划线形式,可以在字段后面加一个"json: "age""输出便是小写age。
3.17时间处理
常用“time.Now”,并可用diff := t2,Sub(t)来得到时间段,可以显示多少分钟多少秒。
4.总结
Go的内容相对于其他语言有了不小的精简,但想要精通这门语言,还是需要多下功夫。
标题:走进 Go 语言基础语法 - 掘金