文档章节

go基本语法

汤汤圆圆
 汤汤圆圆
发布于 2018/09/18 10:53
字数 831
阅读 13
收藏 0
Go
package main
import(
	"fmt"
	"strings"
	"project04/utils" //这个引入包,从环境变量GOPATH或者GOROOT起需要一个src目录;
)

type myfunc func(int, int) int //自定义类型myfunc

//全局匿名函数
var (
	FuncGlobalAnonymous = func(n1 int, n2 int) int {
		return n1 - n2
	}
)
func main() {
	//变量的定义以及switch语句的使用
	var num1 float64 = utils.Test(1, 2, '+')
	var num2 float64 = utils.Test(1, 2, '-')
	var num3 float64 = utils.Test(1, 2, '*')
	var num4 float64 = utils.Test(1, 3, '/')
	var num5 float64 = utils.Test(1, 1, '&')

	fmt.Println("num1 = ", num1)
	fmt.Println("num2 = ", num2)
	fmt.Println("num3 = ", num3)
	fmt.Printf("num4 = %.2f\r\n", num4)
	fmt.Println("num5 = ", num5)

	//函数的使用
	sub,sum := getSubAndSum(1, 2)
	fmt.Printf("sub = %v\r\n", sub)
	fmt.Printf("sum = %v\r\n", sum)

	//返回值有两个,第一个值忽略
	_,sum = getSubAndSum(2, 2)
	fmt.Printf("sum = %v\r\n", sum)

	//测试递归
	testRecursion(4);//2,2,3

	//for语句的使用 i := 1这种写法自动判断类型;
	for i := 1; i <= 3; i++ {
		fmt.Printf("test for i = %d\r\n", i)
	}

	//指针类型
	var n1 int = 10;
	testZhizhen(&n1);//传入n1地址
	fmt.Printf("testzz n1 = %d\r\n", n1)//n1 为20了;

	//函数赋值给变量
	fval := funcValue;
	fmt.Printf("fval 类型是%T,funcValue类型是%T\r\n", fval, funcValue)
	res := fval(1, 3)
	fmt.Println("res=", res)

	//函数作为一个参数传递
	sub,sum,val := funcParams(fval, 1, 2)
	fmt.Println("sub=", sub)
	fmt.Println("sum=", sum)
	fmt.Println("val=", val)

	//使用type自定义类型(定义在外围)
	mytype := funcCustomType(fval, 2, 3)
	fmt.Println("mytype=", mytype)

	//可变参数
	total := daynamicParams(10, 1, 2, 3, 4, -1)
	fmt.Println("total=", total)

	//init 函数,每个包都有一个init 函数;可以用于初始化一些全局变量,在 main函数之前执行
	fmt.Println("name=",utils.Name, ",age=", utils.Age)

	//匿名函数
	test := func(n1 int, n2 int) int {
		return n1 + n2
	}(2, 4)
	fmt.Println("test=", test)

	test2 := FuncGlobalAnonymous(3, 2)
	fmt.Println("test2=", test2)

	test3 := func(n1 int, n2 int) int {
		return n1 + n2
	}
	test3Val := test3(1, 2)
	fmt.Println("test3Val=", test3Val)

	//闭包
	tc := testClosure();
	tc(1);//11
	tc(1);//12
	tc(1);//13

	f := testClosure2(".jpg")
	fmt.Println(f("test1"))
	fmt.Println(f("test2.jpg"))

	//defer的应用;主要用于关闭资源(数据库创建链接之后立马用defer关闭,打开文件之后立马用defer关闭)
	tf := testDefer(10, 11)
	fmt.Println("tf=", tf); //4
}


func funcValue(n1 int, n2 int) int {
	return n1 + n2
}

func testDefer(n1 int, n2 int) int {
	defer fmt.Println("defer1 n1=", n1)//入栈 3
	defer fmt.Println("defer2 n2=", n2)//入栈 2
	n1++
	n2++
	fmt.Println("ok!!!!") //这个最先输出 1
	return n1 + n2
}
//闭包
func testClosure() func (int) int {
	var n int = 10
	return func (n1 int) int {
		n = n + n1
		fmt.Println("testClosure=", n);
		return n
	} 
}

func testClosure2(suff string) func (string) string {
	return func (name string) string {
		if !strings.HasSuffix(name, suff) {
			 return name + suff
		}
		return name
	}
}

///参数是一个函数, 以及返回值可以定义
func funcParams(funvar func(int, int) int, n1 int, n2 int) (sub int, sum int, val int) {
	sub = n1 - n2
	sum = n1 + n2
	val = funvar(n1, n2)
	return 
}

