go语言入门(适合有C/C++基础的)

54 阅读3分钟

go语言简介

什么是go

  1. 高性能,高并发,性能媲美c和c++,可使用标准库开发高性能的应用程序
  2. 语法简单,相当于c语言的简化版,学习周期短
  3. 丰富的标准库
  4. 完善工具链
  5. 静态链接,在go语言中所有编译结果默认都是静态链接,只需拷贝编译后的可执行文件,不需要其他附属文件,占用空间小,部署方便快捷
  6. 跨平台
  7. 垃圾回收

开发环境配置

  1. 安装Golang 官网下载:go.dev/dl/
    如果打不开,可以用golang在中国的镜像:studygolang.com/dl
    如果下载速度慢,可以配置代理:goproxy.cn/
  2. 选项编辑器或集成开发环境 推荐下载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 编译成可执行文件

基础语法(自行观察代码,动手尝试)

  1. 变量声明
var a=""hi"
var b,c,int=1,2
var d float64
f:=float32(d)

2.if else :

if 7%2==0 {
    ...   
}else {
   ...
}
  1. 循环
for{

}//死循环
for i:=0;i<=10;i++ {

}
  1. switch
a :=2
switch a{
   case 1:
   case 2:
   default:
}//go中不需要break
  1. 数组
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)
  1. 切片
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]
  1. 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)
  1. range
package main
import "fmt"
func main() {
	m := map[string]string{"a": "A", "b": "B"}
	for k,v := range m {
		fmt.Println(k,v) 
	}
}
  1. 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
}
  1. 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
}
  1. 结构体
//结构体定义
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
}