iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Go语言七篇入门教程二程序结构与数据类型
  • 530
分享到

Go语言七篇入门教程二程序结构与数据类型

2024-04-02 19:04:59 530人浏览 薄情痞子
摘要

目录1. 程序结构1.1 名称1.2 声明1.3 注释1.4 单双引号1.5 输出2. 数据类型2.1 整型2.2 浮点型2.3 复数2.4 布尔型2.5 字符串2.6 常量2.7

1. 程序结构

1.1 名称

如果一个实体名称在函数中声明,它只在函数局部有效。如果声明在函数外,它将对包里面的所有源文件可见。

实体第一个字母的大小写决定其可见性是否跨包。如果名称是以大写字母的开头,它是导出的,意味着它对外包来说是可见的可访问的,可以被自己包外的其他程序所引用。

大写可以!

在这里插入图片描述

小写不行!

在这里插入图片描述

并且Go语言常常会使用驼峰式的风格命名


func main() {
	FanOne := "666" //大驼峰 (注意!一般函数内部都是用小驼峰,局部变量,大驼峰一般用于函数的命名,需要外包的导出)
	fanOne := "666" //小驼峰
}

当然可以使用下划线比如,不过我还是比较驼峰式~

在这里插入图片描述

1.2 声明

go语言可通过var进行变量的声明

var 变量名 类型

例如:


func main(){
	var fanOne string 
	var xiaoSheng int
	var a,b,c = true , 6.6 , "fanOne" //bool ,float , string
}

当然也可以使用:=

例如


func main(){
	fanOne:="666" //string字符串
	xiaoSheng := 666  //int整型
	a,b,c := true , 6.6 ,"fanOne"  //bool ,float , string
}

1.3 注释

可以用


//单行注释


1.4 单双引号


func main(){
	var d rune
	d = '1'
	a := 'a'
	b := "a"
	c := `'a'':"b"`  //可以把单引号和双引号整括起来
	fmt.Printf("%T\n",d)	 // int32
	fmt.Printf("%T\n",a)	 // int32
	fmt.Printf("%T\n",b)	 // string
	fmt.Printf("%T\n",c)  	 // string
}

1.5 输出


//Println 自带换行 Printf 格式化输出 

在这里插入图片描述

在这里插入图片描述

2. 数据类型

2.1 整型

整型数据可以分为两类,有符号和无符号两种类型

有符号: int, int8, int16, int32, int64

无符号: uint, uint8, uint16, uint32, uint64, byte

另外rune是int32的别名

在保证程序正确运行下,尽量使用占用空间小的数据类型

  • 不同位数的整型区别在于能保存整型数字范围的大小;
  • 有符号类型可以存储任何整数,无符号类型只能存储自然数
  • int和uint的大小和系统有关,32位系统表示int32和uint32,如果是64位系统则表示int64和uint64
  • byte与uint8类似,一般用来存储单个字符

2.2 浮点型

float64float32 两种

  • float64的精度要比float32的要准确
  • 如果我们要保存一个精度高的数,则应该选择float64

浮点型的存储分为三部分:符号位+指数位+尾数位,在存储过程中,精度会有丢失

Go的浮点型默认为float64类型

2.3 复数

complex64complex128 , 二者分别由float32float64 构成,内置的complex函数根据给定的实部和虚部创建复数,而内置的real函数和img函数则分别提取复数的实部和虚部:


var x complex128 = complex(1,2) //1+2i
var y complex128 = complex(3,4) //3+4i
fmt.Println(x*y) 		//-5+10i
fmt.Println(real(x*y))  //-5
fmt.Println(imag(x*y))  //10

当然我们也可以像这样


x := 1 + 2i
y := 3 + 4i

2.4 布尔型

只有两种可能true或者式false


var fanOne true
var xiaoSheng false

2.5 字符串


func main(){
	s:="FanOne"
	fmt.Println(len(s)) //6
	fmt.Println(s[:3])  //Fan
	fmt.Println(s[1],s[2]) // 97 110
}

字符串拼接


func main(){
	s:="FanOne"
	b := "666"
	y := s + b
	fmt.Println(y) //FanOne666
}

字符串转int


num,err:=strconv.Atoi("666")//num就是整型

int 转 字符串


str := strconv.Itoa(666) //str是字符串

2.6 常量


const a = 666
fmt.Println(a) //666

