3.goLand基础语法

概述

从 java 转来学 go ,在此记录,方便以后翻阅。

语法

for

package main

import "fmt"

func main() {
   
	for i := 0; i < 3; i++ {
   
		fmt.Println(i)
	}

	fullString := "helloworld"
	for i, i2 := range fullString {
   
		fmt.Println(i, string(i2))
	}
}

在这里插入图片描述

for-range
遍历数组,切片,字符串,Map 等

常量与变量

变量定义

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

数组

  • 相同类型且长度固定连续内存片段
  • 以编号访问每个元素
  • 定义方法
    • var identifier [len] type
  • 示例
    • myArray :=[3]int{1,2,3}

切片 slice

和数组类似的数据结构

  • 切片是对数组一个连续片段的引用
  • 数组定义中不指定长度即为切片
    • var identifier [] type
  • 切片在未初始化之前默认为nil,长度为0
package main

import "fmt"

func main() {
   
	myArray := [5]int{
   1, 2, 3, 4, 5}
	mySlice := myArray[1:3]
	fmt.Printf("mySlice %+v\n", mySlice)
	fullSlice := myArray[:]
	fmt.Printf("fullSlice %+v\n", fullSlice)

	var mySlice2 []int
	mySlice2 = append(mySlice2, 1)
	mySlice2 = append(mySlice2, 2)
	mySlice2 = append(mySlice2, 3)
	fmt.Println(mySlice2)
}

切片问题

问题1
package main

import "fmt"

func main() {
   
	var a []int
	b := []int{
   1, 2, 3}
	c := a
	a = append(b, 1)
	fmt.Println(c)
	fmt.Println(a)
	fmt.Println(b)
}

在这里插入图片描述

append(b,1) 时,会重新分配地址,导致a与c并不相等。

问题2
package main

import "fmt"

func main() {
   
	mySlice := []int{
   10, 20, 30, 40, 50}
	for _, i2 := range mySlice {
   
		i2 *= 2
	}
	fmt.Println(mySlice)

	for i, _ := range mySlice {
   
		mySlice[i] *= 2
	}
	fmt.Println(mySlice)
}

在这里插入图片描述

注意:go 语言都是值传递

Make 和 New

  • New 返回指针地址
  • Make 返回第一个元素,可预设内存空间,避免未来的内存拷贝

在这里插入图片描述

结构体和指针

  • 通过 type … struct 关键字自定义结构体
  • Go 语言支持指针,但不支持指针运算
    • 指针变量的值为内存地址
    • 示贝佳的指针为 nil
package main

import "fmt"

type IF interface {
   
	// 接口里面只能定义行为
	getName() string
}

type Human struct {
   
	// 结构体里面只能包含属性
	firstName, lastName string
}

func main() {
   
	h := new(Human)
	fmt.Println(h)
	fmt.Println(&h)
	fmt.Println(*&h)
}

在这里插入图片描述

结构体标签

结构体中的字段除了有名字和类型外,还可以有一个可选的标签(tag)

package main

import "reflect"

type MyType struct {
   
	Name string `json:"name"`
}

func main() {
   
	mt := MyType{
   Name: "test"}
	mytype := reflect.TypeOf(mt)
	name := mytype.Field(0)
	tag := name.Tag.Get("json")
	print(tag)
}

在这里插入图片描述

结束

goLand 语法,后续会继续补充,如有疑问,欢迎评论区留言。

相关推荐

  1. Golang基础-3

    2024-01-18 22:20:01       17 阅读
  2. golang语言系列:golang基础知识

    2024-01-18 22:20:01       20 阅读
  3. MySQL 基础语法3

    2024-01-18 22:20:01       13 阅读
  4. Goland运行go语言基础

    2024-01-18 22:20:01       21 阅读
  5. Golang基础8-go语言依赖管理

    2024-01-18 22:20:01       10 阅读
  6. GoLang基础】select语句是什么?

    2024-01-18 22:20:01       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-18 22:20:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-18 22:20:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-18 22:20:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-18 22:20:01       20 阅读

热门阅读

  1. 2024秋招,建信金融科技非功能测试工程师

    2024-01-18 22:20:01       33 阅读
  2. 华为HCIE课堂笔记第十五章 IPv6过渡技术

    2024-01-18 22:20:01       29 阅读
  3. golang中make与new有什么区别?

    2024-01-18 22:20:01       32 阅读
  4. 1.17号网络

    2024-01-18 22:20:01       31 阅读
  5. 前端开发 5: Vue.js 框架

    2024-01-18 22:20:01       27 阅读
  6. CSS实现图片放大缩小的几种方法

    2024-01-18 22:20:01       30 阅读