Golang快速入门

这篇文章介绍了Go语言的基础语法,包括包的导入与main函数、函数的定义与调用、变量声明与初始化、常量的类型以及流程控制结构如for循环、if条件语句和switch语句。还提到了defer的使用以及类型转换操作。
摘要由CSDN通过智能技术生成

基础语法

  • pakcage
  • import
  • main 包的 main 函数开始
  • 没有public, protected 和 private,函数首字母大写类似public, 小写类似private
  • 通过文件路径判断包
package main

import (
	"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 main

import (
	"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 / 9
	y = sum - x

	return
}

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 main

import (
	"fmt"
)

// func 外
var a, b, c bool
// 初始化
var x, y int = 10, 20

func main() {
	var i int
	// 自动检测类型
	var c, python, java = "nice", true, "yeah"
    
	// 简写方式
	j := 3
	mother, 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 main
    
    import (
    	"fmt"
    	"strconv"
    )
    
    func main() {
    	i := 22
    	// int -> float
    	j := float32(i)
    	// float -> uint
    	k := uint(j)
    
    	_a := "43"
    	// string -> int
    	a, _ := strconv.Atoi(_a)
    	// int -> string
    	_b := 55555
    	b := strconv.Itoa(_b)
    
    	// string -> []byte
    	myString := "ABCD"
    	var myByte []byte = []byte(myString)
    
    	// []byte -> string
    	var 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 main

import (
	"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 main

import (
	"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.")
		// 自带了 break
	default:
		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$ 

更多类型

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值