2.7 数组


var a [3]int //3个整数的数组
for i , v := range a {
	fmt.Println(i,v)  
}

var fan [3]int{1,2,3}
var one [3]int{1,3}
t := [...]int{1,2,3} //省略号
fmt.Printf("%T",t)	 //[3]int

go语言的数组的长度是固定的,所以在某些场景下数组存在着它的局限性
而切片的存在就解决了数组长度局限的问题,切片可以看做一个可以自动扩容的数组,但是它跟数组还是有着区别。

2.8 切片

可以通过make切片字面量来创建和初始化切片,也可以利用现有数组或切片直接创建切片(Go语言中的引用类型(slice、map、chan)不能使用new进行初始化)。

使用make时,需要传入一个参数指定切片的长度,如果只指定长度,则切片的容量和长度相等。也可以传入两个参数分别指定长度和容量。不允许创建容量小于长度的切片。


// make只传入一个参数指定长度,则容量和长度相等。以下输出:"len: 10, cap: 10"
s := make([]int, 10)
fmt.Printf("len: %d, cap: %d\n", len(s), cap(s))

// make 传入长度和容量。以下输出:"len: 10, cap: 15"
s := make([]int, 10, 15)
fmt.Printf("len: %d, cap: %d\n", len(s), cap(s))

// 不允许创建容量小于长度的切片。下面语句编译会报错:"len larger than cap in make([]int)"
s := make([]int, 10, 5)

通过切片字面量来声明切片。


// 通过字面量声明切片,其长度和容量都为5。以下输出:“len: 5, cap: 5”
s := []int{1, 2, 3, 4, 5}
fmt.Printf("len: %d, cap: %d\n", len(s), cap(s))

// 可以在声明切片时利用索引来给出所需的长度和容量。
// 通过指定索引为99的元素,来创建一个长度和容量为100的切片
s := []int{99: 0}

基于现有数组或切片来创建切片的方法为:s := baseStr[low:high:max],low指定开始元素下标,high指定结束元素下标,max指定切片能增长到的元素下标。这三个参数都可以省略,low省略默认从下标0开始,high省略默认为最后一个元素下标,max省略默认是底层数组或切片的容量(这里也要注意max不能小于high)。这种方式下,切片的长度和容量的计算方式为:


len = hith - low
cap = max - low
s1 := baseStr[1:3:10]
fmt.Printf("len: %d, cap: %d\n", len(s1), cap(s1)) // len: 2, cap: 9

s2 := baseStr[1:3]
fmt.Printf("len: %d, cap: %d\n", len(s2), cap(s2)) // len: 2, cap: 9

s3 := baseStr[:3]
fmt.Printf("len: %d, cap: %d\n", len(s3), cap(s3)) // len: 3, cap: 10

ss1 := s1[2:5]
ss2 := s1[3:8]
fmt.Printf("len: %d, cap: %d\n", len(ss1), cap(ss1)) // len: 3, cap: 7
fmt.Printf("len: %d, cap: %d\n", len(ss2), cap(ss2)) // len: 5, cap: 6

增加可以用append


// 创建一个整型切片
// 其长度和容量都是5个元素
slice := []int{1, 2, 3, 4, 5}

// 创建一个新切片
// 其长度为2 个元素,容量为4个元素
newSlice := slice[1:3]

// 使用原有的容量来分配一个新元素
// 将新元素赋值为 60
newSlice = append(newSlice, 6)

fmt.Printf("slice: %v\n", slice)       // slice: [1 2 3 6 5]
fmt.Printf("newSlice: %v\n", newSlice) // newSlice: [2 3 6]

2.9 map

Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。

Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。

声明



var map_variable map[key_data_type]value_data_type

map_variable := make(map[key_data_type]value_data_type)

	var fan map[string]string //创建集合 
	fan = make(map[string]string)
	//map插入key-value对
	fan [ "One" ] = "666"
	fan [ "Four" ] = "999"
	//使用键输出
	for value := range fan {
		fmt.Println(value, "is", fan [value])
	}
	//查看元素在集合中是否存在
	val, ok := fan [ "Two" ] //如果确定是真实的,则存在,否则不存在
	if ok {
		fmt.Println("fanTwo is", val)
	} else {
		fmt.Println("fanTwo not exist")
	}

delete() 函数用于删除集合的元素, 参数为 map 和其对应的 key。
可以使用delete方法删除


