go基础语法

go的常用语法

package main

/*程序入口*/
func main() {
	//一个包下面不同文件调用,需要将不同文件package设置为当前文件名main
	GetConnection()
	//当前文档的方法
	test01()
}

// Test01 基础语法
func test01() {
	fmt.Println("基础语法")
	stockade := 1128
	enodata := "2020-12-31"
	// %d 表示整型数字,%s 表示字符串
	targetUrl := fmt.Sprintf("日期=%d 时间=%s:", stockade, enodata)
	fmt.Println(targetUrl)
	fmt.Println(fmt.Sprintf("指针地址%d", &stockade))

	//数组使用
	arrayName01 := []string{"张三", "李四"}
	for i := 0; i < len(arrayName01); i++ {
		fmt.Println(fmt.Sprintf("一维数组%s", arrayName01[i]))
	}
	arrayName02 := [][]string{{"11", "12"}, {"21", "22"}}
	for i := 0; i < len(arrayName02[0]); i++ {
		for y := 0; y < len(arrayName02[1]); y++ {
			fmt.Println(fmt.Sprintf("二维数组%s", arrayName02[i][y]))
		}
	}

	//切片=》动态数组  make虽然指定的size是5但是可以超载
	var makeArray = make([]int, 5)
	makeArray = []int{0, 1, 2, 3, 4, 5, 6, 7, 8}
	makeArray01 := makeArray[2:5] //指定数组中下标2-5的数据   2,3,4
	makeArray02 := makeArray[:5]  //指定数组中下标5前面的数据  0,1,2,3,4
	makeArray03 := makeArray[5:]  //指定数组中下标5后面的数据  0,1,2,3,4
	fmt.Println(fmt.Sprintf("切片=》动态数组%d,%d,%d", makeArray01[0], makeArray02[0], makeArray03[0]))

	//map对象
	mapArray := map[string]string{"France": "Paris", "Italy": "Rome", "Japan": "Tokyo", "India": "New delhi"}
	for mapItem := range mapArray {
		fmt.Println(fmt.Sprintf("map数组%s", mapArray[mapItem]))
	}
	mapArray01 := make(map[string]string)
	fmt.Println(len(mapArray01))

	switch 1 {
	case 1:
		fmt.Println("switch 1")
	default:
		fmt.Println("switch")
	}

	fmt.Println("select")
	ch := make(chan int) //发送值到Channel ch中  ch并发核心单元 make(chan int)是ch的初始值,类似C#delegate
	go func(c chan int) {
		// 修改时间后,再查看执行结果
		time.Sleep(time.Second * 1)
		ch <- 1
	}(ch)
	select {
	case v := <-ch: //从Channel ch中接收数据,并将数据赋值给v
		fmt.Sprintf("select%d", v)
	case <-time.After(2 * time.Second): // 等待 2s
		fmt.Println("no case ok")
	}

	//range 返回迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素
	for key, value := range arrayName01 {
		fmt.Println(key)   //0
		fmt.Println(value) //1
	}
	for i := 0; i < len(arrayName01); i++ {
		fmt.Println(arrayName01[i]) //1
	}
	for true {
		fmt.Println("0")
		goto goRegion
		break
	}
goRegion:
	if true {
		_, numberResult := getNumber("张三", "李四")
		fmt.Println(fmt.Sprintf("函数调用,弃掉一个指针%s", numberResult))

		method01 := func(x float32) int { return (int)(x) } // 声明一个函数类型
		fmt.Println(fmt.Sprintf("函数变量%d", method01(1.1)))

		testCallBack(1, callBack)

		structResult()

		var errModel errModel
		{
			errModel.code = 0
			errModel.message = "获取数据成功"
			errModel.data = "数据"
		}
		fmt.Println(fmt.Sprintf(
			"错误消息%s",
			errModel.Error()),
		)
	}

	//接口调用1
	var c1 Circle
	c1.radius=1.1
	fmt.Println(c1.getScore())

	//接口调用2
	var it interTemp
	c2 := Circle{2.2}
	it=c2
	fmt.Println(it.getGender())

	//接口调用3
	var it2 interTemp=Circle{3.3}
	fmt.Println(it2.getGender())

	//一个包下面不同文件调用
	fmt.Println(classTest01())
}

/*函数*/
func getNumber(a string, b string) (string, string) {
	return a, b
}

/*定义委托*/
type cb func(int) int

func testCallBack(x int, call cb) {
	call(1)
}
func callBack(x int) int {
	fmt.Printf("我是回调,x:%d\n", x)
	return x
}

// Circle 定义结构体
type Circle struct {
	radius float64
}

//结构 定义属性
func (c Circle) getStruct() float64 {
	return 3.14 * c.radius
}

/*结构体的使用*/
func structResult() {
	var c Circle
	c.radius = 10
	fmt.Println(fmt.Sprintf("结构体的使用%f", c.getStruct()))
}

/*定义接口*/
type interTemp interface {
	getScore() string
	getGender() string
}

/*实现接口*/
func (c Circle) getScore() string {
	return fmt.Sprintf("I'm 接口实现类1 {%f}",c.radius)
}
func (c Circle) getGender() string {
	return fmt.Sprintf("I'm 接口实现类2 {%f}",c.radius)
}

/*定义异常*/
type errModel struct {
	data    string
	message string
	code    int
}

func (err *errModel) Error() string {
	return fmt.Sprintf("code:%d message:%s data:%s", err.code,err.message,  err.data)
}

个人拙见:写法比较灵活

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值