go语言简介
什么是go
- 高性能,高并发,性能媲美c和c++,可使用标准库开发高性能的应用程序
- 语法简单,相当于c语言的简化版,学习周期短
- 丰富的标准库
- 完善工具链
- 静态链接,在go语言中所有编译结果默认都是静态链接,只需拷贝编译后的可执行文件,不需要其他附属文件,占用空间小,部署方便快捷
- 跨平台
- 垃圾回收
开发环境配置
- 安装Golang
官网下载:go.dev/dl/
如果打不开,可以用golang在中国的镜像:studygolang.com/dl
如果下载速度慢,可以配置代理:goproxy.cn/ - 选项编辑器或集成开发环境
推荐下载VsCode,官网下载,下载完成后,在左侧扩展区安装go插件即可
云开发环境:gitpod.io/#github.com…
第一个go程序-hello world
package main //说明该文件属于main包
import{
"fmt" //导入fmt包,用于输入输出
}
func main(){
fmt.Println("hello,world")
}
//使用go run 直接运行
//使用go build 编译成可执行文件
基础语法(自行观察代码,动手尝试)
- 变量声明
var a=""hi"
var b,c,int=1,2
var d float64
f:=float32(d)
2.if else :
if 7%2==0 {
...
}else {
...
}
- 循环
for{
}//死循环
for i:=0;i<=10;i++ {
}
- switch
a :=2
switch a{
case 1:
case 2:
default:
}//go中不需要break
- 数组
var a [5]int
a[4] = 100
fmt.Println("get:", a[2])
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5}
fmt.Println(b)
var twoD [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println("2d: ", twoD)
- 切片
s := make([]string, 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
fmt.Println("get:", s[2]) // c
fmt.Println("len:", len(s)) // 3
s = append(s, "d")
s = append(s, "e", "f")
fmt.Println(s) // [a b c d e f]
c := make([]string, len(s))
copy(c, s)
fmt.Println(c) // [a b c d e f]
fmt.Println(s[2:5]) // [c d e]
fmt.Println(s[:5]) // [a b c d e]
fmt.Println(s[2:]) // [c d e f]
good := []string{"g", "o", "o", "d"}
fmt.Println(good) // [g o o d]
- map
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m) // map[one:1 two:2]
fmt.Println(len(m)) // 2
fmt.Println(m["one"]) // 1
fmt.Println(m["unknow"]) // 0
r, ok := m["unknow"]
fmt.Println(r, ok) // 0 false
delete(m, "one")
m2 := map[string]int{"one": 1, "two": 2}
var m3 = map[string]int{"one": 1, "two": 2}
fmt.Println(m2, m3)
- range
package main
import "fmt"
func main() {
m := map[string]string{"a": "A", "b": "B"}
for k,v := range m {
fmt.Println(k,v)
}
}
- func
// add 函数接受两个整数参数 a 和 b,并返回它们的和
func add(a int, b int) int {
return a + b
}
// add2 函数与 add 函数功能相同,但参数类型声明更简洁
func add2(a, b int) int {
return a + b
}
- point
package main
import "fmt"
func add2(n int) {
n += 2
}
func add2ptr(n *int) {
*n += 2
}
func main() {
n := 5
add2(n)
fmt.Println(n) // 5
add2ptr(&n)
fmt.Println(n) // 7
}
- 结构体
//结构体定义
type user struct {
name string
password string
}
//结构体使用
a := user{name: "wang", password: "1024"}
b := user{"wang", "1024"}
c := user{name: "wang"}
c.password = "1024"
var d user
d.name = "wang"
d.password = "1024"
//结构体函数
func (u user) checkPassword(password string) bool {
return u.password == password
}
func (u *user) resetPassword(password string) {
u.password = password
}
func main() {
a := user{name: "wang", password: "1024"}
a.resetPassword("2048")
fmt.Println(a.checkPassword("2048")) // true
}