delete(fan , "One")

2.10 结构体

结构体定义需要使用 type 和 struct 语句。struct 语句定义一个新的数据类型,结构体中有一个或多个成员。type 语句设定了结构体的名称。结构体的格式如下:


type Person struct{
	name string
	age int
	sex string
}
func main(){
	person := Person{  //初始化
		name: "fanOne",
		age:  16,
		sex:  "male",
	}
	fmt.Println(person.name)  //引用
} 

2.11 jsON


type Person struct{
	Name string `json:"name"` //序列化成string类型
	Age int	`json:"age"`
	Sex string `json:"sex"`
}
func main(){
	person := &Person{} //创建一个对象
	var data = `{"name":"fanOne","age":"11","sex":"male"}`
	_ = json.Unmarshal([]byte(data), &person)  //将这个data序列化成person的结构体,并传入其中
	fmt.Println(person.Name)
}

3. 流程控制

3.1 条件语句


func main(){
	x :=1 
	if x == 1 {
		fmt.Println("666")
	} else {
		fmt.Println("999")
	}
}

3.2 选择语句


	switch i {
	case 0:
		fmt.Printf("0")
	case 1:
		fmt.Printf("1")
	case 2:
		fmt.Printf("2")
	case 3:
		fmt.Printf("3")
	case 4, 5, 6:
		fmt.Printf("4, 5, 6")
	default:
		fmt.Printf("Default")
	}

3.3 循环语句


	sum := 0
	for i := 0; i < 10; i++ {
		sum += i
	}
	

	s := [3]int{1,2,3}
	for _,item := range s{
		fmt.Println(item)
	}

以上就是Go语言七篇入门程序结构与数据类型的详细内容,更多关于Go语言程序结构与数据类型的资料请关注编程网其它相关文章!

如何学习Go

如果你是小白,你可以这样学习Go语言~

七篇入门Go语言

第一篇:Go简介初识

第三篇:函数方法接口的介绍

第四篇:通道与Goroutine的并发编程

第五篇:文件及包的操作与处理

第六篇:网络编程

第七篇:GC垃圾回收三色标记

您可能感兴趣的文档:

--结束END--

本文标题: Go语言七篇入门教程二程序结构与数据类型

