首页 > 其他分享 >Go语言学习Day1

Go语言学习Day1

时间:2023-01-07 00:11:38浏览次数:48  
标签:slice 语言 -- s2 fmt Day1 Go data s1

1.Go的函数、变量、常量、自定义类型、包(package)的命名方式遵循以下规则:

1)首字符可以是任意的Unicode字符或者下划线
2)剩余字符可以是Unicode字符、下划线、数字
3)字符长度不限

2.Go语言声明

 四种声明方式: var(声明变量), const(声明常量), type(声明类型) ,func(声明函数)。

3.Go的一些内置函数

append          -- 用来追加元素到数组、slice中,返回修改后的数组、slice
close           -- 主要用来关闭channel
delete            -- 从map中删除key对应的value
panic            -- 停止常规的goroutine  (panic和recover:用来做错误处理)
recover         -- 允许程序定义goroutine的panic动作
real            -- 返回complex的实部   (complex、real imag:用于创建和操作复数)
imag            -- 返回complex的虚部
make            -- 用来分配内存,返回Type本身(只能应用于slice, map, channel)
new                -- 用来分配内存,主要用来分配值类型,比如int、struct。返回指向Type的指针
cap                -- capacity是容量的意思,用于返回某个类型的最大容量(只能用于切片和 map)
copy            -- 用于复制和连接slice,返回复制的数目
len                -- 来求长度,比如string、array、slice、map、channel ,返回长度
print、println     -- 底层打印函数,在部署环境中建议使用 fmt 包

4.在go中修改字符串,首先要把它转换成[]rune 或者[]byte,无论哪种转换都会重新分配内存,并复制字节数组。

    func changeString() {
        s1 := "hello"
        // 强制类型转换
        byteS1 := []byte(s1)
        byteS1[0] = 'H'
        fmt.Println(string(byteS1))

        s2 := "博客"
        runeS2 := []rune(s2)
        runeS2[0] = '狗'
        fmt.Println(string(runeS2))
    }

5.go语言的切片Slice

1.切片是引用类型,是数组的一个引用,但自身是结构体,值拷贝传递。
2.切片是一个长度可变的数组
3. 切片遍历方式和数组一样,可以用len()求长度。表示可用元素数量,读写操作不能超过该限制。 
4. cap可以求出slice最大扩张容量,不能超出数组限制。0 <= len(slice) <= len(array),其中array是slice引用的数组。
5. 切片的定义:var 变量名 []类型,比如 var str []string  var arr []int。

6.copy函数在两个slice之间复制数据,复制长度以len小的为主,支持区间覆盖,并且两个切片指向同一底层数组,例如

package main

import (
    "fmt"
)

func main() {

data := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
fmt.Println("array data : ", data)
s1 := data[8:]
s2 := data[:5]
fmt.Printf("slice s1 : %v\n", s1)
fmt.Printf("slice s2 : %v\n", s2)
copy(s2, s1)
fmt.Printf("copied slice s1 : %v\n", s1)
fmt.Printf("copied slice s2 : %v\n", s2)
fmt.Println("last array data : ", data)

}
输出结果:

array data :  [0 1 2 3 4 5 6 7 8 9]
slice s1 : [8 9]
slice s2 : [0 1 2 3 4]
copied slice s1 : [8 9]
copied slice s2 : [8 9 2 3 4]
last array data :  [8 9 2 3 4 5 6 7 8 9]

7.slice遍历

package main

import (
    "fmt"
)

func main() {

    data := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    slice := data[:]
    for index, value := range slice {
        fmt.Printf("inde : %v , value : %v\n", index, value)
    }

}

8.String也支持切片操作,因为他本质是一个字符数组,但是要注意,对string类型进行修改的时候需要进行一下类型转换,转换成[]byte或者中文要转换[]rune

package main

import (
    "fmt"
)

func main() {
    str := "Hello world"
    s := []byte(str) //中文字符需要用[]rune(str)
    s[6] = 'G'
    s = s[:8]
    s = append(s, '!')
    str = string(s)
    fmt.Println(str)
}

9.new和make的区别

1.二者都是用来做内存分配的。
2.make只用于slice、map以及channel的初始化,返回的还是这三个引用类型本身;
3.而new用于类型的内存分配,并且内存对应的值为类型零值,返回的是指向类型的指针。

标签:slice,语言,--,s2,fmt,Day1,Go,data,s1
From: https://www.cnblogs.com/kyszdsmz/p/17031380.html

相关文章

  • 既然有MySQL了,为什么还要有MongoDB?
    大家好,我是哪吒,最近项目在使用MongoDB作为图片和文档的存储数据库,为啥不直接存MySQL里,还要搭个MongoDB集群,麻不麻烦?让我们一起,一探究竟,了解一下MongoDB的特点和基本用法,实......
  • R语言有极值(EVT)依赖结构的马尔可夫链(MC)对洪水极值分析|附代码数据
    阅读全文 : http://tecdat.cn/?p=17375最近我们被客户要求撰写关于极值分析的研究报告,包括一些图形和统计输出。为了帮助客户使用POT模型,本指南包含有关使用此模型的实......
  • 客服系统切换中英文多语言 - 使用js更新URL参数来实现切换 【唯一客服】网站网页客服
    我的客服聊天页面有多语言切换功能,是通过URL参数中的lang参数来进行区分的如果要切换中英文或者其他语言,就需要动态更新URL参数中的lang参数,所以实现下面这个函数 //......
  • django
    django1纯手撸web框架、wsgiref模块下的手撸框架、jinja2模版语法、django框架简介、下载、基本操作等2django静态文件相关配置、请求方法、链接mysql以及django的ORM......
  • C语言百日刷题第一天
    猜名次5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每......
  • day1
    学习目标认识软件测试行业软件测试概念:使用技术手段验证软件是否满足需求软件测试目的:用最少的人力,物力,财力,找到软件中的问题并修复,从而降低商业风险测试主流技能功......
  • 代码随想录day10 LeetCode 232. 用栈实现队列 225. 用队列实现栈
     232.用栈实现队列https://leetcode.cn/problems/implement-queue-using-stacks/利用两个栈来实现队列,一个先存储进去的,一个存储IN栈倒出来的元素,这样就可以获取到队首......
  • Django里ORM常用关键字
    一、ORM常用关键字 #关键概览1.create()2.filter()3.first()last()4.update()5.delete()6.all()7.values()8.values_list()9.distinct()10.order_by()11.g......
  • Uni-App 提交 App应用 到 Google Play 提示 API 级别过低的解决办法
    原文链接:Uni-App提交App应用到GooglePlay提示API级别过低的解决办法发现问题近日准备发布新版本上架到GooglePlay上时,突然出现了Changeyourapp'starget......
  • Golang的变量声明
    变量使用步骤声明赋值引用packagemainimport"fmt"funcmain(){ //1.变量的声明 varzlint //2.变量的赋值 zl=19 //3.变量的使用 fmt.Println(......