字符串操作

1.获取字符串的长度

len("你好“) 输出6,一个汉字占用三个字节

2.拼接字符串

+号,或者str3 = fmt.Sprintf("%v %v",str1,str2)

3.分割字符串

arr := stirngs.Split("abc-def-gh","-") //返回切片

4.连接切片,并返回字符串

str := strings.Join(arr,"*")

5.包含字符串

strings.Contains(str1,str2)

6.包含前缀或者后缀

strings.HasPrefix, strings.HasSuffix 前缀/后缀判断

7.字符串出现的位置

strings.Index() , strings.LastIndex() :如果查找不到返回-1

byte和rune

Go 使用了特殊的rune类型来处理Unicode,让基于Unicode的文本处理更为方便,也可以使用byte类型进行默认字符串处理,性能和扩展性都有照顾。

当需要处理中文等其他复合字符时,需要用到rune类型,rune类型实际是一个int32

遍历含有中文的字符串时

  1. unit8 类型,或者叫做byte类型,代表了ASCII码的一个字符
  2. rune类型,代表了一个UTF-8字符

unsafe.Sizeof()没法查看string类型数据所占用的存储空间,都是16。请使用len(str1)

可以使用for循环来遍历只包含ASCII码字符的字符串,但不能遍历含有中文的字符串

for i :=0 ;i<len(s) ; i++ { //bytefmt.Printf("%v(%c)",s[i],s[i])}

必须使用for range来遍历含有中文的字符串

for _, r:= range s{//runefmt.Printf("%v(%c)",r,r)}

类型转换

1.其他类型转字符串

var i int = 20

var f float64 =12.356

var t bool = true

var c byte = 'a'

第一种

fmt.Sprintf("%d",i)

fmt.Sprintf("%f",f)

fmt.Sprintf("%t",t)

fmt.Sprintf("%c",t)

第二种

strconv.FormatInt(int64(i),10)

strconv.FormatFloat(float64(f),'f',4,32)

2.字符串转其他类型

num , _ := strconv.ParseInt(str,10,64)//10进制,64位,返回值第二个是error。如果转换失败返回的值为0

操作符

1.求余操作,跟Java一致

余数 = 被除数 -(被除数/除数)* 除数

-10 %3 = -10 - (-10/3) * 3 = -10 - (-3)*3 = -1

2.++和--操作,Go中的++不是操作符,而是单独的语句

与java中的不同之处一:不能在赋值的时候使用

var a int

a = i++ //错误

与java中的不同之处二:没有前置的++和--

var a =12

--a //错误,没有前置的--

流程控制

1.if语句

括号建议省略;括号必须和if语句在同一行;即使只有一行代码,大括号也不能省略。

age :=30if age >20 {//逻辑代码,即使只有一行,大括号也不能省略}

2.for循环

golang中没有while语句,我们可以通过for代替

for{//无限循环}

3.for range循环

var str = "你好golang"for k,v := range str {fmt.Printf("key=%v,val=%c",k,v) //输出 key=0,val=你 ; key=3,val=好; key=6,val=g; key=7,val=o}

4.switch case

var n =5switch n {case 1,3,5,7,9: //也支持逻辑判断 n/2 !=0fmt.Println("奇数")break //可写可不写case 2,4,6,8,10: /n/2 ==0fmt.Println("偶数")default:fmt.Println("不在范围内")}

5.break

跟java一样也支持label的break

lable1:for i := 0; i < 2; i++ {for j := 0; j < 10; j++ {if j == 3 {break lable1}fmt.Printf("i=%v j=%v\n", i, j)}}

输出

i=0 j=0
i=0 j=1
i=0 j=2

6.continue

跟java一样也支持label的continue

lable2:for i := 0; i < 2; i++ {for j := 0; j < 10; j++ {if j == 3 {continue lable2}fmt.Printf("i=%v j=%v\n", i, j)}}

输出:

i=0 j=0
i=0 j=1
i=0 j=2
i=1 j=0
i=1 j=1
i=1 j=2

数组

1.初始化

var arr [3]int
arr[0] = 1
arr[1] = 2
arr[2] = 3
fmt.Println(arr)var arr2 = [4]string{"1", "b", "c", "d"}
fmt.Println(arr2)var arr3 = [...]string{"1", "2", "3", "4"}
fmt.Println(arr3)
fmt.Printf("the length of arr3 is %v \n", len(arr3))var arr4 = [...]string{0: "0", 1: "1", 6: "6"}
fmt.Println(arr4)
fmt.Printf("the length of arr4 is %v \n", len(arr4))

2.golang中的数组是值类型引用,这一点跟Java语言是不一样的。

var arr = [...]string{"a", "b", "c"}
var arr2 = arr
arr[0] = "e"
fmt.Println(arr)
fmt.Println(arr2)

输出

[e b c]
[a b c]

默认值

bool -> false

numbers -> 0

string -> ""

pointers -> nil

slice -> nil

maps -> nil

channels -> nil

funcitons -> nil

切片

切片跟数组不同,切片是引用类型,声明和初始化的不同仅仅是"[]"中有没有指定长度

var arr = [5]string{"a", "b", "c", "d", "e"}  //这是数组
var slice = []string{"a", "b", "c", "d", "e"} //这就是切片
fmt.Printf("arr is %v, %T \n", arr, arr)
fmt.Printf("slice is %v, %T \n", slice, slice)

切片的初始值

var slice []string
fmt.Printf("slice is %v, %T \n", slice, slice)
fmt.Println(slice == nil)

基于数组定义切片

切片的底层是基于数组的,所以可以通过数组来定义切片

a := [5]int{55,56,57,58,59}b := a[:] //获取数组中所有的值c := a[1:4] //左闭右开,也就是包含左边的元素,不包含右边的元素d := a[2:] //从第二个开始,到最后e := a[:3] //第三个元素(不包含)前所有的元素

注意切片是基于引用的,所以当修改了数组中的元素后,也会改变切片中的值

a := [5]int{55,56,57,58,59}
e := a[:3] //第三个元素(不包含)前所有的元素
a[0] = 40
fmt.Printf("e is %v\n", e)

输出

e is [40 56 57]

基于切片定义切片

a := []int{55,56,57,58,59}
d := a[2:] //从第二个开始,到最后

切片的长度和容量

切片拥有自己的长度和容量,可以用len()来求长度,使用cap()来求容量

长度:切片包含元素的个数

容量:切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数

s := []int{1,2,3,4,5,6}
fmt.Printf("长度%d 容量%d\n",len(s),cap(s)) //长度6,容量6
a := s[2:]
fmt.Printf("长度%d 容量%d\n",len(a),cap(a)) //长度4,容量4
a := s[1:3]//2,3
fmt.Printf("长度%d 容量%d\n",len(a),cap(a)) //长度2,容量5,底层的数组还是{1,2,3,4,5,6}

切片的本质

切片的本质就是对底层数组的封装,它包含了三个信息:底层数组的指针、切片的长度和切片的容量

arr := [7]string {"This","is","the","tutorial","of","Go","language"}slice := arr[1:6]

使用make创建切片

/*make([]T, size, cap)T:切片的元素类型size:切片中元素的数量cap:切片的容量
*/
a := make([]int, 2, 10)
fmt.Println(a)      //[0 0]
fmt.Println(len(a)) //2
fmt.Println(cap(a)) //10

切片动态扩容

var slice []string
fmt.Printf("slice is %v,len is %v, cap is %v \n", slice, len(slice), cap(slice))slice = append(slice, "a", "b", "c")
fmt.Printf("slice is %v,len is %v, cap is %v \n", slice, len(slice), cap(slice))

输出

slice is [],len is 0, cap is 0
slice is [a b c],len is 3, cap is 3

Java程序员学Golang相关推荐

  1. java程序员学技术都会访问那些网站?

    Java程序员学技术的网站 哔哩哔哩 https://www.bilibili.com/ CSDN https://www.csdn.net/nav/java 掘金 https://juejin.cn ...

  2. 多线程设置操作时间间隔_听说,有位Java程序员学完这59道多线程面试题之后,直接面上阿里...

    前言 多线程是指从软件或者硬件上实现多个线程并发执行的技术.具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能.具有这种能力的系统包括对称多处理机.多核心处理器以 ...

  3. java程序员学C#基本语法两个小时搞定(对比学习)

    对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import ...

  4. 给Java程序员的Golang教程

    Go与Java 零.GoApi文档和中文社区网址 Go的中文api文档:https://studygolang.com/pkgdoc Go中文社区网站:https://studygolang.com/ ...

  5. 指针的理解 -- java程序员学C语言日记二

    这两个星期内都是在忙公司的事情,所以没有什么时间看C语言,OK,这几天,自己就发现了C语言中指针这个东西,以前看书觉得就只不过是一4个字节的,用于存放了某对象的地址而已,同时可以用这个地址加加减减.. ...

  6. 了不起的盖茨比读后感---Java程序员学Python学习笔记(二)

    还是从logdown搬过来的,搬的时候稍微排版了下.今天废话比较多,其实这应该搬到豆掰电影去的.不喜的看官可以绕过.顺便推荐该电影打雷姐唱的一首歌,Young and Beautiful 我们奋力前行 ...

  7. [转载] java程序员快速学c++

    参考链接: 如何成为一名优秀的Java程序员 java程序员快速学c++   java程序员学cplus,其实大部分的语法是一样的,但是对java程序员来将,还是有写难点需要注意.看完这些还不能保证会 ...

  8. Java程序员被狠狠「暴击」,网友:愿天堂没有计算机 ....

    都说一入Java深似海,从此代码是爱人,但是学习的过程却从来都不轻松. 当下,越来越多的互联网企业,招聘Java工程师时,明确写道需熟练掌握JavaWeb技术.作为衔接前后端的重要一环,JavaWeb ...

  9. java程序员入门先学什么开发者工具

    学习java编程语言,那么开发工具是肯定少不了的,程序员入门基础中开发工具是一定要学会的,可以帮助开发者们提高开发效率.更优雅的写代码.由于开发者涉及的技术领域众多,以后端开发者的视角盘点平时可能用得 ...

最新文章

  1. Ant Design 被删代码已恢复,现登顶 GitHub Trending Top 2
  2. 从VMware ESX Server 4升级到ESXi 5
  3. 分摊的意思_接了两单顺风车遇到几个有意思乘客,后来把顺风车软件删了
  4. php扩展实现hook,ThinkPHP3.2 扩展(钩子,HOOK)
  5. Django-HttpResponse、render,、redirect(转载)
  6. 使用 Tye 辅助开发 dotnet 应用程序
  7. 升级npm之后,保存的位置仍然在C盘,不在自己规定的盘下
  8. java集群_「Java知识」MyCat的图文视频讲解,MyCat分片集群分表分库策略
  9. 成功的人和不成功的人最大的区别
  10. CYQ.Data V4.5.5 版本发布[顺带开源Emit编写的快速反射转实体类FastToT类]
  11. 机器学习算法之KNN算法
  12. FTP-学习笔记(1)
  13. SQL Server存储过程文本加密与解密过程详解 2019版可用
  14. 高级计算机器,高级计算器最新版
  15. 2022年全球与中国汽车MEMS加速度计市场现状及未来发展趋势
  16. EM78P153单片机构成433MHz发射电路
  17. java登陆注册界面_java编写登陆注册页面(简单一点的,连接数据库)
  18. idea 2020.2隐藏了菜单栏Main Menu 恢复方法
  19. 高考录取查询显示内部服务器错误,为什么江苏成人高考成绩查询网页一直打不开...
  20. IDEA突然不能输入中文

热门文章

  1. C语言高校水电煤气管理系统
  2. 苏宁易购 App 客户端架构演进
  3. linux开源软件推荐,10个Linux平台开源ERP软件推荐
  4. Vulkan_渲染可视化调试(VK_EXT_debug_marker与RenderDoc离线图形调试)
  5. 国产电影最俗套的九十九个镜头(完整版)
  6. Hexo(sakura)添加RSS订阅
  7. 2022深圳国际医疗器械展览会
  8. Mac OS X的Spotlight综述
  9. java计算机毕业设计某山区环境保护监督管理平台源程序+mysql+系统+lw文档+远程调试
  10. Hello World小程序笔记