go学习

1.包

每个go程序都是由包组成的

2.变量

  • var 语句用于声明一个变量列表,跟函数的参数列表一样,类型在最后
  • var 语句可以出现在包或函数级别
package main

import "fmt"

var c, python, java bool

func main() {
	var i int
	fmt.Println(i, c, python, java)
}


2.1 变量的初始化

  • 变量声明可以包含初始值,每个变量对应一个。
  • 如果初始化值已存在,则可以省略类型;变量会从初始值中获得类型
    短变量声明
  • 在函数中,简洁赋值语句 := 可在类型明确的地方代替 var 声明。
  • 函数外的每个语句都必须以关键字开始(var, func 等等),因此 := 结构不能在函数外使用

2.2 基本类型

bool 
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr

byte  //uint的别名

rune //int32的别名

float32 float64
complex64 complex128

package main
import (
	"fmt"
	"math/cmplx"
)

var (
	ToBe   bool       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

func main() {
	fmt.Printf("Type: %T Value: %v\n", ToBe, ToBe)
	fmt.Printf("Type: %T Value: %v\n", MaxInt, MaxInt)
	fmt.Printf("Type: %T Value: %v\n", z, z)
}

2.3 零值

  • 没有明确初始值的变量声明会被赋予它们的 零值。

  • 零值是:
    数值类型为 0,
    布尔类型为 false,
    字符串为 ""(空字符串)

package main

import "fmt"

func main() {
	var i int
	var f float64
	var b bool
	var s string
	fmt.Printf("%v %v %v %q\n", i, f, b, s)
}

2.4 类型转换

表达式 T(v) 将值 v 转换为类型 T。

一些关于数值的转换:

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

2.5 常量

  • 常量的声明与变量类似,只不过是使用 const 关键字
  • 常量可以是字符、字符串、布尔值或数值
  • 常量不能用 := 语法声明
const name = "scyrc"
const sex =  "male"

3.函数

func add(x int ,y int) int {
  return x +y
}

// 省略参数类型
func add (x, y int) int {
  return x + y
}

//多值返回
func swap(x ,y string) (string, string){
  return y, x
} 

// 命名返回值
func split(sum int)(x, y int){
  x = sum* 4/9
  y = sum -x 
  return
}

4.1 控制流程语句

4.1for循环

Go 只有一种循环结构:for 循环。
基本的 for 循环由三部分组成,它们用分号隔开:
初始化语句:在第一次迭代前执行
条件表达式:在每次迭代前求值
后置语句:在每次迭代的结尾执行
初始化语句通常为一句短变量声明,该变量声明仅在 for 语句的作用域中可见。

一旦条件表达式的布尔值为 false,循环迭代就会终止

package main
import(
"fmt"
)
func main(){
  var sum =0
  for var i=0; i<10; i++{
    sum += i  
  }
fmt.Println(i) 
}

4.2 if

Go 的 if 语句与 for 循环类似,表达式外无需小括号 ( ) ,而大括号 { } 则是必须的

package main

import (
	"fmt"
	"math"
)

func sqrt(x float64) string {
	if x < 0 {
		return sqrt(-x) + "i"
	}
	return fmt.Sprint(math.Sqrt(x))
}

func main() {
	fmt.Println(sqrt(2), sqrt(-4))
}

同 for 一样, if 语句可以在条件表达式前执行一个简单的语句。
该语句声明的变量作用域仅在 if 之内

func pow(x, n, lim float64) float64 {
	if v := math.Pow(x, n); v < lim {
		return v
	}
	return lim
}

4.3 switch

  • switch 是编写一连串 if - else 语句的简便方法。它运行第一个值等于条件表达式的 case 语句。
  • Go 的 switch 语句类似于 C、C++、Java、JavaScript 和 PHP 中的,不过 Go 只运行选定的 case,而非之后所有的 case。 实际上,Go 自动提供了在这些语言中每个 case 后面所需的 break 语句。 除非以 fallthrough 语句结束,否则分支会自动终止。
  • Go 的另一点重要的不同在于 switch 的 case 无需为常量,且取值不必为整数
package main

import (
	"fmt"
	"runtime"
)

func main() {
	fmt.Print("Go runs on ")
	switch os := runtime.GOOS; os {
	case "darwin":
		fmt.Println("OS X.")
	case "linux":
		fmt.Println("Linux.")
	default:
		// freebsd, openbsd,
		// plan9, windows...
		fmt.Printf("%s.\n", os)
	}
}

4.4 defer

  • defer 语句会将函数推迟到外层函数返回之后执行
  • 推迟调用的函数其参数会立即求值,但直到外层函数返回前该函数都不会被调用
  • 推迟的函数调用会被压入一个栈中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用
package main

import "fmt"

func main() {
	defer fmt.Println("world")

	fmt.Println("hello")
}

5指针

6结构体

7数组&切片

8

posted @ 2021-10-04 00:25  scyrc  阅读(56)  评论(0编辑  收藏  举报