> 文章列表 > Golang快速入门

Golang快速入门

Golang快速入门

基础语法

  • pakcage
  • import
  • main 包的 main 函数开始
  • 没有public, protected 和 private,函数首字母大写类似public, 小写类似private
  • 通过文件路径判断包
package mainimport ("fmt""math"
)// import "fmt"
// import "math"func main() {fmt.Println(math.Pi)
}/*
 https://go.dev/doc/install
 wget https://dl.google.com/go/go1.20.3.linux-amd64.tar.gz
 sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.20.3.linux-amd64.tar.gz
 export PATH=$PATH:/usr/local/go/bin*/// go mod init
// go mod tidy
// go run .

函数

  • 连续2个或多个命名形参类型相同时,除最后一个类型外,其它都可省略
  • 多值返回
  • 命名返回值
package mainimport ("fmt""math"
)func double(x int) int {return x * 2
}// 多个参数类型相同可以省略前面的
func add(x, y int) int {return x + y
}// 可以多个返回值
func swap(a, b int) (int, int) {return b, a
}func swapString(a, b string) (string, string) {return b, a
}// 返回值可以命名,一直return就可以
func split(sum int) (x, y int) {x = sum * 4 / 9y = sum - xreturn
}func main() {fmt.Println(math.Pi)fmt.Println(double(4))fmt.Println(add(4, 5))fmt.Println(swap(6, 7))fmt.Println(swapString("hello ", "world! "))fmt.Println(split(16))
}
jiazhao@DESKTOP-AMJKBOJ:~/samples/languages/go/quick_start$ go run .
3.141592653589793
8
9
7 6
world!  hello 
7 9
jiazhao@DESKTOP-AMJKBOJ:~/samples/languages/go/quick_start$ 

var变量

  • 可以出现在 package 级别,也定义在 func 里。
  • 可以一起初始化,也可以不指定类型。
  • 简介赋值语句 := 可以在类型明确的地方代替 var 生命,但不能出现在 func 外。
package mainimport ("fmt"
)// func 外
var a, b, c bool
// 初始化
var x, y int = 10, 20func main() {var i int// 自动检测类型var c, python, java = "nice", true, "yeah"// 简写方式j := 3mother, father := "my mother", "my father"fmt.Println(a, b, c, i)fmt.Println(c, python, java)fmt.Println(j)fmt.Println(mother, father)
}
jiazhao@DESKTOP-AMJKBOJ:~/samples/languages/go/quick_start$ go run .
false false nice 0
nice true yeah
3
my mother my father
jiazhao@DESKTOP-AMJKBOJ:~/samples/languages/go/quick_start$ 

const变量

类型

  • 基本类型
    • bool
    • string
    • int, int8, int16, int32, int64
    • uint, uint8, uint32, uint64, uintptr
    • byte == uint8
    • rune == int32 表示一个unicode
    • float32, float64
    • complex64, complex128
  • 类型自动推导
  • 类型转换
  • 不同类型转换时需要显示转换
  • sting -> int :
  • int -> string :
  • string -> []byte :
  • []byte -> string :
  • float64 -> string :
    package mainimport ("fmt""strconv"
    )func main() {i := 22// int -> floatj := float32(i)// float -> uintk := uint(j)_a := "43"// string -> inta, _ := strconv.Atoi(_a)// int -> string_b := 55555b := strconv.Itoa(_b)// string -> []bytemyString := "ABCD"var myByte []byte = []byte(myString)// []byte -> stringvar infoByte []byte = []byte{65, 66}infoString := string(infoByte)fmt.Printf("%d\\r\\n", i)fmt.Printf("%f\\r\\n", j)fmt.Printf("%d\\r\\n", k)fmt.Println(a)fmt.Println(b)fmt.Println(myByte)fmt.Println(infoString)
    }
    

流程控制

  • 只有一种循环结构 for
    • for i := 1; i <= 10; i++ {}
    • for a < b {} 和其它的while一样
    • for {} 死循环
    • for index, value := range arrOrMap {}
  • if else
    • if 可在执行判断前,先执行一个语句 if z := x + y; z < a {}
  • switch
    • 每个case 之后自带 break, 除非指定 fallthrough,否则不会自动往后执行
    • 也可以在执行前,先执行一个语句。 switch v := x + y; v {}
  • defer
package mainimport ("fmt""time"
)func main() {sum := 0// 没有括号for i := 1; i <= 10; i++ {sum += i}fmt.Println(sum)j := 1// 前后都可省略for j <= 5 {fmt.Println(j)j++}// 死循环for {fmt.Printf(". ")time.Sleep(time.Duration(1) * time.Second)}
}
jiazhao@DESKTOP-AMJKBOJ:~/samples/languages/go/quick_start$ go run .
55
1
2
3
4
5
. . . . . . 
package mainimport ("fmt""runtime""time"
)func add(x, y int) int {fmt.Println("------add.")return x + y
}func main() {// 先执行add, 在最后才执行exit.....defer fmt.Println("exit..... ", add(2, 3))fmt.Print("Go run on ")switch os := runtime.GOOS; os {case "linux":fmt.Println("Linux.")// 自带了 breakdefault:fmt.Printf("%s, ah\\r\\n", os)}t := time.Now()switch {case t.Hour() < 12:fmt.Println("Good morning.")case t.Hour() < 17:fmt.Println("Good afternoon.")default:fmt.Println("Good evening.")}
}
jiazhao@DESKTOP-AMJKBOJ:~/samples/languages/go/quick_start$ go run .
------add.
Go run on Linux.
Good afternoon.
exit.....  5
jiazhao@DESKTOP-AMJKBOJ:~/samples/languages/go/quick_start$ 

更多类型