2:GO基础知识

悦亮工作室 · · 1585 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main

import (
	"fmt"
)

func main() {
	c()
}

// 1,变量
func test1() {
	//-----------------------------1.1变量声明
	var v1 int
	var v2 string
	var v3 [10]int //数组
	var v4 []int   //数组切片
	var v5 struct {
		f int
	}
	var v6 *int           //指针
	var v7 map[string]int //key为string  value为int的map
	var v8 func(a int) int
	//-----------------------------1.2变量初始化
	var v9 int = 10
	var v10 = 10
	v11 := 10
	//-----------------------------1.3匿名变量
	//当调用某函数返回多个值,而你只需要用到某几个的时候,则其他的变量用“_”来代替
	_, _, nickName := GetName()

}

//1.3 匿名变量补充
func GetName() (firstName, lastName, nickName string) {
	return "michael", "ma", "liang"
}

//二:常量
func test2() {
	//-----------------------------2.1 常量
	const Pi float64 = 3.14159265358979323846
	const zero = 0.0 //
	const (
		size int64 = 1024
		eof        = -1 //
	)
	const u, v float32 = 0, 3
	const a, b, c = 3, 4, "foo"
	//-----------------------------2.2 预订义常量
	//true false iota;iota比较特殊,是编译器可以修改的常量,在每个const出现的时候被重置为0,在下一个const出现之前,每出现一次iota会自增1
	const ( // iota被重置为0
		c0 = iota // c0 == 0
		c1 = iota // c1 == 1
		c2 = iota // c2 == 2
	)
	const (
		a1 = 1 << iota // a == 1 (iota在每个const开头每重置为0)
		b1 = 1 << iota // b == 2
		c3 = 1 << iota // c == 4
	)
	const (
		u1          = iota * 42 // u == 0
		v12 float64 = iota * 42 // v == 42.0
		w           = iota * 42 // w == 84
	)
	const x = iota // x == 0 (因为iota又被重置为0了)
	const y = iota //y==0 同上
	//-----------------------------2.3枚举
	//制定一系列相关的常量,如下
	const (
		Sunday = iota
		Monday
		Tuesday
		Wednesday
		Thursday
		Friday
		Saturday
		numberOfDays
	)

}

//三:类型
func test3() {
	//-----------------------------3.1:基础类型
	//布尔类型:bool
	//整型:int8 byte int16 int uint uintptr
	//浮点类型:float32 float64
	//复数类型:complex64 complex128
	//字符串:string
	//字符类型:rune
	//错误类型:error
	//-----------------------------3.2:复合类型
	//指针
	//数组
	//切片
	//字典
	//通道
	//结构体
	//接口

}

//四:流程控制

func test4() {
	//-----------------------------4.1选择
	switch i {
	case 0:
		fmt.Printf("0")
	case 1:
		fmt.Printf("1")
	case 2:
		fallthrough
	case 3:
		fmt.Printf("3")
	case 4, 5, 6:
		fmt.Printf("4, 5, 6")
	default:
		fmt.Printf("Default")
	}

	switch {
	case 0 <= Num && Num <= 3:
		fmt.Printf("0-3")
	case 4 <= Num && Num <= 6:
		fmt.Printf("4-6")
	case 7 <= Num && Num <= 9:
		fmt.Printf("7-9")
	}
	//-----------------------------4.2循环
	sum := 0
	for i := 0; i < 10; i++ {
		sum += i
	}
	sum2 := 0
	for {
		sum2++
		if sum2 > 100 {
			break
		}
	}
	//-----------------------------4.3跳转
	//滚你妹跳转

	it := 0
HERE:
	fmt.Println(i)
	it++
	if i < 10 {
		goto HERE
	}
	//-----------------------------4.4条件
	if a < 5 {
		return 0
	} else {
		return 1
	}

}

//五:函数
//-----------------------------5.1函数定义
//func 函数名 (参数列表)返回值{函数体  返回语句}
//大小写问题不在赘述
func ImAfunc(a int, b int) (ret int, err error) {
	if a < 0 || b < 0 {
		err = errors.New("Should be non-negative numbers!")
		return
	}
	return a + b, nil
}

//-----------------------------5.2函数调用
func a() {
	//就是这么调用的
	imafc, err := ImAfunc(1, 2)
	fmt.Println(imafc, err)
}

//-----------------------------5.3不定参数类型
func myfunc(args ...int) {
	for _, arg := range args {
		fmt.Println(arg)
	}
}

//调用
func b() {
	myfunc(1, 2, 3, 4, 5, 6, 7)
}

//-----------------------------5.4多返回值
//详见ImAfunc函数
//-----------------------------5.5匿名函数
//实例1
package main

import (
	"fmt"
)

func main() {
	func(a, b int) (sum int) {
		sum = a + b
		fmt.Println(sum)
		return
	}(1, 2)//括号后直接跟参数代表直接调用
}
//实例2
package main

import (
	"fmt"
)

func main() {
	nm := func(a, b int) (sum int) {
		sum = a + b
		fmt.Println(sum)
		return
	}
	nm(1, 2)
}
//六:错误处理
func Foo(param int)(n int, err error) {
// ...
}
//调用方式如下
n, err := Foo(0)
if err != nil {
// 错误处理
} else {
// 使用返回值
}
//七:defer
//-----------------------------7.1
func CopyFile(dst, src string) (w int64, err error) {
	srcFile, err := os.Open(src)
 	if err != nil {
	return
	}
	defer srcFile.Close()
	dstFile, err := os.Create(dstName)
	if err != nil {
		return
	}
	defer dstFile.Close()
	return io.Copy(dstFile, srcFile)
}
//-----------------------------7.2
//panic()和recover()
//我还没写完



有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:悦亮工作室

查看原文:2:GO基础知识

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1585 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传