本文链接: https://www.lsjlt.com/news/156830.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言七篇入门教程二程序结构与数据类型
    目录1. 程序结构1.1 名称1.2 声明1.3 注释1.4 单双引号1.5 输出2. 数据类型2.1 整型2.2 浮点型2.3 复数2.4 布尔型2.5 字符串2.6 常量2.7 ...
    99+
    2024-04-02
  • Go语言七篇入门教程六网络编程
    目录1. Socket 编程1.1 Dial()函数2. HTTP 编程2.1 HTTP 客户端2.2 HTTP 服务端2.2.1 处理 HTTP 请求3. RPC 编程3.1 Go...
    99+
    2024-04-02
  • Go语言七篇入门教程五文件及包
    目录1. 文件处理1.1 JSON文件1.1.1 已知JSON结构1.1.2 未知JSON结构1.1.3 Encoder & Decoder1.2 XML文件1.3 二进制文...
    99+
    2024-04-02
  • Go语言七篇入门教程一简介初识
    目录简介为什么是GoGo应用WebCloud 云BlockChain 区块链如何学习Go其实我自己接触Go语言也还不到一年,20年的10月我才开始学Go的。 我自己也并不是很懂,但是...
    99+
    2024-04-02
  • Go语言七篇入门教程四通道及Goroutine
    目录1. 前言2. 通道简介2.1 声明2.1 读写2.3 通道详解2.3.1 例子2.3.2 死锁2.3.3 关闭通道2.3.4 缓冲区2.3.5 通道的长度和容量2.3.6 单向...
    99+
    2024-04-02
  • Go语言七篇入门教程三函数方法及接口
    目录1. 函数2. 方法3. 接口如何学习Go参考书籍: 《go语言程序设计》 1. 函数 每个函数声明都包含一个名字,一个形参列表,一个可选的返回列表以及函数体: func ...
    99+
    2024-04-02
  • Go语言七篇入门教程七GC垃圾回收三色标记
    目录GC如何判断一个对象是否可达 三色标记法原理如下如何学习GoGC GC全称Garbage Collection 目前主流的垃圾回收算法有两类,分别是追踪式垃圾回收算法(Traci...
    99+
    2024-04-02
  • Python入门教程(七)Python数字类型
    目录Python 数字类型IntFloat复数类型转换随机数Python 数字类型 Python 中有三种数字类型: intfloatcomplex 为变量赋值时,将创建数值类型的变...
    99+
    2023-05-15
    Python入门 Python数字类型
  • Go语言数据类型转换实战指南:快速入门教程
    快速上手Go语言数据类型转换:实战教程 引言:数据类型转换在程序开发中经常会遇到,特别是在处理不同类型之间的数据交互时尤为常见。在Go语言中,数据类型转换非常简单和高效。本文将通过实战教程,介绍Go语言中的数...
    99+
    2024-01-13
    Go语言 数据类型转换 快速上手
  • C语言入门篇--初识C语言及数据类型
    目录1.什么是C语言?2.第一个C程序&&知识点2.1头文件2.2main函数2.3函数调用2.4return0;3.数据类型3.1C语言数据类型3.2为什么有这么多...
    99+
    2024-04-02
  • go语言的数据类型转换教程
    Go语言中,数据类型转换通常使用强制类型转换”类型断言“进行,常见的数据类型转换方法如下:1、将一个整型数值转换为另一个整型数值时,可以使用强制类型转换;2、浮点型数值转换为另一个浮点型数值时,也可以使用强制类型转换;3、字符串转换为另一个...
    99+
    2023-12-18
    go语言数据类型转换 go语言 Golang
  • Python入门教程之变量与数据类型
    目录一、 Python变量与数据类型1.变量概述2.创建变量3.Python3常用的数据类型3.1.数字(Numbers)3.2.字符串(String)3.3.列表(list)3.3...
    99+
    2024-04-02
  • Go语言数据结构之双链表学习教程
    目录双链表创建节点双链表遍历扩展功能链表长度插入删除反转双链表总结双链表 双链表 (Doubly Linked List),每个节点持有一个指向列表前一个元素的指针,以及指向下一个元...
    99+
    2024-04-02
  • 一篇文章带你入门C语言数据结构:绪论
    目录绪论什么是数据结构?Example 1讨论Example 2Example 3Example 4总结绪论 什么是数据结构? 不同于计算机操作培训,注意与程序设计的区别。 Exam...
    99+
    2024-04-02
  • C语言数据结构与算法之排序总结(二)
    目录一、前言二、选择类排序1.简单选择排序2.树形选择排序3.堆选择排序三、归并排序四、分配类排序1.多关键字排序2.链式基数排序五、总结归纳一、前言 之前的排序总结(一)对插入类和...
    99+
    2024-04-02
  • MySQL索引数据结构入门详细教程
    目录引言1. 什么是索引2. 索引的数据结构2.1 B+Tree 和 B-Tree2.2 树高问题2.3 什么样的搜索可以用到索引?2.4 使用限制2.5 自适应哈希索引3. 小结引言 之前松哥写过一个 mysql 系列...
    99+
    2023-05-15
    MySQL索引数据结构 MySQL入门教程
  • Verilog语言数据类型基础教程
    目录线网(wire)寄存器(reg)向量整数,实数,时间寄存器变量数组存储器参数字符串线网(wire) Verilog 最常用的 2 种数据类型就是线网(wire)与寄存器(reg...
    99+
    2023-05-15
    Verilog数据类型 Verilog 基础教程
  • Go语言数据结构之插入排序示例详解
    目录插入排序动画演示Go 代码实现总结插入排序 插入排序,英文名(insertion sort)是一种简单且有效的比较排序算法。 思想: 在每次迭代过程中算法随机地从输入序...
    99+
    2024-04-02
  • GO语言入门学习之基本数据类型字符串
    目录字符串字符串转义符byte和rune类型修改字符串类型转换总结字符串 Go语言中的字符串以原生数据类型出现。 Go 语言里的字符串的内部实现使用UTF-8编码。 字符串的值为双引...
    99+
    2024-04-02
  • C语言编程数据结构基础详解小白篇
    目录数据结构的基本信息数据结构逻辑结构1,集合结构2,线性结构3,树结构4,图结构或网结构存储结构顺序储存结构链式储存结构抽象数据类型介绍 数据结构的基本信息 数据:是客观事物的符...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作