//使用自定义类型
func funcCustomType(funvar myfunc, n1 int, n2 int) int {
	return funvar(n1, n2)
}

func daynamicParams(n1 int, args... int) int {
	sum := n1
	for i := 0; i < len(args); i++ {
		sum += args[i]
	}
	return sum
}

//函数的定义
func getSubAndSum(n1 int, n2 int) (int, int) {
	sub := n1 - n2
	sum := n1 + n2
	return sub, sum
}

//相当于php中的引用传递
func testZhizhen(n1 *int) {
	*n1 = *n1 + 10
	fmt.Printf("testzz n1 = %d\r\n", *n1)
}

//递归
func testRecursion(n int) {
	if (n > 2) {
		n--
		testRecursion(n)
	}
	fmt.Println("testRecursion n=", n)
}
package utils

import "fmt"
var Name string
var Age int


func init() {
	Name = "wangwu"
	Age = 20
}

func Test(n1 float64, n2 float64, operate byte) float64 {
	var res float64
	switch operate {
		case '+':
			res = n1 + n2
			break;
		case '-':
			res = n1 - n2
			break
		case '*':
			res = n1 * n2
			break
		case '/':
			res = n1 / n2
		   break
		default:
			fmt.Printf("操作符有误 %v\r\n", operate)   			
	}
	return res
}

© 著作权归作者所有

汤汤圆圆

汤汤圆圆

粉丝 11
博文 82
码字总数 26104
作品 0
昌平
程序员
私信 提问
史上最简单的 MySQL 教程(四十)「数据库变量」

变量 在 MySQL 数据库中,变量有两种,分别为:系统变量和自定义变量。 根据变量的作用范围,又分为: 会话级别变量:仅对当前客户端当次连接有效; 全局级别变量:对所有客户端的任一次连接...

qq_35246620
2017/12/03
0
0
我是如何学习Xcode下Objective C开发的?

Objective C开发的主要IDE是Mac平台上的Xcode,当然你在Linux下也可以学习和使用,甚至在Windows下也是可以的,有兴趣的朋友可以自己搜索这方面的信息。但是我觉得最好是在Mac平台上使用Xco...

鉴客
2011/12/09
1K
0
javascript函数应用和DOM

一、调用函数 例: <html><head><title></title><script language="javascript" type="text/script">function text() { alert("该函数被调用了");}</script></head><body><input type="butto......

高能狂犬
2015/07/02
14
0
SQL Server Transact-SQL 编程

T-SQL语句用于管理SQL Server数据库引擎实例,创建和管理数据库对象,以及查询、插入、修改和删除数据。 Ø 变量 1、 局部变量(Local Variable) 局部变量是用户可以自定义的变量,它的作用...

ibm_hoojo
2011/07/15
0
0
有没有什么方法实现对SQL语句基本语法的校验,不连接数据库,只是做基本的语法校验。

有没有什么方法实现对SQL语句基本语法的校验,不连接数据库,只是做基本的语法校验。

o0O0o0O0o
2014/10/14
1K
4

没有更多内容

加载失败,请刷新页面

加载更多

Taro 兼容 h5 踩坑指南

最近一周在做 Taro 适配 h5 端,过程中改改补补,好不酸爽。 本文记录📝遇到的问题,希望为有相同需求的哥们👬节约点时间。 Taro 版本:1.3.9。 解决跨域问题 h5 发请求会报跨域问题,需...

dkvirus
今天
4
0
Spring boot 静态资源访问

0. 两个配置 spring.mvc.static-path-patternspring.resources.static-locations 1. application中需要先行的两个配置项 1.1 spring.mvc.static-path-pattern 这个配置项是告诉springboo......

moon888
今天
3
0
hash slot(虚拟桶)

在分布式集群中,如何保证相同请求落到相同的机器上,并且后面的集群机器可以尽可能的均分请求,并且当扩容或down机的情况下能对原有集群影响最小。 round robin算法:是把数据mod后直接映射...

李朝强
今天
4
0
Kafka 原理和实战

本文首发于 vivo互联网技术 微信公众号 https://mp.weixin.qq.com/s/bV8AhqAjQp4a_iXRfobkCQ 作者简介:郑志彬,毕业于华南理工大学计算机科学与技术(双语班)。先后从事过电子商务、开放平...

vivo互联网技术
今天
19
0
java数据类型

基本类型: 整型:Byte,short,int,long 浮点型:float,double 字符型:char 布尔型:boolean 引用类型: 类类型: 接口类型: 数组类型: Byte 1字节 八位 -128 -------- 127 short 2字节...

audience_1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部