文档章节

2:GO基础知识

悦亮工作室
 悦亮工作室
发布于 2015/05/05 17:06
字数 800
阅读 10
收藏 0
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()
//我还没写完


© 著作权归作者所有

共有 人打赏支持
悦亮工作室
粉丝 9
博文 28
码字总数 5685
作品 0
闵行
程序员
私信 提问
JS Json遍历问题!

JSON数据是这样的: { "ID": 2410, "Name": "医疗机构从业人员行为规范与医学伦理学", "PID": -1, "Require": null, "subject": null, "Childs": [ { "ID": 2411, "Name": "一、医疗机构从业...

enderahkin
01/03
44
1
自动聊天机器人项目班 [一门课搞定聊天机器人]

百度云盘下载 打造传统NLP聊天机器人 第1课 聊天机器人的基础模型与综述 知识点1:行业与业界综述 实战项目:最简单的Rule-Base聊天机器人 第2课 NLP基础及扫盲 知识点1:NLP基本算法 实战项...

iyx668
07/05
0
0
计算机技术与软件专业技术资格(水平)考试

关于北京地区2017年度计算机技术与软件专业技术资格(水平)考试有关问题的通知 京人考发〔2017〕14号 2017年3月13日 各有关单位:   根据原北京市人事局、原北京市信息化工作办公室《关于...

杰1992
2017/06/23
0
0
总结和翻译机器学习和计算机视觉类资料的博客 ( 在微博上看到的)

[置顶]说明 2015年05月25日 之前在csdn写博客,可是csdn经常进不去,所以转战博客园,,就用了一键博客搬家功能,只搬过来66篇,其中Python2.3-原理之语句和语法和Python2.5-原理之模块是手动...

Jr小王子
2015/08/31
169
0
真详细,五年Python大咖花了一周归纳出来的python基础知识实例!

1、在Python 语言中,对象是通过引用传递的。 2、多元赋值,其实就是元组赋值 3、编写模块 4、时刻记住一个事实 5、动态类型 6、变量在内存中是通过引用计数来跟踪管理的 7、异常处理 8、所有...

Python新世界
07/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue- 对象语法 v-bind:class与对象语法的使用

我们可以传给 v-bind:class 一个对象,以动态地切换 class 。 <div v-bind:class="{ active: isActive }"></div>//对象语法也就是在v-bind:class绑定一个对象的时候,里面的值将影响最终取值...

文文1
9分钟前
1
0
epoll中使用

1、一个线程epoll_wait时,另一个线程调用epoll_ctl是安全的。 2、使用edge触发,在socket有数据到来后,不收取数据,再次调用epoll_ctl将socket加入,仍会触发下一次动作。 asio用该方法来发...

gelare
37分钟前
1
0
PHP规范PSR2

PSR标准 - PSR-2 为了尽可能的提升阅读其他人代码时的效率,下面例举了一系列的通用规则,特别是有关于PHP代码风格的。 各个成员项目间的共性组成了这组代码规范。当开发者们在多个项目中合作...

geek土拨鼠
52分钟前
5
0
【极简】如何在服务器上安装SSL证书?

本文适合任何人了解,图形化操作。下面以腾讯云为例,并且服务器(linux)也安装了宝塔面板。 1.登陆腾讯云账号进入控制台,找到SSL的产品 2.按要求申请并填写表单,记住私钥密码 3.提交后,待...

皇冠小丑
今天
1
0
深入理解编译器

深入理解编译器 原文出处 欢迎向Rust中文社区投稿,投稿地址,好文将在以下地方直接展示 1 Rust中文社区首页 2 Rust中文社区Rust文章栏目 3 知乎专栏Rust语言 编程语言是如何工作的 从内部理解...

krircc
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部