Go语言入门指南 | 豆包MarsCode AI刷题

64 阅读3分钟

1.Go语言的特性

image.png

2.Go语言的安装

先去官网安装好Go的开发环境,然后在VsCode中安装Go的插件,就可以使用了。 image.png

image.png

3.Go的语法

变量与常量

声明变量的两种方式:

  • var name=value
  • name :=value

声明常量:

  • const name=value(根据上下文自动确定类型)

字符串是内置类型,可以通过加号去拼接。

package main

import (
	"fmt"
	"math"
)

func main() {
	var a = "initial"
	var b, c int = 1, 2
	var d = true
	var e float64
	f := float32(e)
	g := a + "foo"
	fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
	fmt.Println(g)                // initialfoo
	const s string = "constant"
	const h = 500000000
	const i = 3e20 / h
	fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}

if-else

if-else中的条件不用括号

if num := 9; num < 0 {
	fmt.Println(num, "is negative")
} else if num < 10 {
	fmt.Println(num, "has 1 digit")
} else {
	fmt.Println(num, "has multiple digits")
}

循环

只有for循环,没有while这些,就算只有一句话也需要加上花括号。

for {
	fmt.Println("loop")
	break
}
        
for j := 7; j < 9; j++ {
	fmt.Println(j)
}

switch

switch下的case不需要break,若switch后面为空直接跟花括号,则case后面不限定条件的类型。

t := time.Now()
switch {
    case t.Hour() < 12-8:
        fmt.Println("It's before noon")
    default:
	      fmt.Println("It's after noon")
	}
        
  a := 2
	switch a {
	case 1:
		fmt.Println("one")
	case 2:
		fmt.Println("two")
	case 3:
		fmt.Println("three")
	case 4, 5:
		fmt.Println("four or five")
	default:
		fmt.Println("other")
	}

数组

数字长度是固定的

	var a [5]int
	a[4] = 100
	fmt.Println(a[2])     // 0
	fmt.Println(len(a))   // 5
	fmt.Println(a[4])      // 100

切片

可以是任意长度的数组,可以去更改长度 ,使用append时记得再赋值给原数组。

func main() {
	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]
	fmt.Println("len:", len(s)) // 6

	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

用make去创建,delete删除。在map中去读取时,在后面加,ok,可以去找该key在map中是否存在 返回value值和布尔值。

func main() {
	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
	s, ok := m["two"]
	fmt.Println(s, ok) // 2 true

	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

  nums := []int{2, 3, 4}
	sum := 0
	for i, num := range nums {
		sum += num
		if num == 2 {
			fmt.Println("index:", i, "num:", num) // index: 0 num: 2
		}
	}
	fmt.Println(sum) // 9

	m := map[string]string{"a": "A", "b": "B"}
	for k, v := range m {
		fmt.Println(k, v) // b B; a A
	}
	for k := range m {
		fmt.Println("key", k) // key a; key b
	}

函数

函数的变量类型是后置的

func add(a int, b int) int {
	return a + b
}

func add2(a, 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
}

指针

和C++有点像,形参是指针类型*,同时实参记得加 &,在函数里面进行运算时也要记得带*

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
}

结构体

  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"

	fmt.Println(a, b, c, d)        // {wang 1024} {wang 1024} {wang 1024} {wang 1024}
	fmt.Println(checkPassword(a, "1024"))   // true
	fmt.Println(checkPassword2(&a, "1024")) // true

结构体方法

有两种,一种带指针,一种不带指针。带指针的会改变结构体本身

type user struct {
	name     string
	password string
}

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
 }

看完第一课的心得,Go语言被很多大厂使用,据说有一定其它语言基础上手会很快,感觉特性跟Java有一点点相像,跨平台、垃圾回收机制,使用和C或C++很类似。入门要记得也很多,任重而道远呐,继续努力!