首页 > 其他分享 >Go学习笔记(一)

Go学习笔记(一)

时间:2024-03-07 09:13:40浏览次数:26  
标签:string 笔记 var 学习 字符串 func Go main

Go学习日记

Go的数据类型

bool: true 和 false

int: int8, int16, int32(int), int64

uint: uint8, uint16, uint32(uint), uint64

float: float32, float64

byte 字节类型, 本质是uint8, 对应的操作包是bytes

Golang的数值类型明确的制定了长度、有无符号

Golang不会做类型转换, 类型不同无法编译通过, 所以string只能和string拼接, strings包用来解决string的问题.

Go语言里的字符串长度

用len(str)函数获取到的长度, 这个是字节长度, 就是字符串占了多少个字节(byte). 用utf8库的RuneCountInString(str)函数来计算字符个数.

package main

import "unicode/utf8"

func main() {
	//输出9
	println(len("字符串"))
	//输出3
	println(utf8.RuneCountInString("字符串"))
	//输出5
	println(utf8.RuneCountInString("go字符串"))
}

从以上例子可以看出, 在Go里, 要计算字符串的字节长度, 用len()函数即可; 如果要计算字符个数, 要用编码库的函数来计算.

Go语言里的字符串拼接

和其他的一些语言一样, Go字符串拼接也是用"+", 但不支持字符串和其他类型直接拼接, 需要先转成字符串.

package main

import "strconv"

func main() {
  a := "a"
  b := 1
  //不可以这样
  //println(a + b)
  //需要先转成字符串
  println(a + strconv.Itoa(b)) //输出a1
}

一个奇怪的类型rune

package main

import "fmt"

func main() {
	var a = rune('a')
	//输出97
	fmt.Printf("str: %v\n", a)

	var str = []rune{'我', '是', 'r', 'u', 'n', 'e'}
	//输出[25105 26159 114 117 110 101]
	fmt.Printf("str: %v\n", str)
}

Go没有char类型, 直观上看rune就是字符, 就是Go的char类型. 但是, rune不是byte, 源码里rune=int32, 一个rune有四个字节, 这是Go的特色, 可以用来存世上所有的语言字符.

Go变量声明var

Go支持类型推断

//var a int = 1 可以简写如下
var a = 1
//局部变量(方法函数内部)还可以这样写, 省略var
a := 1

变量名一般用驼峰命名法

Go没有public, private等修饰符

//变量或函数名首字母大写,全局可以访问
//全局可访问变量
var Global = "全局变量"
//全局可访问函数
func GlobalFun() {
  //.....
}

//首字母小写,只能在包里使用,它的子包也不能使用
var local = "包变量"

var (
	FirstName string = "陈"
  LastName = "Bug"
  Age = 43
)

Go常量声明 const

常量无法修改值

package main

const hello = "world"

func main() {
	// hello = "hello world" 如再次修改值将报错,常量不可以改变值
	println(hello)
}

Go的函数方法声明func

语法 func 方法名(首字母是否大写决定了作用域) ([返回值类型列表])

方法可以返回多个不同类型的值, 这是一个很大的不同点

方法调用时,如需要忽略返回值可以用 _ = 方法名(...),和一些其他的语言一样,_代表舍弃

package main

func main() {
  
}

//方法名PrintLine, 有一个content的字符串参数, 并返回一个int数值和一个string字符串
func PrintLine(content string) (int, string) {
  Println(content)
  return 0, "done"
}

标签:string,笔记,var,学习,字符串,func,Go,main
From: https://www.cnblogs.com/codingpeng/p/18058115

相关文章

  • 企业级应用于架构设计笔记
    课堂笔记-主要是给自己复习的第一节课课程结构:架构定义:用一致认可方式从多个角度对系统的组成部分及各部分之间的协作关系所做的描述。软件架构的定义(软件体系结构SoftwareArchitecture):用开发团一致认可的方式从多个角度(业务、开发、运维等)对软件的组成部分及各部分之间的协......
  • C++STL学习第一篇(什么是STL以及string的各种功能用法)
    STLSTL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器、空间配置器。数据结构和容器管理:STL提供了多种数据结构和容器,如向量(vector)、链表(list)、集合(set)、映射(map)等。这些容器可以帮助程序员方便地存储和管理数据,根据需求进行动态调......
  • 推荐系统学习笔记(一)
    好的推荐系统疑问:推荐系统的主要任务,推荐系统和分类目录以及与搜索引擎的区别等什么是推荐系统如果对象数目巨大,用户只能通过搜索引擎找到自己需要的目标如果用户没有明确需求时,需要一个工具帮助筛选,给出一些建议,这个工具就是推荐系统推荐系统的任务联系用户和信息,一方......
  • 2252309------对飞机(航空)订票系统(C语言)进行逆向学习、分析、思考、设计构思、改进....
    **飞机订票系统**一、资料来源CSDN博主吴朋奉阅读量最高的一篇博文--飞机订票系统(C语言)----https://blog.csdn.net/weixin_47774641/article/details/111398063?spm=1001.2014.3001.5506二、运行环境Windows11+DEVC++三、源代码(来自博主吴朋奉)......
  • html5的学习
    HTML5基本标签<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>基本标签学习</title></head><body><!--标题标签--><h1>一级标签</h1><h2>二级标签</h2>......
  • 2024.3.6学习笔记
    1.InfoNCEloss(源自知乎https://zhuanlan.zhihu.com/p/506544456)1.引入把对比学习看成是一个字典查询的任务,即训练一个编码器从而去做字典查询的任务。假设已经有一个编码好的queryq以及一系列编码好的样本k0,k1,k2...,把k0,k1,k2...可以看作是字典里的key。假设只有一......
  • ICLR 2024|图像匹配新突破!GIM:首个从互联网视频中学习通用图像匹配器的框架
    前言 为了解决基于深度学习方法泛化性的问题,来自厦门大学、Intel、大疆的研究者们提出了GIM:LearningGeneralizableImageMatcherfromInternetVideos。GIM是第一个可以让匹配模型从互联网视频中学习到强泛化能力的训练框架。本文转载自机器之心仅用于学术分享,若侵权请......
  • 模拟退火学习笔记
    模拟退火,优雅的暴力我认为有必要摘抄一下提单上的简介ZX写的前言:本片适用于模拟退火入门-进阶模拟退火(SA)是一种随机化算法。当一个问题的方案数量极大(甚至是无穷的)而且不是一个单峰函数时,我们常使用模拟退火求解。一般的,很多题都可以用模拟退火水过,在OI界称之[优雅的暴......
  • 学习笔记
    coreUSER:存放工程文件、主函数文件main.c,以及其他包括system_stm32f10x.c等CORE:用来存放核心文件和启动文件OBJ:是用来存放编译过程文件以及hex文件STM32F10x_FWLib:用来存放ST官方提供的库函数源码文件SYSTEM:此文件夹里面的代码由ALIENTEK提供,是STM32F10x系列的底......
  • 学习进度条
     2024-03-05   所花时间(包括上课)2h   代码量(行)300   博客量(篇)1   了解到的知识点课上学习及java编程练习内容   ......